在 Cassandra 中,如何实现数据的一致性保证?请解释读修复与写修复分别是什么,并说明它们的作用机制。
考察说明
考察对 Cassandra 一致性模型及修复机制的理解。
回答思路
- 【回答框架 1】Cassandra 通过一致性级别(如 ONE、QUORUM、ALL)控制读写操作需要等待的副本数,结合副本因子,在强一致与高可用之间权衡。其采用最终一致性模型,并通过读修复和写修复机制在后台逐步收敛数据副本间的差异。
- 【回答框架 2】读修复发生在读取操作时,当客户端读取数据,协调节点会向所有副本发送请求,若发现某些副本数据版本较旧,则读取最新数据并触发后台修复,更新过时副本。此过程对客户端透明,能加速数据一致性收敛。
- 【回答框架 3】写修复(也称为 hinted handoff 或读修复的补充)通常指写操作时的 hinted handoff:若某个副本节点不可用,协调节点会本地保存该写操作的提示,并在节点恢复后重放写入。此外,定期运行的反熵修复(nodetool repair)也是写修复的重要方式,它比较所有副本数据并强制同步最新版本。
- 【回答框架 4】一致性由 quorum 计算决定:QUORUM 级别需等待多数副本响应,提高一致性但增加延迟。读修复能动态修复读路径上的数据差异,写修复(hinted handoff 与反熵修复)确保最终所有副本一致,两者结合保障 Cassandra 的最终一致性。
- 【关键点 1】一致性级别控制读写所需副本数,实现可调一致性。
- 【关键点 2】读修复在读取时对比副本数据并修复旧版本,对客户端透明。
- 【关键点 3】写修复包括 hinted handoff 和反熵修复,分别处理临时不可用节点和定期全量同步。
- 【关键点 4】最终一致性通过读修复和后台修复机制收敛,而非实时强制一致。
- 【易错点 1】误认为读修复能保证强一致,实际只加速收敛,不代表读取时所有副本已同步。
- 【易错点 2】忽略 hinted handoff 仅针对临时故障,长期故障需依赖反熵修复。
- 【易错点 3】将写修复等同于读修复,两者触发时机与机制不同。