最终一致性(Eventual Consistency) 是分布式系统中最常用、性能最高的一致性模型。它在性能与一致性之间选择了性能,接受数据在短期内的不一致,以换取系统的极高可用性。
核心概念
它不保证读操作能立即读到最新的数据,但保证在没有新的写操作发生的情况下,经过一段时间(收敛时间)后,所有副本的数据最终都会达成一致。
sequenceDiagram participant Client as 客户端 participant Master as 主节点 participant Slave as 从节点 Client->>Master: 1. 写数据 (X=1) Master-->>Client: 2. 成功 (立即返回) Note right of Master: 异步同步中... Client->>Slave: 3. 读数据 (同步未完成) Slave-->>Client: 4. 返回 X=0 (旧值) Note over Master, Slave: 经过收敛时间 T Client->>Slave: 5. 读数据 (同步已完成) Slave-->>Client: 6. 返回 X=1 (最终一致)
- 高可用性:系统不需要为了同步数据而阻塞读写,响应速度极快。
- 短暂不一致:允许在数据同步期间,不同节点返回不同版本的数据。
- BASE 理论:是分布式架构 BASE 理论(基本可用、软状态、最终一致性)的核心基石。
实现手段
- 异步复制 (Asynchronous Replication):主库完成写入后立即返回成功,数据通过后台线程异步推送到其他副本。
- 读时修复 (Read Repair):在读取数据时,如果发现多个副本版本不一致,则触发同步修复。
- 反熵机制 (Anti-Entropy):通过后台进程(如 Merkle Tree 对账)定期扫描并修复副本间的数据差异。
适用场景
- 大多数互联网业务(如文章点赞数、社交媒体评论列表、非核心配置更新)。