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