Nacos服务注册中心原理总结

​ 1、客户端启动时会将当前服务的信息包含ip、端口号、服务名、分组名、集群名等信息封装为一个Instance对象,准备向Nacos服务器注册服务,在注册服务之前,会根据Instance中的信息创建一个BeatInfo对象,然后创建一个定时任务,每隔一段时间向Nacos服务器发送PUT请求并携带相关信息,作为定时心跳连接,服务器端在接收到心跳请求后,会去检查当前服务列表中有没有该实例,如果没有的话将当前服务实例重新注册,注册完成后立即开启一个异步任务,更新客户端实例的最后心跳时间,如果当前实例是非健康状态则将其改为健康状态;
​ 2、心跳定时任务创建完成后,通过POST请求将当前服务实例信息注册进Nacos服务器,服务器端在接收到注册实例请求后,会将请求携带的数据封装为一个Instance对象,然后为这个服务实例创建一个服务Service,一个Service下可能有多个服务实例,服务在Nacos保存到一个ConcurrentHashMap中,格式为命名空间为key,value为map,分组名和服务名为内层map的key,value为服务数据,
Map(namespace,Map(group::serviceName, Service))
​ 3、服务创建完成之后,开启一个定时任务(5s),检查当前服务中的各个实例是否在线,如果实例上次心跳时间大于15s就将其状态
设置为不健康,如果超出30s,则直接将该实例删除;
​ 4、然后将当前实例添加到对应服务列表中,这里会通过synchronized锁住当前服务,然后分两种情况向集群中添加实例,如果是持久化数据,则使用基于CP模式的简单Raft协议,通过leader节点将实例数据更新到内存和磁盘文件中,并且通过CountDownLatch实现了一个简单的raft写入数据的逻辑,必须集群半数以上节点写入成功才会给客户端返回成功;
​ 5、如果是非持久话实例数据,使用的是基于AP模式的Distro协议,首先向任务阻塞队列添加一个本地服务实例改变任务,去更新本地服务列表,然后在遍历集群中所有节点,分别创建数据同步任务放进阻塞队列异步进行集群数据同步,不保证集群节点数据同步完成即可返回;
​ 6、在将服务实例更新到服务注册表中时,为了防止并发读写冲突,采用的是写时复制的思想,将原注册表数据拷贝一份,添加完成之后再替换回真正的注册表,更新完成之后,通过发布服务变化事件,将服务变动通知给客户端,采用的是UDP通信,客户端接收到UDP消息后会返回一个ACK信号,如果一定时间内服务端没有收到ACK信号,还会尝试重发,当超出重发时间后就不在重发,虽然通过UDP通信不能保证消息的可靠抵达,但是由于Nacos客户端会开启定时任务,每隔一段时间更新客户端缓存的服务列表,通过定时轮询更新服务列表做兜底,所以不用担心数据不会更新的情况,这样既保证了实时性,又保证了数据更新的可靠性;
​ 7、服务发现:客户端通过定时任务定时从服务端拉取服务数据保存在本地缓存,服务端在发生心跳检测、服务列表变更或者健康状态
改变时会触发推送事件,在推送事件中会基于UDP通信将服务列表推送到客户端,同时开启定时任务,每隔10s定时推送数据到客户端。

  • 15
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Nacos(全称:Not Another Configuration Service)是一个开源的动态服务发现、配置管理和服务治理平台。作为注册中心Nacos提供了服务注册与发现的功能,可以帮助应用程序在分布式环境中自动进行服务注册和发现。 Nacos注册中心原理如下: 1. 服务注册:当应用程序启动时,它会向Nacos注册中心发送一个注册请求,包含了该应用程序的信息,比如应用程序的名称、IP地址、端口号等。Nacos将这些信息保存在自己的数据存储中。 2. 服务发现:当应用程序需要调用其他服务时,它会向Nacos注册中心发送一个服务发现请求,请求中包含了需要调用的服务的名称。Nacos会根据这个请求,在自己的数据存储中查找对应的服务信息,并返回给应用程序。 3. 服务注册与发现的心跳机制:为了保证注册中心能够实时感知到服务的可用性,Nacos采用了心跳机制。注册的应用程序会定时向Nacos发送心跳请求,告知自己的健康状态。如果一个应用程序长时间没有发送心跳请求,Nacos将会把该应用程序标记为不可用。 4. 服务实例的动态变化:当一个应用程序启动或关闭时,它会向Nacos注册中心发送相应的请求,Nacos会根据这些请求来更新自己的数据存储,保持服务实例信息的最新状态。其他应用程序通过服务发现请求时,会获取到最新的服务实例列表。 总结来说,Nacos注册中心通过服务注册和服务发现的机制,实现了应用程序之间的动态通信和协同工作。它能够帮助开发人员构建可靠的分布式系统,并提供了一些高级功能,如负载均衡、故障转移等。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值