顺序一致性 保证了操作执行的逻辑顺序,但不要求绝对的实时性。
核心概念
它保证所有节点看到的写操作顺序是一致的,且单个进程内的操作顺序被保留。
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),节点按序列号顺序应用更新。
适用场景
顺序一致性是那些 “可以慢,但不能乱” 场景的基石:
- 分布式锁服务:保证锁的获取顺序符合逻辑先后,实现公平锁。
- 有序消息传递:如金融流水处理、订单状态机变更,确保所有节点对业务流程的认知顺序一致。
- 配置中心分发:确保多台应用服务器按确定的版本序列更新配置,避免状态交织。
- 多人协作系统:保证不同用户看到的编辑历史轨迹完全一致。