nacos服务端-AP模式
2022-06-27 11:36:04 0 举报
nacos服务端-AP模式
作者其他创作
大纲/内容
createServiceIfAbsent
放入到内存中
Datum datum = consistencyService.get();
检查当前集群的服务实例
consistencyService.listen();
优先从缓存中拿
获取创建的或者缓存中的
handle(pair);
getPushService().serviceChanged(this);
Distro协议处理数据
run()
获取缓存中的数据
添加实例到服务中
nacos-client
Notifier
获取所有的临时实例
加同步锁
PushService
entry.getValue().init();
com.alibaba.nacos.naming.controllers.InstanceController#register
添加集群检查定时任务
1、获取service实例的副本;2、然后把需要变动的实例在副本上进行操作(新增、更新、删除);3、本质是一种copyOnWrite的思想。
HealthCheckTask
1、将实际数据和缓存比对并更新;2、将注册的数据加入到副本;
ServiceManager#registerInstance
5秒执行定时任务
发送service变动udp消息
将最新的副本数据,替换当前的实例数据
最终实现更新逻辑的是cluster
创建、初始化、放入内存结构中
synchronized (service)
DistroConsistencyServiceImpl
加入到队列中
healthCheckProcessor.process(this);
putServiceAndInit(service);
第一步:创建Service
监听数据变化
ClientBeatCheckTask
putService(service);
List<Instance> instances = service.allIPs(true);
createEmptyService
超过默认15秒则下线
udpPush(ackEntry);
instance.setHealthy(false);
distroProtocol.sync
deleteIp(instance);
初始化Cluster
检查和更新临时实例的状态,如果它们已过期则将其删除。AP模式下的健康检查
1、一种称为Distro的一致性协议算法使用发行版算法将数据分成许多块。2、每个 Nacos 服务器节点只负责一个数据块。每个数据块都由其负责的服务器生成、删除和同步。所以每个 Nacos 服务器只处理总服务数据的一个子集的写入。3、 同时每个 Nacos 服务器都会收到其他 Nacos 服务器的数据同步,所以每个 Nacos 服务器最终都会有一套完整的数据。
service.init();
HealthCheckReactor.scheduleCheck(checkTask);
超过30秒则删除
onApplicationEvent(ServiceChangeEvent event)
CP模式下的健康检查
HealthCheckReactor.scheduleCheck(clientBeatCheckTask)
ephemeralInstances = toUpdateInstances;
0 条评论
下一页