当前位置: 首页 > news >正文

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!!!

http://www.dtcms.com/a/342927.html

相关文章:

  • visual studio编译的软件查找所依赖的运行库方法
  • 基于单片机智能路灯控制
  • 学习嵌入式第三十四天
  • 杂记 07
  • BGP高级特性
  • AI论文速读 | 多模态能否助力时间序列预测?时序预测中融合文本的边界与条件
  • Oracle CLOB类型转换
  • 数据分析三剑客
  • 如何解读京东按图搜索(拍立淘)API(jd.item_search_img)的返回值
  • AI大模型支持下的:CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析
  • JVM-(7)堆内存逻辑分区
  • 3个脱节,5大特征,1套方法:破解AI落地难题
  • 37、需求预测与库存优化 (快消品) - /供应链管理组件/fmcg-inventory-optimization
  • 【互动屏幕】大屏拼接在数字展厅展示上有哪些优势?
  • (CVPR-2025)通过频率分解实现身份保持的文本到视频生成
  • 【音视频】闭合GOP和开放GOP
  • 旅游小程序开发指南
  • 第三阶段数据库-5:数据库的主键,索引,约束,表间关系的图形化操作
  • 8.Shell脚本修炼手册---sed工具的基本使用
  • HarmonyOS 实战:6 种实现实时数据更新的方案全解析(含完整 Demo)
  • JavaScript中的深浅拷贝
  • Llama-Factory微调 Qwen2.5-VL-3B 模型
  • 人工智能未来趋势如何?
  • 【秋招笔试】2025.08.19百度秋招机考第一套
  • 算法训练营day57 图论⑦ prim算法精讲、kruskal算法精讲
  • 前端无感刷新 Token 的 Axios 封装方案
  • Github 下载加速--2025-08-21 亲测好用
  • 神经网络(Neural Network, NN)
  • gemini cli 用命令行玩转 AI 多模态开发
  • 网络安全大模型测试指标体系设计思路