Archipelago

Lec 10异步共识:FLP 不可能性与 Ben-Or

讲义完成更新于 2026-09-17

Lec 10 异步共识:FLP 不可能性与 Ben-Or

主要文献:Fischer, Lynch, Paterson《Impossibility of Distributed Consensus with One Faulty Process》(PODS 1983 / JACM 1985) · Ben-Or《Another Advantage of Free Choice》(PODC 1983)

TL;DR

  • FLP 不可能性定理确立了异步消息传递系统中,只要允许单个节点崩溃故障,就不存在确定性共识算法能保证终止。
  • 证明基于配置的“双值性”与临界步菱形引理:调度对手总能通过交替消息步将系统无限期维持在命运未定的双值状态。
  • Ben-Or 随机共识算法引入局部硬币投掷打破对称性,在容忍 f<n/2f < n/2 节点崩溃的前提下实现了以概率 1 达成共识。

1. 本讲要回答的核心问题

Lec 8–9 在同步模型里给出了共识算法与下界。现实网络往往是异步的:消息延迟无上界、进程相对速度无界。本讲给出异步世界的两个标志性结果:

  1. FLP 不可能性:异步消息传递模型中,只要可能有一个进程崩溃,就没有确定性算法能保证求解共识;
  2. Ben-Or 随机算法:引入随机化即可绕过 FLP——以概率 1 终止,容忍 f<n/2f<n/2 个崩溃。

二者合起来刻画了异步容错共识的精确边界:确定性不行,随机化可以。

2. 异步模型与问题

异步消息传递模型

nn 个进程通过可靠但延迟无上界的通道通信。系统状态称为配置(configuration),含所有进程的状态与所有在途消息构成的消息缓冲(message buffer)。一个**步(step)**由某进程接收一条(可能为空 ∅\varnothing 的)消息、改变状态、再发出有限消息组成。

容错: 至多 ff 个进程崩溃(crash)(停止后不再走步)。一次执行是可容许的(admissible),若至多 ff 个进程崩溃,且每条发往非崩溃进程的消息最终被接收(无消息永久滞留)。

共识三条件(二值 V={0,1}V=\{0,1\}):一致性(无两非故障进程决定不同值)、有效性 / 非平凡性(00 和 11 都是某些初值组合下可能的决定,排除“恒决定常数”的平凡解)、终止性(每个非故障进程最终决定)。

3. FLP 不可能性

定理(FLP 1985). 在异步消息传递模型中,不存在能容忍哪怕一个崩溃故障(f=1f=1)的确定性共识算法。

证明的两大支柱是双值性(bivalence)与临界步(critical step)。

3.1 双值与单值配置

配置的价(Valence)

配置 CC 的可达决定值集是从 CC 出发所有可容许执行最终出现的决定值之集。

  • CC 为 0-单值(0-valent):只可能决定 0;1-单值 类似。
  • CC 为 双值(bivalent):0 和 1 都可能(“命运未定”)。 :::

3.2 引理一:存在双值初始配置

引理 1. 任何满足一致性、有效性且容忍一个故障的算法,都存在一个双值初始配置。

证明(相邻初值翻转). 把初始配置按“每个进程初值 0/1”排成一列,相邻两个只差一个进程的初值。两端分别是全 0(单值 0,由有效性)与全 1(单值 1)。若所有初始配置都单值,则序列中必有相邻一对 C0C_0(0-单值)、C1C_1(1-单值)只差进程 pp 的初值。考虑 pp 崩溃的执行:其余进程无法区分 C0C_0 与 C1C_1,必做相同决定——但一个该决定 0、一个该决定 1,矛盾。故存在双值初始配置。□\square

3.3 引理二:双值可以永远维持

引理 2. 从任意双值配置 CC 出发、对任意“待处理事件” e=(p,m)e=(p,m),都能先走若干步、再施加 ee,到达一个仍双值的配置。

证明(菱形 / 临界步论证). 设 C\mathcal{C} 为“从 CC 出发不施加 ee 所能到达的全部配置”之集,D={e(E):E∈C}\mathcal{D}=\{e(E):E\in\mathcal{C}\} 为在这些配置上立即施加 ee 的结果。反设 D\mathcal{D} 全为单值。可证 D\mathcal{D} 中既有 0-单值也有 1-单值(否则 CC 不双值)。于是在 C\mathcal{C} 中存在相邻两配置 E0,E1E_0,E_1(差一个事件 e′=(p′,m′)e'=(p',m')),使 e(E0)e(E_0) 是 0-单值、e(E1)e(E_1) 是 1-单值。分情况:

  • 若 ee 与 e′e' 作用于不同进程:二者可交换(异步步可交换),e(e′(E0))=e′(e(E0))e(e'(E_0))=e'(e(E_0)),迫使 0-单值=1-单值,矛盾。
  • 若 e,e′e,e' 作用于同一进程 pp:考虑 pp 在此刻崩溃、其余进程跑到一个决定的可容许执行 σ\sigma。在 E0E_0 上先跑 σ\sigma 再补 e,e′e,e',与在 e(E0)e(E_0)、e′(e(E0))=⋯e'(e(E_0))=\cdots 上跑 σ\sigma 给出同一决定,又导致 0-单值与 1-单值重合,矛盾。

故 D\mathcal{D} 不可能全单值——存在施加 ee 后仍双值的配置。□\square

3.4 拼装:构造永不终止的执行

反复用引理 2:从双值初始配置出发,用公平调度(每个进程的最早待处理消息迟早被处理,从而保证可容许、无人被永久饿死)逐个挑选待处理事件 ee,每次都走到“施加 ee 后仍双值”的配置。这样得到一个可容许但永远停留在双值的无限执行——其中无人决定,违反终止性。故这样的确定性算法不存在。□\square

直觉: 异步 + 一个崩溃 = 对手永远能制造一个“看起来某进程要么慢要么死”的局面,把系统钉在“命运未定”的双值态上。每当算法要靠某一步定锤音,对手就重排该步与其它步的次序,让锤子永远落不下来。

4. Ben-Or 随机算法:用随机化绕过 FLP

FLP 假定确定性。若允许进程投硬币,则可得到以概率 1 终止的算法(仍满足一致性与有效性)。Ben-Or 算法容忍 f<n/2f<n/2 个崩溃故障(二值共识)。

f<n/2f < n/2) 每进程持当前偏好 x∈{0,1}x\in\{0,1\}(初始为输入),按 phase 重复,每 phase 两轮:

轮 1(report): 广播 (R,phase,x)(\text{R}, \text{phase}, x),等收齐 n−fn-f 条 R 消息。

  • 若有某值 vv 出现 >n/2>n/2 次,则广播 (P,phase,v)(\text{P}, \text{phase}, v);
  • 否则广播 (P,phase,?)(\text{P}, \text{phase}, ?)。

轮 2(propose): 等收齐 n−fn-f 条 P 消息。

  • 若收到 ≥f+1\ge f+1 条 (P,⋅,v)(\text{P},\cdot,v)(同一非 ?? 值 vv):决定 vv(并再走一 phase 后停);
  • 否则若收到至少一条 (P,⋅,v)(\text{P},\cdot,v):置 x:=vx:=v;
  • 否则(全是 ??):投硬币 x:=random{0,1}x:=\text{random}\{0,1\}。 :::

4.1 正确性要点

  • 一致性. 关键:任一 phase 中不可能同时有人收到 ≥f+1\ge f+1 个 00-提案、又有人收到 ≥f+1\ge f+1 个 11-提案。因为发出非 ?? 提案 vv 需先在轮 1 见到 >n/2>n/2 个 vv;00 与 11 不能同时占多数(n−f>n/2n-f>n/2 保证 quorum 相交),故至多一个值能被提案为非 ??。

一旦有进程在某 phase 决定 vv,则该 phase 末所有非故障进程的偏好都变成 vv,下一 phase 全体决定 vv。不会出现两个不同决定值。

  • 有效性. 若所有初值同为 vv,则轮 1 人人见到 n−f>n/2n-f>n/2 个 vv,提案 vv,第一 phase 即决定 vv。
  • 终止性(概率 1). 若某 phase 所有非故障进程恰好都投到同一硬币值 vv(概率 ≥2−n\ge 2^{-n}),则下一 phase 收敛并决定。每 phase 独立有正概率收敛,故期望有限 phase内终止,概率 1 终止。

直觉: 确定性算法被 FLP 钉死在“双值”上,是因为对手能预测并阻挠每一步。随机硬币让对手无法预测进程的下一偏好——只要某一 phase 大家碰巧投出同一面,“双值僵局”就被打破。这就是论文标题“自由选择的另一个好处”。

5. 本讲小结与异步共识全景

结果模型结论核心
FLP(1985)异步、确定性f=1f=1 即不可解双值性 + 临界步菱形
Ben-Or(1983)异步、随机f<n/2f<n/2 概率 1 终止quorum 相交 + 随机硬币破僵局

异步容错共识的精确图景:确定性此路不通(FLP),随机化打开活路(Ben-Or);其他绕行路线还有故障检测器与部分同步假设。