一、核心
- 通过心跳方式保证集群节点之间的存活状态
- 通过一致性协议保证数据AP或者CP
二、协议
Nacos中有两种协议,JRaft(CP)、Distro(AP),协议本身没有什么高大上,只是有一套规则保证CAP;
CAP理论:
- C:Consistency(强一致性)
- A:Availability(可用性)
- P:Partition tolerance(分区容错性)
注册中心:特性更加适合AP,基于内存,保证高可用所以在Nacos中使用Distro协议;
配置中心:特性需要保证各节点配置是同步的,基于存储设备,所以使用的JRaft协议;
1. 集群保活
- 每五秒和集群其中一个节点交换节点信息-http;
- 第一次5秒给所有发送请求检查健康,后续2秒检查一次-http;
2. tcp保活
Nacos2.*开始使用Grpc,所以有一套保证连接的方式,这个连接可能是集群之间也可能是实例于集群之间的
只管理连接层面的,不管业务层面
- 连接活跃时间大于5秒给被连接对象发送一次心跳包-grpc;
- 心跳检查失败后,不断重试-睡眠-重试,最少五秒尝试重连一次-grpc;
- 给注册到节点的连接,活跃时间超过20秒的发送检查包,失败就断连-grpc;
2. Distro(AP)怎么保证注册中心数据最终一致(Base)
主要在内存中保存集群数据和实例数据
- 集群节点启动时全量拉去其他所有集群节点的数据;
- 根据权重选择获取数据的集群节点,也就是连接的集群节点;
- 每个5秒轮询一个节点校验元数据,校验失败全量拉取;
- 每个节点独立处理读请求,及时从本地发出响应。
- 写到本机,同步给其他节点