Skip to content

算法Algorithm

实用拜占庭容错

施工中 · 内容逐步修订

Practical Byzantine Fault Tolerance · PBFT

在部分同步网络与至多 f 个拜占庭副本下使用 3f+1 副本实现状态机复制的协议。

形式陈述 ​

PBFT 是在认证异步网络中实现确定性状态机复制的经典拜占庭容错协议。本条固定原论文正常路径采用的 n=3f+1 个副本,容忍至多 f 个拜占庭故障;下面的 2f、2f+1 票数都绑定这一成员规模。正常视图由 primary 为客户端请求分配序号并发送 pre-prepare;某副本在日志中已有经过验证的客户端请求本身及匹配的 pre-prepare,并收集来自不同备份的 2f 条匹配 prepare 后达到 prepared,随后广播 commit;它在自身已 prepared 且收到来自不同副本的 2f+1 条匹配 commit 后达到 committed-local,再按序执行。大小为 2f+1 的Byzantine quorum交叠出至少一个正确见证者;配合 view-change 证据选择规则,可阻止同一视图与序号上的冲突请求被提交。

换视图时,新 primary 在 new-view 中携带包括自身在内的 2f+1 份有效 view-change 报告;每份报告包含稳定 checkpoint 的证书及其后已 prepared 请求的证据。从这些报告中最新的已认证稳定 checkpoint 之后,到其中最高的已 prepared 序号为止,逐槽选择该序号最高视图的 prepared 摘要;若该槽没有此类证据,则选择执行时不改变状态的 null 请求。备份须独立重算并验证这份选择,才为新视图的相应请求发送 prepare。缺失的请求 payload 或 checkpoint 状态还须从其他副本恢复,才能按序执行;摘要证据本身不包含这些内容。

直觉

PBFT 的两轮副本投票分别建立“足够多节点接受同一序号—摘要”与“足够多节点知道该接受状态已广泛形成”。quorum 计数保证证书交叠,协议规则则保证交集中的正确节点不为同一视图、序号支持冲突值;view change 再携带 prepared 证据,使新 primary 不能遗忘已经获得安全锁定的请求。

PBFT 正常路径与证书阈值
例子与边界

f=1 时需 4 个副本:达到 prepared 需要一条匹配 pre-prepare 与来自两个不同备份的 prepare,本地提交还需三条匹配 commit。primary 停顿或作恶会触发 view change,由新 primary 依据带证据的历史继续。PBFT 的 safety 不依赖已知消息延迟界;liveness 需要网络最终足够及时且正确 primary 最终稳定。消息认证阻止冒充正确副本,但故障副本仍能签发冲突消息。协议假设副本执行确定性操作或以受控方式处理非确定性。

当 f=1 时四副本中任意两个大小为三的提交 quorum 相交至少两副本,其中至少一个正确;因此两份冲突提交证书不可能同时形成。恶意 primary 可向不同备份发送不同摘要,但正确备份只对与其 pre-prepare 匹配的值 prepare,无法凑出两组合法证书。客户端通常等待 f+1 个相同回复,保证其中至少一个来自正确副本;只收到单个签名回复不足以排除 Byzantine 欺骗。

不能只把成员数改成 n>3f+1 而保持所有门槛不变。例如 f=1,n=5 时,三票集合 {A,B,C} 与 {A,D,E} 可能只在 Byzantine 节点 A 相交;它可分别支持冲突值,原先“交点含正确见证”的论证已经失效。扩大投票成员集需要同步重推 prepare、commit 与 view-change 的相交及可用性条件,不能从副本更多直接推出固定三票仍安全。

推论与应用

拜占庭故障下的状态机复制由认证消息与 quorum 证书实现,底层是消息传递。PBFT 的正常路径、checkpoint 与 view change 成为后续 BFT 协议的基线;经典正常路径需要副本间二次量级通信,后续协议常围绕降低消息数、延迟和副本开销改进。安全性依赖交集与锁定规则,活性则依赖部分同步和正确主节点,二者不能用“有 3f+1 副本”一句话同时推出。

令 n=3f+1。只计一次正常视图、无重试请求按协议产生的消息,prepare 与 commit 的全体发送给出 O(n2) 条消息;每个副本为每个仍保留的请求记录 O(n) 份匹配投票。总存储还取决于保留窗口、请求 payload、checkpoint、客户端记录与应用状态;认证数据的字节数和生成/验证工作另计。这个界不约束拜占庭节点任意发送的流量,也不提供总执行时间或重试次数上界。

参考资料
  • Miguel Castro and Barbara Liskov, “Practical Byzantine Fault Tolerance”, OSDI 1999,§4 明确固定 3f+1 成员,§4.2 给出 prepared 与 committed-local 阈值,§4.4 说明 view change。
  • Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996,Chs. 14–17, Byzantine agreement and state-machine replication context。
关系图谱14 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

实现的抽象