共识算法PBFT资料整理
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资料整理相关推荐
- 拜占庭共识算法PBFT:Practical Byzantine Fault Tolerance
拜占庭共识算法PBFT:Practical Byzantine Fault Tolerance 转载自https://www.jianshu.com/p/0bef4fb1662b 参考链接:https ...
- 区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述
共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今PO ...
- 史上最全算法学习资料整理
高质量文章收藏 (1.8w字)负重前行,前端工程师如何系统练习数据结构和算法?[上] 算法与面试之-如何准备算法面试 我接触过的前端数据结构与算法 - 掘金 前端该如何准备数据结构和算法? - 掘金 ...
- 拜占庭将军问题与区块链共识算法PBFT
概述 1.两军问题 两军问题中信道是不可靠的,并且其中没有叛徒之说. 解决方式:Tcp的三次握手可以提供相对可靠地信道通信. 2.拜占庭将军问题 概述 拜占庭将军问题中并不去考虑通信兵是否会被截获或无 ...
- 密码键盘常用(加解密,链接,MAC,PINBLOCK)算法介绍-资料整理
常用算法介绍 一.DES,TDES算法 1,DES(Data Encryption Standard,标准加密算法) DES采用了64位的分组长度和56位的密钥长度,它将64位的输入经过一系列变换得到 ...
- 拜占庭容错共识(PBFT)
文章目录 一.拜占庭容错共识 1. 什么是PBFT 拜占庭将军的问题是什么? pBFT 原理 2. 与最传统的PoW共识机制相比,PBFT优势和劣势 3. BFT共识开发库 Tendermint BF ...
- 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT、PoW、PoS、DPos
五篇分布式共识系列文章合集: 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT.PoW.PoS.DPos 分布式共识算法(故障容错算法)系列整理(二):Bully.Gossip.NWR 分布式共 ...
- 基于实用拜占庭共识算法(PBFT)的区块链模型的评估
摘要 近年来,区块链成为了互联网金融领域的研宄热点.作为一种分布式的账本技术,区块链具有去中心化,不可篡改,安全可信等诸多优势,但同时面临耗能过高,吞吐量低等问题.共识算法作为区块链的核心,决定了区块 ...
- 共识算法(POW、POS、PBFT、DPOS)介绍-
POW:Proof of Work,工作证明 比特币在Block的生成过程中使用了POW机制,一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值.要得到合理的Block H ...
最新文章
- 将csv文件导入到mysql数据库
- 20141230 mysql数值类型和列属性二
- 计算机辅助设计A卷,《计算机辅助设计》考试试卷A.doc
- Java高级语法笔记-文件及目录操作
- [Android5 系列—] 4. Android 3D 入门
- Windows 1.0
- ETL介绍与ETL工具比较
- ie8打完补丁重启报错
- opencv无法打开源文件opencv2/opencv.hpp文件
- 考试倒计时,计算机二级重难点汇总【39套历年考题】
- 联想 G50-70 关闭无线功能,如何重新启动??
- 数据可视化|用热力地图进行数据分析
- 显示HTML的版权符号
- Agarose bound-WFA,WFL;琼脂糖结合紫藤凝集素(WFA,WFL)
- 【Python数据清洗】numpy.take()用法
- 去哪儿旅行携程旅行淘宝旅行移动端产品分析报告
- CIF、DCIF、D1区别_昂首阔步_百度空间
- 繁简转换OpenCC,autogb 和 autob5,iconv,python的jianfan包
- Java、JSP学生寝室管理系统的设计与实现
- HTTPS的POST登录数据包方式