烂字图说之三:超级账本的PBFT算法

区块链作为当前最火热的技术之一,使搞IT的人不懂一点都没法出来见人。这里也不打算再做科普,假定读者都是已经对区块链有了些基本概念。HyperLedger Fabric是联盟链的主流开源社区,学习区块链技术可以从这个开源框架入手。

Fabric的共识机制是使用PBFT(拜占庭容错)算法,算法中涉及到的技术点很多,步骤及其繁琐,很多文章又都像官方翻译很难理解,所以将一些过程简化,并力图用白话来阐述。

PBFT的整个机制可以分四个主题来阐述:一,核心概念;二,共识过程;三,垃圾回收;四,场景异常恢复。如下图:

一,核心概念

Client:发起交易或记账请求的客户端;

Replica: 所有加入链的节点,但请求时有主节点和副节点之分;

View:一个请求的操作序列;

Checkpoint:用于故障恢复的检查点,和数据库的checkpoint类似;

Watermark:水位线,两个Checkpoint之间的长度。类似于行军阵列,一个走几排这样子,用于控制节奏。

2f+1:甭管2f还是3f,只要理解是以多数为准就好了。

二,共识过程

算法书面的说法叫共识三阶段,只包含了图中2,3,4阶段,把请求和返回包含进来可以展示完整的账本记录过程。这个图中的一些技术要点做了细微调整,使其理解连贯,但是记住几个重要信息就能有整体把握,即v,d,n,t,v是view,d是view中某个操作的消息摘要,n是view中某个操作的序列编号,t是view请求的时间戳,每个阶段就是对这些信息来来回回的比较,最后取多数一致的。官方图中各个阶段定义的差异比较大,是这样的

但是要想认识准确的话,还是一定要看官方图

三,垃圾回收

一次请求共识的步骤这么多,资源开销也大,所以需要清理内存,各节点可以定期广播来获取当前Checkpoint,清除已经执行过的记录。K=H-L,就表示高水位到低水位的区间。实际上在共识过程的步骤3,4中,都会检查操作序列中的编号n是否超过水位区间。这样就会保证各节点的差距不会拉的太大。

四,场景异常恢复

是指某节点可能收到异常的操作序列场景,如何恢复到当前请求的操作场景。官方叫view change,将军给传令官的命令是让你打中国台湾,可你收到的命令是打越南,这不耽误事么。

当然,在HyperLedger Fabric的技术实现上还是有所不同的,由order服务(排序),OSN节点(order service node,和kafka通信),Kafka cluster(存放区块链)组成。特别是Fabric 1.0实现了可插拔的架构,可以灵活选择不同的共识插件如Solo,Kafka,SBFT等模式,具体实现方法以后再讲。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180615G01P9400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券