文章目录
Nacos集群下心跳机制相对于单机会有怎样的改变?
在上一遍单机模式下心跳机制的文字中有提到过这段代码:
我们发现第一个判断,如果这个服务的心跳不是由当前server负责,直接退出。这句话是什么意思呢?我们现在就来阅读以下其中源码。
通过这样一个逻辑,取到对应的Nacos机器。
- 这样的做的原因是什么呢?
当Nacos在集群模式下,需要对客户端的机器检查心跳,维护心跳,那么需要集群中的每台机器都去检查心跳吗?肯定是只有一台去做心跳检查,然后进行同步,这样设计才是合理的。所以再看上面的代码,当有服务进行健康检查时,执行到这个方法,取模以后发现负责心跳检查的服务并不是当前服务,那么直接退出。只有当负责这个服务心跳检查的服务执行时才能正常执行。
后续逻辑就和单机模式一样了。
- 如果其中一台集群挂了,取模不就发生错误了,需要使用一致性hash算法吗?
不需要。Nacos集群相互之间也维护了心跳,它会定时的去调用其它集群机器的心跳接口, 如果一段時間未请求在,则认为服务已经挂了,则会更新服务size,解决取模发生错误。这就是集群服务之间节点状态的同步。
Nacos对于每个节点独立处理的数据,会及时同步给其它节点,来保持一个数据的一致性,可能会有一点点时间延迟,但是基本可以忽略。
CAP原则和BASE原则
- CAP原则
C:一致性(Consistency)
A:可用性(Availability)
P:分区容错性(Partition tolerance) - BASE原则
BA:基本可用(Basically Available)
S:软状态(Soft State)
E:最终一致性(Eventual Consistency)
常见的注册中心实现对比
- mysql单机(CA)
- eureka集群(AP)
- zookeeper集群(CP