在分布式系统中,数据一致性是最核心也最复杂的问题。由于网络延迟、节点故障、异步通信等因素,不同节点可能同时持有不一致的数据状态。
1. 一致性的定义
- 强一致性(Strong Consistency) :任意时刻读取到的数据都是最新的。
- 弱一致性(Weak Consistency) :允许短暂不一致,最终会收敛到一致状态。
- 最终一致性(Eventual Consistency) :只保证最终状态一致,不保证实时同步。
2. CAP 定理
在分布式系统中,不可能同时满足三者:
- C(Consistency)一致性
- A(Availability)可用性
- P(Partition Tolerance)分区容错性
现实中必须在 CAP 中做权衡。例如: - CP 系统:Zookeeper、Etcd,牺牲部分可用性。
- AP 系统:Cassandra、Eureka,保证可用性但允许延迟一致。
3. 一致性模型
- 线性一致性:操作顺序与真实时间顺序一致。
- 顺序一致性:保证同一客户端的顺序执行。
- 会话一致性:同一会话内保持数据一致。
4. 典型实现方案
- 分布式事务(2PC / 3PC) :强一致,但性能差。
- Paxos / Raft 共识算法:通过投票机制选出领导者,保证日志一致性。
- 基于版本控制的最终一致:通过时间戳或向量时钟解决写冲突。
- 事件溯源(Event Sourcing) :状态由事件日志重放获得,天然具备最终一致性。
5. 实践经验
- 明确业务一致性等级,不必盲目追求强一致。
- 读多写少的场景可以接受最终一致。
- 对外业务必须保持幂等性,防止重复执行。
结论:分布式系统的一致性是权衡的艺术。理解 CAP、BASE 原则后,才能根据业务容忍度做出合理取舍。