springcloud-nacos组件浅析-3

背景

  之前2篇学习过nacos客户端注册相关组件的注册,这里要继续学习下nacos服务端注册原理。

组件分析

  

  如上所示分别为Service、Cluster、Instance三个服务模型结构,可有如下关系。

  接下来看看ServiceManager。

  ServiceManager执行注册时,首先创建服务放到Map中,然后初始化service,service初始化做延时客户端心跳检查任务,其次添加Instance,将添加实例委托给ConsistencyService.

  接下来看看ConsistencyService添加实例的过程,nacos默认AP模式,按Distro协议实现实例添加。

  1、DistroConsistencyServiceImpl初始化时会执行定时任务Notifier,Notifier循环执行从其阻塞队列中拿Pair,触发Record Listener去注册Instances(即格局key去DataStore中获取Instances注册);2、DistroConsistencyServiceImpl由ServiceManager触发添加Instance时会向DataSore中添加Instances并向Notifier中的阻塞队列中添加通知(服务注册)任务。这里还涉及集群同步(taskDispatcher.addTask(key))。接下来就是RecordListener的触发过程。

  回头看看Service,发现Service即是RecoredListener,其最终执行实例注册,即分3步走,1、将ClusterMap复制到新的ClusterMap中,2、遍历Instances将instances添加到新的clusterMap中,3、合并新的clusterMap到Service的clusterMap中。当然这里还涉及cluster的初始化,即健康检查过程(HealthCheckTask)。到这里基本上注册就完成了。

总结

  可以看到服务注册是个相对复杂的过程,但是看到ServiceManager的Map<String, Map<String, Service>> serviceMap = new ConcurrentHashMap<>()和服务的模型结构,即Service、Cluster、Instance也能大概猜到服务的存储,无非就是Service的构建,然后放到Map中,那剩下具体的就是要提高写入性能和高可用,即批次异步添加和copyOnWrite。接下来会继续学习下gateway。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&一步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值