“执行还必须保持确定性:读取系统时间、随机数或外部服务会引入非确定性,必须转化为已排序输入或通过协议协调。“多数副本存有某条日志”也不自动意味着客户端已看到线性一致结果;还需领导者提交规则、读…”
形式陈述 ​
给定副本集合
则任意两次此类操作都共享至少一个参与者,旧证据与新证据因而有机会相遇。系统还需满足相对于故障集合
复制寄存器常把读集合族
这两式只给出相交的组合条件;版本号、写入顺序和并发冲突处理仍需协议定义。在最多
直觉 ​
quorum 的作用是避免每次操作都等待全体副本,同时又不让关键证据彼此错过。一次写只接触部分节点,后续读取也只接触部分节点,但两组人必然有重叠,于是至少有人见过新状态。它建立的是“证据交接通道”,不是自动的一致性算法:交点上的节点需要保存什么、如何比较版本、何时承诺,都要由上层协议补齐。
安全与可用性在这里拉向相反方向。quorum 越大,两个集合越容易产生足够大的交集,也越能排除矛盾决定;与此同时,一次操作要等更多节点,故障或分区时更难凑齐。quorum 系统的设计就是在给定故障模型下选择这条边界,而不是机械地取简单多数。
例子与边界 ​
设
网络分区时,两个分区不可能都包含同一多数 quorum。较小分区停止服务,保住了双方不能各自形成冲突决定的安全性;若强行允许两边都继续写,则必须接受冲突合并或放弃强一致保证。这里的取舍来自集合相交事实,不是通信库的偶然行为。
在
推论与应用 ​
Paxos 与 Raft 利用多数集合的相交性,让不同轮次或任期的决定通过共同节点传递;读写复制可用不对称的
对具体协议,验证 quorum 不能只检查集合大小。还应写清哪些操作族必须互相相交、故障后哪些 quorum 仍可达、交集里需要多少正确节点,以及节点保存的证据是否跨轮次有效;缺少任一项,相交公式都不足以推出协议安全。
参考资料
- David K. Gifford, “Weighted Voting for Replicated Data,” Proceedings of the 7th ACM Symposium on Operating Systems Principles, 1979, pp. 150–162。
- Dahlia Malkhi and Michael Reiter, “Byzantine Quorum Systems,” Distributed Computing 11, 1998, pp. 203–213。