最终一致性 是分布式写场景中应用最广、性能最强的模型。

核心概念

它不保证写操作立即对所有节点可见,但保证在没有新写操作的情况下,经过一段时间后,所有副本的数据最终会达成一致

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 系统。