实用拜占庭容错算法 (PBFT)

一、算法原理
    实用拜占庭容错算法 (Practical Byzantine fault tolerance, PBFT)是一种状态机副本复制算法, 每个状态机的副本都保存了服务的状态, 同时也实现了客户端所有合法请求的操作, 能够保证在满足分布式系统活性和安全性的前提下, 允许 (n − 1)/3 个节点出错 (数据丢失、不工作等), 其中 n 为分布式系统中所有参与共识过程的节点数量. 即该算法能够保证系统在 (n − 1)/3 个节点出现故障或恶意操作的情况下, 依然能正确达成分布式共识.
    PBFT 算法中存储副本的节点都在一个视图(View) 的轮换过程之中. 在编号为 v 的视图中, 一个副本节点是主节点, 其他副本节点是备份节点. 主节点主要用来接收客户端发送的请求消息, 由公式 p= v mod |R| 计算选出, |R| 表示存储副本节点的个数. 若主节点失效, 则启动视图更换, 更改当前的视图编号 v, 再根据上面的公式选出主节点.
二、算法过程
PBFT算法的过程如下:

  1. 客户端向主节点发送请求操作消息, 主节点接收到请求操作消息并校验正确后, 保存该消息, 并依据该请求操作消息生成预准备消息, 广播给各备份节点.
  2. 各备份节点接收到预准备消息并校验正确后, 保存该消息, 并以该预准备消息为依据, 生成准备消息广播给主节点和其他备份节点.
  3. 各存储副本的节点接收到准备消息并校验正确后, 保存该消息, 并以该准备消息为依据, 生成提交消息给客户端、主节点和其他备份节点.
  4. 各存储副本的节点接收到 (2n + 1)/3 个提交消息并校验正确后, 则执行来自客户端的请求操作消息里的操作.
  5. 客户端接收到 (n + 2)/3 个提交消息, 验证正确并接受后, 便认为该消息已被副本节点集群所承认与执行. 这里的客户端接受 (n + 2)/3 个提交消息而不是 (2n + 1)/3 个的原因在于失效的节点数量不超过 (n − 1)/3, 因此 (n − 1)/3 + 1 个一致响应必定能够保证结果是正确的.

PBFT 算法的三阶段过程如下图所示:
实用拜占庭容错算法 (PBFT)_第1张图片
附:生活不止需要技术也需要艺术!
实用拜占庭容错算法 (PBFT)_第2张图片

你可能感兴趣的:(区块链,区块链)