顺序一致性 保证了操作执行的逻辑顺序,但不要求绝对的实时性。

核心概念

它保证所有节点看到的写操作顺序是一致的,且单个进程内的操作顺序被保留

sequenceDiagram
    participant P1 as 进程 1
    participant P2 as 进程 2
    participant S1 as 节点 A
    participant S2 as 节点 B

    P1->>S1: 写 A
    P1->>S1: 写 B
    P2->>S2: 写 C
    Note over S1, S2: 所有节点看到的序列必须一致
    Note over S1, S2: 例如均为: A -> B -> C 或 A -> C -> B
    Note over S1, S2: 但绝不能一个是 A->B 而另一个是 B->A
  • 顺序一致:虽然不同节点看到数据更新的时间点可能不同,但它们看到的“版本演进过程”是一模一样的。
  • 不要求实时:允许从库存在同步延迟,只要它最终按正确的顺序跟上即可。

就像全班同学看同一场电影,虽然有人看快一点有人看慢一点,但所有人看到的剧情发展顺序必须是一模一样的。

实现手段

  • 单点写入 + 顺序同步:所有写请求由唯一的主节点处理,并按顺序分发给从节点。
  • 逻辑时钟/序列号:为每个操作分配全局递增的序列号(如 LSN),节点按序列号顺序应用更新。

适用场景

顺序一致性是那些 “可以慢,但不能乱” 场景的基石:

  • 分布式锁服务:保证锁的获取顺序符合逻辑先后,实现公平锁。
  • 有序消息传递:如金融流水处理、订单状态机变更,确保所有节点对业务流程的认知顺序一致。
  • 配置中心分发:确保多台应用服务器按确定的版本序列更新配置,避免状态交织。
  • 多人协作系统:保证不同用户看到的编辑历史轨迹完全一致。