最终一致性 是分布式写场景中应用最广、性能最强的模型。
核心概念
它不保证写操作立即对所有节点可见,但保证在没有新写操作的情况下,经过一段时间后,所有副本的数据最终会达成一致。
sequenceDiagram participant Client as 客户端 participant NodeA as 节点 A participant NodeB as 节点 B Note over NodeA, NodeB: 初始状态 X=0 (一致) Client->>NodeA: 1. 发起写请求 (X=1) NodeA->>NodeA: 更新本地数据 NodeA-->>Client: 2. 返回写成功 (立即返回) rect rgb(255, 240, 240) Note over NodeA, NodeB: 不一致窗口期 <br>(Inconsistency Window) Note right of NodeA: A=1, B=0 end NodeA-->>NodeB: 3. 异步同步数据 Note over NodeA, NodeB: 经过收敛时间 (T) rect rgb(240, 255, 240) Note over NodeA, NodeB: 最终状态 X=1 (一致) Note right of NodeA: A=1, B=1 end
- 高性能:写操作只需写入本地或少数副本即可返回,延迟极低。
- 弱顺序性:系统允许不同副本以不同的顺序处理更新(顺序不敏感),并最终通过特定的策略(如“最后写入者胜”或 CRDT)来解决数据冲突,确保最终结果收敛。
实现手段
- 异步复制:主从架构下的后台异步同步。
- Gossip 协议:节点间通过“流言”方式互相交换数据,最终达成共识。
- 最后写入者胜 (LWW):基于时间戳覆盖旧值。
适用场景
- 文章点赞数、视频播放量。
- 非核心业务的配置分发。
- DNS 系统。