Nacos 服务注册源码分析(1.4.2)
2021-07-09 22:29:15 36 举报
Nacos 服务注册源码分析(1.4.2)主要关注于 Nacos 服务注册的核心实现。首先,通过解析客户端发送的注册请求,Nacos 会将服务信息存储到内存中的服务注册表中。同时,为了支持高可用和负载均衡,Nacos 还采用了分布式集群的方式来部署服务注册表。在集群内部,各个节点之间通过 Raft 协议来保证数据的一致性。此外,Nacos 还提供了健康检查、动态配置等功能,以帮助开发者更好地管理和维护微服务应用。总之,Nacos 服务注册源码分析(1.4.2)为我们提供了一个深入了解 Nacos 服务注册实现原理的机会,有助于我们更好地掌握微服务架构的设计和实践。
作者其他创作
大纲/内容
NacosRegistration
DistroConsistencyServiceImpl#put
获取 instnce
CP 模式采用 Reft 协议
raftStore.updateTerm(local.term.get());
服务注册,通过 Registration 构建 instance
Notifier#run
自动过期
写入内存
添加当前实例到 service
获取服务的 ip. 端口等信息
服务注册
循环 take
group
instance.setLastBeat(System.currentTimeMillis());
获取 servie
HealthCheckReactor.scheduleNow(clientBeatProcessor);
KeyBuilder.matchEphemeralKey(key) ? ephemeralConsistencyService : persistentConsistencyService
Nacos Client1.4.2
同步到其他服务节点
5s 发送一次心跳
刷新 service 中的 instance 列表
更新 instance 的 lastBeat
获取 service 对象通过 namespaceId 和 serviceName
BeatTask#run
Spring 事件机制,启动过程中会调用该方法
发心跳
Instance
添加实例变更到队列
RaftConsistencyServiceImpl#put
获取当前服务的所有 instance 实例
发给主节点
InstanceController#register
this.start()
register()
NacosServiceRegistryAutoConfiguration
DefaultPublisher#run
如果当前服务没有注册,创建新的服务信息
ClientBeatProcessor#run
是否定时发送心跳
创建 schedule
维持心跳(5秒一次)
解析 Instance 对象
执行 run 方法
判断
#onApplicationEvent()
> 30s 无心跳
调用 RecordListener 的 ONCHANG 事件
NacosAutoServiceRegistration
serviceRegistry.register(getRegistration())
Nacos Server1.4.2
ClientBeatCheckTask#run
Service#init
ApplicationContextAware
deleteIp(instance);
HealthCheckReactor.scheduleCheck(clientBeatCheckTask);
发送心跳
instance.isEphemeral()
5 秒钟执行一次
POST://v1/ns/instance/beat
service.processClientBeat(clientBeat);
RaftController#onPublish
parseInstance(request)
getIpAddress(request);
立即执行 shedule 去更新心跳
extends
implements
handle(pair);
POST://v1/ns/instance
namespace
HttpClient.asyncHttpPostLarge
过半机制,大于 1/2 + 1 的节点写入成功才返回成功
final CountDownLatch latch = new CountDownLatch(peers.majorityCount());
发布成功事件
是否是 leader
注册
listener.onDelete(datumKey);
Service
数据持久化
AbstractAutoServiceRegistration
DELETE 事件
NacosServiceRegistry
!isLeader()
删除实例
AP 模式采用 Distro 协议
0 条评论
回复 删除
下一页