Nacos 一致性协议:Distro协议

Distro协议是Nacos针对临时实例数据的一致性协议,采用AP分布式,具最终一致性。其设计思想是节点平等处理读写请求,各负责部分数据并定时校验。新节点全量拉取数据,集群定期发心跳。写请求按需转发,读请求本地处理,能维持大量服务实例存储与一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Distro协议是一种AP分布式协议,是一直最终一致性的协议

设计思想

  • nacos每个节点是平等的都可以处理写请求,同时把数据同步到其他节点
  • 每个节点只负责部分数据,定时发送自己负责的数据的校验值到其他节点来保持数据一致性
  • 每个节点独立处理读请求,及时从本地发出响应

数据初始化

新加入的 Distro 节点会进行全量数据拉取。具体操作是轮询所有的 Distro 节点,通过向其他的机器发送请求拉取全量数据。
在这里插入图片描述

数据校验

在Distro集群启动之后,各台机器之间会定期发送心跳来保证数据一致性

写操作

对于⼀个已经启动完成的 Distro 集群,在⼀次客户端发起写操作的流程中,当注册非持久化的实例的写请求打到某台 Nacos 服务器时,Distro 集群处理的流程图如下。
在这里插入图片描述

步骤:
1.前置filter拦截请求,根据请求中包含的IP和port信息计算所属的Distro的责任节点,请将请求转发到责任节点
2. 责任节点将写请求进行解析
3. Distro协议定期执行Sync任务,将所负责的所有实例信息同步到其他节点上

读操作

由于每台机器上的数据都存放了全量数据,因此每一次读操作,Distro机器会直接从本地拉取数据
在这里插入图片描述

总结:

Distro 协议是 Nacos 对于临时实例数据开发的⼀致性协议。其数据存储在缓存中,并且会在启动时进行全量数据同步,并定期进行数据校验。

在 Distro 协议的设计思想下,每个 Distro 节点都可以接收到读写请求。所有的Distro协议的请求场景主要分为三种情况:

  1. 当该节点接收到属于该节点负责的实例的写请求时,直接写入。
  2. 当该节点接收到不属于该节点负责的实例的写请求时,将在集群内部路由,转发给对应的节点,从而完成读写。
  3. 当该节点接收到任何读请求时,都直接在本机查询并返回(因为所有实例都被同步到了每台机器上)。

Distro 协议作为 Nacos 的内嵌临时实例⼀致性协议,保证了在分布式环境下每个节点上面的服务信息的状态都能够及时地通知其他节点,可以维持数十万量级服务实例的存储和⼀致性。

### Nacos配置管理采用的一致性协议 Nacos配置管理模块支持多种一致性协议,主要依赖于Raft和Distro两种协议来满足不同场景下的需求[^1]。 #### Raft协议用于强一致性保障 对于配置管理而言,当应用程序对数据一致性有着较高要求时,通常会选择Raft协议。该协议能够确保所有节点上的数据最终达成一致状态,并且在大多数情况下可以防止数据丢失。尽管无法做到绝对意义上的强一致性(即只能保证半数以上副本间的一致),但在实际操作中已经足够可靠[^4]。 ```python # 示例:使用Raft协议进行配置更新 def update_config_with_raft(config_key, new_value): leader_node = elect_leader() # 假设有一个选举领导者的函数 if is_majority_agreed(leader_node.propose_update(config_key, new_value)): apply_updates_to_all_nodes(new_value) ``` #### Distro协议提供更高可用性的选择 另一方面,在追求高性能及高可用性的环境中,则更倾向于利用Distro协议来进行服务端之间的通信与同步工作。此协议借鉴了Eureka的设计理念并进行了针对性改进,从而实现了较好的扩展性和效率表现。它特别适合处理大规模分布式系统的动态变化情况,即使在网络分区发生期间也能维持正常运作。 ```python # 示例:使用Distro协议传播最新版本的配置文件 from nacos.distro import distro_client latest_version_id = get_latest_configuration_version() distro_client.broadcast_new_version(latest_version_id) ``` 值得注意的是,为了适应不同类型的应用程序需求,Nacos将这两种协议的相关逻辑封装到了`consistency`包下,并通过插件化的方式使得开发者可以根据实际情况轻松切换或定制所需的行为模式[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值