1 微众银行PBFT共识算法原理和共识架构

1.1 共识系统架构


PBFT共识主要包括两个线程:

  • PBFTSealer: PBFT打包线程,负责从交易池取交易,并将打包好的区块封装成PBFT Prepare包,交给PBFTEngine处理;
  • PBFTEngine: PBFT共识线程,从PBFTSealer或者P2P网络接收PBFT共识消息包,完成共识流程,将达成共识的区块写入区块链,区块上链后,从交易池中删除已经上链的交易,区块验证器(Blockverifier)负责执行区块。

1.2 核心流程

PBFT共识主要包括Pre-prepare、Prepare和Commit三个阶段:

  • Pre-prepare:负责执行区块,产生签名包,并将签名包广播给所有共识节点;
  • Prepare:负责收集签名包,某节点收集满2*f+1的签名包后,表明自身达到可以提交区块的状态,开始广播Commit包;
  • Commit:负责收集Commit包,某节点收集满2*f+1的Commit包后,直接将本地缓存的最新区块提交到数据库。

1.3 PBFT各个阶段的具体流程

2 FISCO BCOS共识算法PBFT优化之路

原始的PBFT共识算法在区块打包、交易验签、区块执行、空块处理等方面仍有持续的优化空间,为了让PBFT算法更快更稳,FISCO BCOS做了一系列优化,包括:

  • 打包和共识并发进行;
  • 不重复验签交易;
  • 空块快速触发视图切换,并切换Leader,不落盘空块,消除空块落盘存储开销的同时,有效防止了节点作恶;
  • 引入DAG并行交易执行框架,可并行执行区块内交易;
  • 解决了节点宕机后,无法快速追上其他节点视图的问题,保证了系统的可用性。

2.1 打包和共识并发进行

考虑到Leader轮流串行打包交易、交易验签速度慢以及区块执行速度慢,都是导致性能问题的主要因素,FISCO BCOS做了如下优化:
PBFT共识算法在每一轮共识,都包括打包阶段和共识阶段,Leader打包新区块时,所有共识节点都处于等待Prepae包的状态中,无法进入共识阶段;共识节点处于共识阶段时,Leader的打包线程不工作,但打包区块和共识是两个独立互斥的过程,可以并发执行。

设打包阶段的时间开销为t, 共识阶段时间开销为u,n轮共识的时间开销为n∗(t+u);但若下一轮共识的Leader参与共识阶段的同时,也提前打包区块,并在下一轮共识时,广播已经打包好的区块,则可将共识时间开销缩短为n∗u+t,时间开销降低了(n-1)*t,可以有效提升PBFT共识算法性能。

2.2 不重复验签交易


共识节点收到Leader发送的Prepare包后,会从中取出区块,并验证区块内每笔交易签名的有效性,但交易验签是很耗时的操作,会增加PBFT Prepare阶段的时间开销,降低性能。

考虑到交易插入到交易池的时候,会进行一次验签,如下图所示,FISCO BCOS系统做了防止交易重复验签的优化,下面结合整个交易流的处理流程,详细说明FISCO BCOS防止交易重复验签的处理流程:

(1)RPC接收客户端发送的交易后,进行交易验签;

(2)交易验证通过后,被插入到交易池,同步模块广播交易;

(3)其他节点的同步模块收到其他节点的交易后,并进行验签交易,并将有效交易插入到交易池;

(4)共识模块收到Prepare包后,解出Prepare包内区块,判断区块内交易是否在交易池内,仅验证不包含在交易池内的交易签名。

经过上述优化后,将Prepare请求内包含10000笔交易的区块解码和验签时间,由2s降低为200ms,大大减少了Prepare阶段的时间开销。

2.3 FISCO BCOS的PBFT空块处理

FISCO BCOS PBFT共识算法,通过空块触发快速视图切换的方法,达到切换Leader目的,同时不落盘空块。

2.4 DAG并行交易执行

区块执行是PBFT共识算法的主要时间开销之一,没有做任何并行优化的情况下,PBFT共识算法几乎无法就一个包含上万笔交易的区块达成共识。

为了提升区块链系统TPS,FISCO BCOS系统开发了基于DAG的交易并行执行引擎,并引入了可并行的合约开发框架,支持并行执行交易,达到了上万的TPS。具体可参考这里:《区块链性能腾飞:基于DAG的并行交易执行引擎》。

2.5 提高系统可用性


刚启动的节点或者新节点加入区块链网络时,若不能立即和其他节点视图达成一致,会影响系统容错性。

  • case1:4节点区块链系统,node0宕机,剩余三个节点容错节点数为0;node0重启若无法快速追上其他节点视图,系统可容错节点数仍然为0,且node0处于共识异常状态中。

  • case2:2节点区块链系统正常运行,新加入节点node2,若node2无法快速追上其他节点视图,系统会由于1个节点异常(新加入节点)而处于共识异常状态中。

针对上面问题,FISCO BCOS PBFT共识算法引入了快速视图追赶机制,刚启动节点向所有其他共识节点发送视图切换包,其他节点收到包后,向其回复最新视图,从而使得刚启动节点可快速和其他共识节点达成一致视图,系统在加入了新节点后也不会共识异常。

如上图所示,核心流程如下:

  • 刚启动节点向所有其他节点广播视图切换请求包ViewChange,请求包内的视图ViewChange.toView为1;

  • 其他节点收到toView远小于当前节点视图的ViewChange请求后,回复包含当前视图(view)的ViewChange包;

  • 刚启动节点收集满2*f+1个ViewChange包后,切换到和其他共识节点一致的视图。

参考资料

[1]https://www.bookstack.cn/read/fisco-bcos-v2.0/a740cf9a9be89bd7.md
[2]https://www.hulianmaibo.com/posts/info/19866

共识算法PBFT资料整理相关推荐

  1. 拜占庭共识算法PBFT:Practical Byzantine Fault Tolerance

    拜占庭共识算法PBFT:Practical Byzantine Fault Tolerance 转载自https://www.jianshu.com/p/0bef4fb1662b 参考链接:https ...

  2. 区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述

    共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今PO ...

  3. 史上最全算法学习资料整理

    高质量文章收藏 (1.8w字)负重前行,前端工程师如何系统练习数据结构和算法?[上] 算法与面试之-如何准备算法面试 我接触过的前端数据结构与算法 - 掘金 前端该如何准备数据结构和算法? - 掘金 ...

  4. 拜占庭将军问题与区块链共识算法PBFT

    概述 1.两军问题 两军问题中信道是不可靠的,并且其中没有叛徒之说. 解决方式:Tcp的三次握手可以提供相对可靠地信道通信. 2.拜占庭将军问题 概述 拜占庭将军问题中并不去考虑通信兵是否会被截获或无 ...

  5. 密码键盘常用(加解密,链接,MAC,PINBLOCK)算法介绍-资料整理

    常用算法介绍 一.DES,TDES算法 1,DES(Data Encryption Standard,标准加密算法) DES采用了64位的分组长度和56位的密钥长度,它将64位的输入经过一系列变换得到 ...

  6. 拜占庭容错共识(PBFT)

    文章目录 一.拜占庭容错共识 1. 什么是PBFT 拜占庭将军的问题是什么? pBFT 原理 2. 与最传统的PoW共识机制相比,PBFT优势和劣势 3. BFT共识开发库 Tendermint BF ...

  7. 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT、PoW、PoS、DPos

    五篇分布式共识系列文章合集: 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT.PoW.PoS.DPos 分布式共识算法(故障容错算法)系列整理(二):Bully.Gossip.NWR 分布式共 ...

  8. 基于实用拜占庭共识算法(PBFT)的区块链模型的评估

    摘要 近年来,区块链成为了互联网金融领域的研宄热点.作为一种分布式的账本技术,区块链具有去中心化,不可篡改,安全可信等诸多优势,但同时面临耗能过高,吞吐量低等问题.共识算法作为区块链的核心,决定了区块 ...

  9. 共识算法(POW、POS、PBFT、DPOS)介绍-

    POW:Proof of Work,工作证明 比特币在Block的生成过程中使用了POW机制,一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值.要得到合理的Block H ...

最新文章

  1. 将csv文件导入到mysql数据库
  2. 20141230 mysql数值类型和列属性二
  3. 计算机辅助设计A卷,《计算机辅助设计》考试试卷A.doc
  4. Java高级语法笔记-文件及目录操作
  5. [Android5 系列—] 4. Android 3D 入门
  6. Windows 1.0
  7. ETL介绍与ETL工具比较
  8. ie8打完补丁重启报错
  9. opencv无法打开源文件opencv2/opencv.hpp文件
  10. 考试倒计时,计算机二级重难点汇总【39套历年考题】
  11. 联想 G50-70 关闭无线功能,如何重新启动??
  12. 数据可视化|用热力地图进行数据分析
  13. 显示HTML的版权符号
  14. Agarose bound-WFA,WFL;琼脂糖结合紫藤凝集素(WFA,WFL)
  15. 【Python数据清洗】numpy.take()用法
  16. 去哪儿旅行携程旅行淘宝旅行移动端产品分析报告
  17. CIF、DCIF、D1区别_昂首阔步_百度空间
  18. 繁简转换OpenCC,autogb 和 autob5,iconv,python的jianfan包
  19. Java、JSP学生寝室管理系统的设计与实现
  20. HTTPS的POST登录数据包方式

热门文章

  1. 英飞凌TC387复位后无法跳转到应用程序首地址
  2. Nginx官方文档(十一)【HTTP之ngx_http_core_module】
  3. linux驱动21:内核创建类class_create
  4. 3DMAX解析愤怒的小鸟
  5. source insight使用方法简介
  6. 决策树的三种常见算法
  7. ios键盘弹起页面被顶上去的问题
  8. 海信75E5K怎么样 海信75E5K和75E5H区别 哪个好
  9. 新版手机离线地图GPS定位程序
  10. 用Java编写约分最简公式_一个有趣的算法问题:如何定义一个分数类