陈宇杰 FISCO BCOS开源社区 2019-08-08

作者语

--

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

  • 打包和共识并发进行;

  • 不重复验签交易;

  • 引入DAG并行交易执行框架,可并行执行区块内交易;

  • 空块快速触发视图切换,并切换Leader,不落盘空块,消除空块落盘存储开销的同时,有效防止了节点作恶;

  • 解决了节点宕机后,无法快速追上其他节点视图的问题,保证了系统的可用性。

本文分别从性能、存储和可用性三个方面,向大家细说FISCO BCOS的共识优化方案。

性能优化

考虑到Leader轮流串行打包交易交易验签速度慢以及区块执行速度慢,都是导致性能问题的主要因素,FISCO BCOS做了如下优化:

打包和共识并发执行

PBFT共识算法在每一轮共识,都包括打包阶段共识阶段

Leader打包新区块时,所有共识节点都处于等待Prepae包的状态中,无法进入共识阶段;

共识节点处于共识阶段时,Leader的打包线程不工作,

但打包区块和共识是两个独立互斥的过程,可以并发执行。

设打包阶段的时间开销为t, 共识阶段时间开销为u,n轮共识的时间开销为n∗(t+u);

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

避免交易重复验签

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

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

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

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

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

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

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

区块并行执行

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

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

存储优化

为保障系统正常运行、确认Leader可用、防止Leader故意作恶,基于PBFT共识算法的区块链系统在没有交易时,会产生空块,并就空块达成共识。

虽然空块共识是必要的,但考虑到当前区块链系统的QPS不大,落盘空块会耗费存储空间、降低硬盘利用效率(可存储的交易数)。

FISCO BCOS基于PBFT共识算法,实现了高效的空块处理方法,保证空块参与PBFT共识流程的同时,不落盘空块,提升了磁盘利用效率。详细方案可参考这里:《FISCO BCOS的PBFT空块处理》。

可用性优化

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

  • 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包后,切换到和其他共识节点一致的视图。

总结

以上详述了FISCO BCOS在共识算法上的优化策略,FISCO BCOS使用系统的方法使得PBFT算法性能和存储效率更高,可用性更强。

当然,除了前面提到的问题外,PBFT算法在网络复杂度上也有持续优化空间,FISCO BCOS开发团队也在积极调研最新的共识算法及共识算法优化策略,并寻求大规模节点共识的解决方案,敬请期待。

https://mp.weixin.qq.com/s?__biz=MzA3MTI5Njg4Mw==&mid=2247485295&idx=2&sn=46cff7fcdf2e807325532941fcbc98fe&chksm=9f2ef573a8597c65d159c17298ecec02097aafeedfd0192154d9d530c9a0d0a79a22c33894a0&scene=21#wechat_redirect

FISCO BCOS共识优化之路相关推荐

  1. FISCO BCOS工程师常用的性能分析工具推荐

    FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...

  2. 区块链 Fisco bcos 智能合约(22)-全面的性能分析工具

    前 言 We should forget about small efficiencies, say about 97% of the time: premature optimization is ...

  3. FISCO BCOS中交易池及其优化策略

    作者:陈宇杰|FISCO BCOS 核心开发者 作者语 FISCO BCOS区块链系统中,交易上链之前,均存储在交易池中. 交易池是区块链小能手, 一方面担任质检员的职务,将所有非法交易拒之门外: 一 ...

  4. fisco bcos区块链的同步及其性能优化方法

    作者:石翔 FISCO BCOS开源社区 2019-09-05 同步,是区块链中非常重要的流程,从功能上分为"交易同步"和"状态同步". 交易同步在交易提交时执 ...

  5. 区块链码农飙车 | FISCO BCOS的性能优化方案最全解密

    FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...

  6. 区块链学习路径,看这一篇就够了 | FISCO BCOS

    FISCO BCOS开源社区已沉淀过百篇文章,覆盖了区块链学习各个阶段.为了方便大家对应自身学习阶段找到合适的教程,我们按照区块链学习成长路径对社区文章进行整理排序,希望沿着这份路径规划,大家都能成为 ...

  7. FISCO BCOS 2.0发布:新增群组架构克服吞吐瓶颈

    今日,FISCO BCOS开源社区正式对外发布FISCO BCOS的2.0版,该版本在可扩展性.性能.易用性.隐私隔离等方面均取得突破性进展,其新增的群组架构方案,可以让企业间像拉微信群一样快速组链, ...

  8. 联盟链中的Hyperledger Fabric、FISCO BCOS和CITA

    本文援引自链接:https://mp.weixin.qq.com/s/4JAZGwI32bZNlxBqPfkihg 一.摘要 第 46 届世界经济论坛达沃斯年会将区块链与人工智能.自动驾驶等一并列入& ...

  9. FISCO BCOS迎来开源智能合约编程语言Liquid

    编者荐语: 以下文章来源于微众银行区块链 关注公众号:微众银行区块链,并回复 [Liquid]获取全文高清PDF 面对多样复杂应用场景的全新挑战,适用FISCO BCOS的智能合约语言Liquid提出 ...

  10. 微众银行张开翔: FISCO BCOS - 开放的区块链实践之道 | 11月25日【区块链技术与实践】论坛...

    张开翔老师,微众银行区块链首席架构师. 张老师在互联网业和金融行业工作多年,有丰富的分布式系统和海量服务实践经历,于2015年专注投入区块链.隐私计算的技术和行业研究,主持微众银行区块链全栈技术体系设 ...

最新文章

  1. 机器学习从Python 2迁移到Python 3,你需要注意的一些事……
  2. 此为太阳历的技术支持博客
  3. dex文件结构(二):dex文件加载基本原理
  4. 【学习笔记】juc并发学习+关于锁的面试题
  5. Collections.unmodifiableMap
  6. 210. 课程表 II
  7. AutoMapper在asp.netcore中的使用
  8. osgi java_使普通的旧Java OSGi兼容
  9. 计算多个文档之间的文本相似程度
  10. SpringAOP Aspect注解实现简单日志功能
  11. C#IList与List区别
  12. 9.27 csp-s模拟测试53 u+v+w
  13. sed 、awk用法
  14. Linux下PCI设备驱动程序开发
  15. python编写水仙花数(超完全数字不变数、自恋数、自幂数、阿姆斯特朗数)
  16. 魔方机器人之SVM算法识别魔方颜色
  17. 24 个很酷的 Linux/Unix 工具
  18. Bowtie2的简单使用笔记
  19. xampp mysql远程连接_远程访问xampp
  20. UV-LED紫外消毒灯可以有效灭杀气溶胶中附着的新冠病毒

热门文章

  1. android AudioManager类 详解(1)
  2. CentOS 5.5 安装VirtualBox
  3. Posix信号量操作函数
  4. Ubuntu 下 MySQL 数据自执行备份
  5. HDU 5820 Lights(扫描线+zkw线段树)
  6. Silverlight 简明教程(3) -- 资源、样式控制、视觉状态以及部署
  7. HTTP Error 404 - File or Directory not found caused by ISAPI filter of Sharepoint
  8. 读写文本文件时汉字乱码
  9. sap未分摊差异怎么处理_MM采购中形成的差异
  10. 拓端tecdat|R语言对NASA元数据进行文本挖掘的主题建模分析