nacos服务端集群中的某个节点重启后,内存里的注册的instances都消失了。
它是怎么保证nacos-server重启后,重新得到已注册节点的数据的?
猜想1:启动的时候,就从其他存活的nacos-server节点里,把一次性把数据全量复制过来。有这个过程吗?源码入口在哪里?
猜想2:客户端的心跳任务是一直存活的,不断发送心跳请求/instance/beat。InstanceController会收到心跳,刷新时间戳。但是没找到Instacne时,会重新注册。
但这种方式,只保证这1个instance的重新注册。 难道只能依赖所有微服务各自的心跳,并且恰巧发送到这个重启后的nacos时,才能一点点还原回来吗。
猜想3:不用还原,nacos注册中心AP模式,重启之后,不一样就不一样。但是个人感觉不太可能,要不然页面上查不到了。
所以究竟是哪种情况呢?很多源码课程里面也没讲到
这篇文章有涉及:Nacos源码分析-集群间临时实例数据的一致性同步
猜想一:在源码中查看com.alibaba.nacos.naming.core.ServiceManager和com.alibaba.nacos.naming.consistency.persistent.raft.RaftCore类可以看看这个过程。
猜想二:这篇文章有讲到心跳机制的源码:Nacos注册中心原理及核心源码分析大致的算法就是通过serviceName计算出一个Hash值然后跟Nacos集群中所有机器数量进行取模,得到的结果如果跟当前Nacos Server节点在集群List的index和lastIndex之间,那么就采用当前的Nacos Server节点进行心跳检测。
。你的第一个和第二个猜想没问题,猜想三不太对,在AP模式下,Nacos可能会牺牲一些一致性来保证更高的可用性。但是重启之后后Nacos一样会尽量保证数据的一致性。