参考
- 数据密集型系统
Quorum介绍
Quorum模式常用于分布式场景,保证数据的一致性。其中有两个核心参数
- Qw 代表数据写入(包括更新、删除)需要的节点数
- Qr 代表数据读取需要的节点数
如果你总共有N个节点,那么很容易得出只要 W+R>N,那么你的读请求和写请求一定有重叠的节点,这就保证了一致性,你总是能找到最新的那个写入请求
现在很多分布式系统都是用Quorum模式,Quorum模式相比主备的模式,几乎没有恢复时间,而且P99延时稳定可控
Quorum的不一致场景
但Quorum模式并不一定是万无一失的,他在如下场景会导致不一致
- 如果两个写操作同时发生,则无法明确先后顺序,最终需要额外的修复手段
- 如果写操作和读操作同时发生,写操作可能仅在一部分副本上完成。此时,读取时返回旧值还是新值存在不确定性
- 如果某些副本上已经写入成功,而其他一些副本发生写入失败(如磁盘已满),且总的成功副本数少于w,那些已成功的副本上不会做回滚。这意味着尽管这样的写操作被视为失败,后续的读操作仍可能返回新值
还有两个更加边界的场景
Sloppy Quorum
也叫做宽松的Quorum模式,就是说当N不够的情况下,可以把集群的其他节点当作Qw节点。如果采用了sloppy quorum,写操作的w节点和读取的r节点可能完全不同,因此无法保证读写请求一定存在重叠的节点
数据的恢复场景
进行数据的恢复在所难免,如cassandra就有读修复等,如果具有新值的节点后来发生失效,但恢复数据来自某个旧值,则总的新值副本数会低于w,这就打破了之前的判定条件
网友评论