一、数据同步的整体架构
Nacos 数据同步机制分为 服务注册中心同步 和 配置中心同步 两类,分别采用不同的策略:
-
服务注册中心
-
临时实例(AP 模式):采用 Distro 协议,异步同步,保证最终一致性48。
-
持久化实例(CP 模式):采用 Raft 协议,同步阻塞写入,保证强一致性211。
-
-
配置中心
-
客户端通过 长轮询(Long Polling) 机制主动拉取配置变更,服务端通过队列延迟响应实现实时感知16。
-
二、服务注册中心的数据同步
1. AP 模式(Distro 协议) 48
适用场景:临时实例(ephemeral=true
),默认模式,适合高可用优先的场景。
-
核心机制:
-
分片与异步同步:将服务实例按哈希分片到不同节点,每个节点负责部分数据的写操作,通过异步任务将变更同步到其他节点。
-
写流程:
-
客户端注册请求发送到任意节点;
-
节点根据哈希确定责任节点(若自身非责任节点,转发请求);
-
责任节点更新本地内存(
ConcurrentHashMap
),触发异步同步任务(通过DistroProtocol
广播到其他节点)。
-
-
读流程:所有节点均可响应读请求,本地内存直接返回数据。
-
-
容错与恢复:
-
新节点加入时,从其他节点拉取全量数据;
-
节点故障时,其他节点自动接管其分片数据。
-
2. CP 模式(Raft 协议) 211
适用场景:持久化实例(ephemeral=false
),要求强一致性(如金融交易场景)。
-
核心机制:
-
Leader 选举:集群启动或 Leader 故障时,通过 Raft 协议选举新 Leader(需半数以上节点投票)。
-
两阶段提交(2PC):
-
写入阶段:客户端请求由 Leader 接收,写入本地日志并广播至所有 Follower;
-
提交阶段:Leader 收到半数以上节点的确认后,提交数据并通知客户端成功。
-
-
数据持久化:数据写入本地文件(
nacos/data
目录),确保宕机后可通过日志恢复。
-
-
容错与恢复:
-
Follower 节点故障后,恢复时从 Leader 同步最新数据;
-
Leader 故障时,触发重新选举。
-
三、配置中心的数据同步 16
核心机制:长轮询(Long Polling)实现配置动态更新。
-
客户端请求:
-
客户端发起配置查询请求,设置超时时间(默认 30s);
-
服务端检查配置 MD5 是否匹配,若匹配则挂起请求(加入阻塞队列
allSubs
),否则立即返回最新配置。
-
-
服务端处理:
-
配置变更触发:当配置修改时,服务端生成
DataChangeTask
,遍历队列并立即响应挂起的请求; -
超时兜底:若 29.5s 内无变更,服务端主动检查本地配置 MD5 并返回结果。
-
-
客户端更新:
-
收到响应后,客户端拉取最新配置并更新本地缓存。
-
四、关键数据结构与流程
-
服务注册表存储结构 511:
-
双层 Map:
Map<Namespace, Map<Group::ServiceName, Service>>
; -
Service
包含Cluster
,每个Cluster
维护两个集合:ephemeralInstances
(临时实例)和persistentInstances
(持久实例)。
-
-
心跳与健康检查 612:
-
临时实例:客户端每 5s 发送心跳,服务端 15s 未收到心跳标记为不健康,30s 后剔除;
-
持久实例:服务端主动探测健康状态(如 TCP/HTTP 检查),不健康实例保留但标记。
-
-
数据同步优化:
-
快照技术:定期生成数据快照,加速节点恢复6;
-
数据压缩:减少网络传输量6。
-
五、AP 与 CP 模式的对比
特性 | AP 模式(Distro) | CP 模式(Raft) |
---|---|---|
一致性 | 最终一致性 | 强一致性 |
可用性 | 高(异步同步,容忍节点故障) | 低(需半数节点存活) |
适用场景 | 临时实例(弹性扩缩容) | 持久化实例(如数据库配置) |
同步延迟 | 低(异步批量同步) | 高(需日志复制与确认) |
实现复杂度 | 低(自研协议,无 Leader 选举) | 高(Raft 协议,需选举与日志管理) |
六、实际应用建议
-
模式选择:
-
微服务场景优先使用 AP 模式(临时实例),牺牲一致性换取高可用;
-
关键配置(如数据库连接)使用 CP 模式(持久实例)。
-
-
集群部署:
-
AP 模式:至少 3 节点,避免脑裂;
-
CP 模式:奇数节点(如 3/5),确保选举成功。
-
-
监控与调优:
-
监控
DataChangeTask
队列长度,避免同步延迟; -
调整
Distro
同步间隔(默认 10ms)以适应高负载1。
-
通过以上机制,Nacos 在分布式场景下实现了灵活的数据同步策略,兼顾了高可用与强一致性需求。