Skip to content

定义Definition

分布式共识

Distributed consensus · Consensus problem

多个进程在可能故障和通信延迟下对一个值达成一致的任务。

形式陈述 ​

共识先规定共同的单次任务接口,再由执行模型决定进程怎样交换信息。固定参与进程集合 Π、提议值域 V,并声明通信或共享对象、故障与调度条件,得到可容许执行集合 A。每个进程 p 以输入 vp∈V 启动,并至多一次执行不可撤销的 decidep(v)。以下选用 crash-stop 范围内的统一安全条件;正文主例采用消息传递系统,共享内存实例在下方另说明进展量词。对每个 α∈A:

  • 完整性:每个进程至多决定一次;
  • 统一一致性:任何两个已经决定的进程,即使其中一个稍后崩溃,也决定相同值;
  • 提议有效性:若某进程决定 v,则 v=vq 对某个参与进程 q 成立;
  • 终止性:按已声明的进展条件完成决定;本页主消息模型要求每个正确进程最终决定。

有些文献只约束正确进程的决定,称 non-uniform agreement;有些有效性只要求全体输入相同时决定该值,或要求决定通过外部验证谓词。拜占庭模型还要决定是否只采信正确进程提议。引用“共识”结论时,必须同时给出这些版本与 A 的故障、公平性和可靠性量词。

完整性、一致性与有效性属于安全性:有限前缀即可见证违例。终止性是活性;在主消息模型中,证明它须使用已声明的正确进程持续取步、消息最终交付及故障预算条件。

共享内存的wait-free 共识保留上述完整性、统一一致性与提议有效性,但允许其他进程任意暂停。每个尚未决定的进程只要继续取得自己的步骤,就须在有限个自身步骤后决定;不能要求其他线程也持续运行来证明这一点。其可用原子对象与故障容忍量词应单独规定,消息网络的多数、信道可靠性或领导者条件不自动迁移过去。

直觉

每个进程只有局部消息前缀,却要作出全局唯一且不可撤销的决定。决定不要求每个节点都已知道结果:一个值可以已经获得足够证据,而另一个正确节点还在等待消息。协议必须保证后者迟到时只能学到同一值,同时证明它在允许的执行中最终能学到。

早决定可能漏掉相反提议,永久等待又违背终止。协议把安全证据做成跨轮次可继承的投票记录,并把活性押在某种最终协调条件上。轮次编号只区分尝试,不是重新开始一次独立共识;同一实例中换了领导者,旧决定仍不可撤销。

多数相交只提供证据相遇的机会。交点进程若可以在两个轮次无条件支持不同值,两个多数仍可能分别批准冲突结果;ballot、任期、锁定或继承规则才决定交点携带什么。

共识:一致决定一个已提议值
例子与边界

二值共识中,“总决定 0”满足完整性、一致性和终止性,却在所有进程输入 1 时违反有效性。相反,“决定自己输入”满足有效性与终止性,却在不同输入执行中违反一致性。三类性质排除了两种平凡逃避。

三个投票者 A,B,C 展示 quorum 仍需状态规则。若第一轮 A,B 都投 x,第二轮 B,C 又可无条件投 y,则多数 {A,B} 与 {B,C} 虽在 B 相交,x,y 仍分别获多数。安全协议必须让 B 的旧证据约束第二轮提案,或禁止它作不相容投票。

即使 A 在第一轮决定 x 后立刻崩溃,统一一致性仍要求 B,C 不得决定 y。若规格只要求正确进程之间一致,则不会直接约束 A 的决定;但 A 可能已向客户端回复,客户端也可能据此产生外部效果。这解释了为什么复制服务通常需要把“之后会崩溃的决定者”也纳入安全承诺。

两阶段提交决定分布式事务提交或中止,prepared 参与者在协调者故障后可能阻塞。用共识复制提交决定可消除单协调者这一故障点,但 2PC 本身没有在异步 crash 模型中提供 nonblocking consensus。

FLP 不可能性说明完全异步、确定性、可靠消息且允许一次 crash 时,某个可容许调度可以永不决定。Paxos与Raft仍能在所有这类时序下保持安全;它们的终止证明另加稳定领导、可达多数与部分同步条件。拜占庭共识又需更大交集与认证假设,不能把 crash 多数公式直接搬过去。

两阶段随机共识在严格多数正确、固定不看内容的调度器下,逐步证明所有执行安全、概率一终止,并算出逻辑轮数的几何尾界;它明确区分输出决定与停止服务。

推论与应用

消息传递中,最终领导者检测器 Ω 刻画异步 crash consensus 所需的最终协调信息;Paxos、Raft 与 Viewstamped Replication 把一系列实例填入复制日志。共享内存的共识数层级则按对象类型能为多少进程 wait-free 地解共识分类原语,执行模型与可用对象不同,不能直接沿用消息阈值。

本页消息传递实例中的 uniform 共识与原子广播的统一前缀版本,在固定成员、普通可靠广播及相同 crash/终止假设下相互归约。原子广播到共识:广播各自提议并决定第一条全序交付消息。共识到原子广播:可靠传播带唯一 ID 的完整 payload,持续参加各编号共识实例,本地无待排消息时也提议空集;决定直接给出整批内容,按固定顺序去重交付,不另等本地可靠交付。持续重提所有 pending 消息排除饥饿。详见完整归约;等价指可解性相互归约,不表示一个 one-shot 实例自动提供无限日志。

协议验证常把 agreement 化为配置上的归纳不变式,把 termination 写成对公平无限执行的性质。模型检查可以找出双决定或永不进展的调度,却不能替规格补入遗漏的公平性与故障上界。

参考资料
  • Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996, Chapter 6.
  • Hagit Attiya and Jennifer Welch, Distributed Computing: Fundamentals, Simulations, and Advanced Topics, 2nd ed., Wiley, 2004,Chs. 5–6。
  • Tushar D. Chandra and Sam Toueg, “Unreliable Failure Detectors for Reliable Distributed Systems,” Journal of the ACM 43(2), 1996, pp. 225–267。
关系图谱16 个相邻概念 · 5 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系