“微秒级”“简洁区块链”“异步BFT”不是三档性能套餐。NOPaxos把排序能力下沉到网络设备,以特殊网络原语缩短崩溃容错快路径;Streamlet用epoch、leader和公证链给出易讲清的拜占庭共识;HoneyBadgerBFT用随机化和密码学组件在异步网络中获得概率活性。它们改变的是系统模型,不能只按吞吐或延迟排成一条榜单。

分布式系统(E04):Lambda 与 SkyPilot 的执行和调度边界

比较协议前先固定四个条件

至少要写清网络时序、故障类型、成员/身份和完成定义。一个协议的“快”可能依赖可编程交换机;另一个协议的“活”可能只承诺概率1最终完成;BFT证书还依赖认证密钥没有被正确节点滥用。

flowchart LR
  P[协议主张] --> N[网络模型]
  P --> F[故障模型]
  P --> I[身份/密码学]
  P --> C[完成与测量口径]
  N --> J[可比较结论]
  F --> J
  I --> J
  C --> J

NOPaxos:网络排序换掉一部分协议工作

NOPaxos论文提出Ordered Unreliable Multicast。网络排序器给请求分配序号,正确副本在正常路径上看到相同顺序,从而避免传统共识为每个请求交换排序消息。低延迟来自把工作放进网络,不是“共识不再需要网络”。

unreliable一词很关键。副本可能看到序号缺口,排序器或leader也会故障;协议仍需gap recovery、view change和持久化边界。若普通网络不能提供论文要求的有序原语,NOPaxos的快路径前提就不成立。

sequenceDiagram
  participant C as Client
  participant S as Network Sequencer
  participant R1 as Replica1
  participant R2 as Replica2
  C->>S: request
  S->>R1: seq=4
  S->>R2: seq=4
  Note over R1: 若只见1,2,4则停在gap
  R1-->>R2: recovery/view change

论文中的微秒级数字绑定当时硬件、网络、批量、请求大小和实现。换成跨区域网络、软件交换或不同持久化设备后,数字不能直接迁移。

Streamlet:三段连续公证形成最终化证据

Streamlet把时间分成epoch,每个epoch选一个leader提出区块。区块获得超过三分之二投票后被notarized。若一条链上出现三个连续epoch的notarized blocks,中间块及其祖先可以finalize。只有两个公证块,或epoch编号有缺口,都不足以触发这条规则。

flowchart LR
  B1[epoch e 已公证] --> B2[epoch e+1 已公证]
  B2 --> B3[epoch e+2 已公证]
  B3 --> F[finalize B2及祖先]
  X[epoch e 已公证] --> Y[epoch e+2 已公证]
  Y --> N[不能套三连续规则]

在4节点、至多1个Byzantine节点时,证书取3票。任意两个3票集合至少交2个节点;即使其中一个是故障节点,交集仍有正确节点。证明还要结合正确节点投票规则和链结构,不能只写交集算术。

活性依赖epoch足够长以容纳网络传输,并最终出现诚实leader。永久异步延迟可以让固定轮次无法推进,因此Streamlet与HoneyBadger的网络承诺不同。

HoneyBadger:不用时钟上界,但要随机性与密码学

HoneyBadgerBFT组合可靠广播、异步二元一致和异步共同子集,让n >= 3f+1的副本在异步拜占庭模型下输出共同批次。对手可以任意延迟消息,但不能永久阻止正确节点之间的消息交付;随机化打破FLP式确定性僵局,终止是概率性质。

flowchart TD
  TX[加密交易批] --> RBC[可靠广播]
  RBC --> ABA[异步二元一致]
  ABA --> ACS[异步共同子集]
  ACS --> DEC[共同解密与输出]

“不假设已知延迟上界”不表示有限时间SLA。某个有限前缀没有决定,既可能是允许的消息延迟,也可能是实现故障。安全性与概率终止需按完整模型判断。

条件矩阵比性能榜单更有用

协议 网络关键前提 故障 核心快/活性来源 不能直接声称
NOPaxos 网络提供有序不可靠多播 crash 网络序号缩短正常路径 普通网络也有相同延迟
Streamlet 认证且epoch最终覆盖消息延迟 Byzantine < 1/3 leader、公证与三链规则 完全异步仍确定推进
HoneyBadger 异步、消息最终交付 Byzantine < 1/3 随机化ACS与密码学 固定截止时间或最低延迟

工程选择还要算实现复杂度、密钥管理、批量等待、恢复路径和硬件依赖。只比较论文峰值会把不同任务、不同年份和不同故障模型混在一起。

运行有限检查

1
2
3
4
mkdir -p examples/distributed-systems/.build/e05/tmp
export TMPDIR="$PWD/examples/distributed-systems/.build/e05/tmp"
export TMP="$TMPDIR" TEMP="$TMPDIR" PYTHONDONTWRITEBYTECODE=1
python3 -B examples/distributed-systems/consensus-e05/check.py --output examples/distributed-systems/.build/e05/observations.json

程序枚举4节点3票证书所有配对和故障位置,检查交集仍含正确节点;另验证三种公证epoch序列、有序网络缺号和异步有限延迟边界。完整结果见观察结果,来源见实验证据,限制见验证说明。

两个推演练习

NOPaxos副本收到1、2、4,为什么不能直接执行4?

序号3可能只是延迟,也可能已经被其他副本看到。越过缺口会让副本执行不同前缀,必须按协议恢复缺失请求或切换视图。

HoneyBadger运行十秒没有输出,能否证明活性违例?

不能。异步概率活性没有固定十秒截止;需要区分允许的有限延迟、随机选择和实现卡死。运维SLA仍须另设监控与超时策略。

E06把“证明程序应该满足什么”推进到可执行规格与实现级证明,比较TLA+/PlusCal有限模型和IronFleet。

参考资料