Nacos-9--认识Nacos中的Distro协议(Nacos高可用的实现原理)
Nacos的Distro协议是其自研的AP(高可用性)分布式一致性协议,专为临时实例(Ephemeral Instance)设计。它通过异步复制和最终一致性机制,确保在分布式环境下即使部分节点故障或网络分区,服务注册与发现仍能正常工作。
1、Distro协议的核心设计思想
Distro协议的设计目标是高可用性和动态扩展性。
核心思想:
- 平等机制:所有Nacos节点地位平等,均可独立处理读写请求。
- 异步复制机制:节点间通过异步方式同步数据,避免阻塞操作。
- 健康检查机制:定期校验数据一致性,自动修复数据差异。
- 本地读机制:读请求直接从本地节点响应,提升性能。
- 数据分片机制:每个节点负责部分数据,通过哈希算法分配责任节点。
2、Distro协议的工作原理
1、数据初始化
- 新节点加入:新节点启动时,会向其他节点发起全量数据拉取请求,获取所有临时实例数据。
- 全量同步:通过轮询其他节点,拉取全量数据并加载到本地内存缓存中。
2、写操作流程
当客户端向Nacos注册临时实例时,Distro协议的处理流程如下:
(1)、请求拦截:前置Filter拦截请求,根据实例的IP和端口计算其所属的Distro责任节点。
(2)、请求转发:若当前节点非责任节点,将请求转发至责任节点。
(3)、本地写入:责任节点将实例数据写入本地内存缓存(如ConcurrentHashMap)。
(4)、异步同步:
- 将数据变更加入阻塞队列(BlockingQueue)。
- 触发1秒延迟任务,将数据同步到其他节点。
3、读操作流程
- 本地读取:每个节点维护全量数据(通过异步同步),读请求直接从本地内存返回,无需跨节点查询。
- 快速响应:本地读机制保证了低延迟和高吞吐量。
4、数据校验与修复
- 心跳机制:节点间定期发送心跳,携带数据元信息(如服务名、实例数、校验值)。
- 元信息校验:若发现数据不一致(如校验值差异),触发全量数据拉取,补齐缺失数据。
- 网络分区恢复:当网络分区恢复时,节点间自动合并数据分片,修复一致性。
3、Distro协议的核心特性
1、异步复制机制
- 最终一致性:数据变更通过异步任务同步到其他节点,容忍短暂不一致。
- 延迟任务:1秒延迟任务将数据同步到其他节点,避免频繁网络开销。
2、责任节点分配
- 哈希算法:通过哈希计算确定实例的责任节点(如hash(ip:port) %节点数),确保数据分片均匀。
- 路由转发:非责任节点接收写请求时,自动转发到责任节点。
3、健康检查与补偿
- 心跳校验:节点间定期交换元信息,检测数据一致性。
- 数据补偿:发现不一致时,触发全量数据同步(如新节点加入或网络恢复)。
4、高可用性保障
- 容忍节点故障:即使部分节点宕机,集群仍能提供服务。
- 网络分区容忍:分区期间各节点独立处理请求,恢复后自动修复数据。
4、Distro协议的适用场景
Distro协议适用场景:
- 临时实例注册:如微服务实例(Ephemeral=true),需快速注册和自动剔除。
- 高可用性优先:容忍短暂不一致,但要求服务持续可用(如电商、社交应用)。
- 动态扩展:支持弹性扩缩容,实例频繁变动的场景。
5、Distro协议的优缺点
优点:
- 高可用性:节点故障或网络分区时仍能提供服务。
- 性能高:本地读机制和异步复制降低延迟。
- 动态扩展:支持大规模节点扩展,适合云原生环境。
- 自动修复:通过心跳和数据校验自动修复一致性。
缺点:
- 最终一致性:数据同步存在延迟,可能读取到旧数据。
- 不适用于强一致性场景:如金融交易配置、关键服务注册需使用CP模式(Raft协议)。
6、Distro协议(AP)与Raft协议(CP)模式对比
7、Distro协议的实现细节
1、核心类与方法
- DistroConsistencyServiceImpl:
- 负责处理写请求和异步同步任务。
- 关键方法:put()(写入数据)、sync()(同步数据)。
- DistroProtocol:
- 管理节点间的数据同步和路由转发。
2、数据同步流程
1、写入本地缓存:数据先写入本地内存。
2、加入同步队列:触发异步任务,将数据加入BlockingQueue。
3、延迟同步:1秒后将数据同步到其他节点(通过HTTP请求)。
4、客户端通知:通过UDP推送变更到客户端。
3、新节点加入流程
1、全量拉取:新节点向其他节点发起/v1/ns/raft/data请求获取全量数据。
2、加载本地缓存:将数据加载到本地内存。
3、定期校验:启动后与其他节点定期交换元信息。
8、总结
Distro协议是Nacos实现高可用服务注册与发现的核心机制,通过平等节点、异步复制、最终一致性的设计,平衡了性能与可用性。它适用于临时实例的动态管理场景,但在需要强一致性的场景(如持久化配置、金融系统)中,需切换到基于Raft的CP模式。通过灵活选择AP/CP模式,Nacos能够满足不同业务场景的需求。
向阳前行,Dare To Be!!!