作者:石翔|FISCO BCOS 核心开发者

共识与同步的流程优化,是FISCO BCOS性能优化迈开的第一步。仅依靠这一流程优化,就给系统TPS带来可观的1.75倍提升。但这不是目的,其目的在于确定了共识的主导地位,排除了同步给共识带来的性能影响,让之后的性能分析更好地聚焦在共识流程中。

基础讲解

在卓别林的电影《摩登时代》里,卓别林扮演一个工人,日复一日地重复着拧螺丝的动作:提起扳手,找到零件,对准螺丝,拧紧,再提起扳手,再找到下一个零件,再对准螺丝,再拧紧…… 在FISCO BCOS的设计里,共识和同步也在干着这样重复的事情。

共识与同步是个啥?

共识与同步,是FISCO BCOS节点中的两个核心流程。它们相互配合,实现了区块链的核心功能:生产出一条在每个节点上都一致的区块链。在FISCO BCOS节点的实现里,共识和同步的实体,我们称为共识模块和同步模块。

  • 共识模块:负责生产区块,让节点产生的区块都是一模一样的
  • 同步模块:负责广播交易,让用户发出的交易尽可能地到达每个节点

共识与同步在干啥?

我们来看看共识模块和同步模块的工作环境:

  • 交易池:节点中缓存未被处理交易的容器
  • 网络模块:接收其它节点发来的消息包,也可向其它节点发送消息包 那么,共识模块与同步模块在干啥?

共识模块

不断进行共识消息的处理和发送,让所有节点上的区块达到一致,此处以PBFT的共识为例。

  1. 打包区块:从交易池拿取出交易,打包成区块广播出去,或处理从网络模块拿到的其它节点的区块
  2. 执行区块:解码区块,验证区块,执行区块,将区块的执行结果签个名广播出去
  3. 收集签名:收集其它节点执行结果的签名,如果收集到的签名达到一定数量,就向其它节点广播“commit消息”
  4. 收集commit:收集其它节点的commit消息,当收集到的commit消息达到一定数量,说明区块已经一致,可以落盘了
  5. 落盘:把区块连接到现有区块链的末端,形成区块链,存储到DB中

同步模块

不断进行交易的收发,让每一笔交易尽可能地到达每个节点。

  1. 取交易:从交易池中取出未发送的交易
  2. 发交易:把未发送的交易广播给其它节点
  3. 收交易:从网络模块收取其它节点的交易
  4. 验交易:对交易进行解码和验签
  5. 存交易:把验签通过的交易存到交易池中

问题与优化

卓别林和他的伙伴各司其职,井然有序,看似非常和谐。可当工厂落后的生产力跟不上旺盛的市场需求,即便是卓别林这种熟练工,加班加点也干不完。这个时候,卓别林不得不开始思考自己和伙伴在生产关系上的问题。

  • 在以往的设计中,共识模块和同步模块并没有优先级的区分,导致它们在争夺资源时浪费了大量的时间。
  • 同时,共识模块和同步模块中还有很多重复的操作,也浪费了时间。

因此,应该将共识模块和同步模块的执行流程一并考虑,优化流程,提高效率。在经过详细分析和缜密验证后,FISCO BCOS将共识模块和同步模块流程进行了优化。优化基于以下思想:

  • 共识模块负责主导整个区块链出块的节奏,应让共识模块先行。
  • 而同步模块,理应扮演好配合的角色,辅佐共识模块更快出块。

基于上述思想,我们来看看其中几个问题的优化方法。

问题1:工作阻塞

共识模块与同步模块都是从网络模块中获取消息包,再根据相应消息包进行下一步操作。

但是,由于网络回调线程数量的限制,同步模块在处理消息包时,占用了网络的回调线程,导致共识模块无法及时处理其它节点发来的共识消息,共识流程被阻塞。

如何解决?——将同步消息的处理操作从网络回调线程中剥离

基于共识模块先行的思想,应让共识模块更及时地收到共识消息,不能让同步模块占用网络回调线程太久。

因此,同步模块在拿到消息时,不是直接在回调线程中对交易进行解码和验签,而是将同步消息包缓存起来,用另外一个线程“私下”慢慢处理。

这样一来,同步消息的处理不会长时间占用网络回调线程,能让共识消息响应得更快。

问题2:编解码冗余

同步模块收到同步消息中的交易,是经过编码的,同步模块需将其解码成节点代码中的数据结构,再存入交易池中。

共识模块打包区块时,把交易从交易池中取出,将交易进行编码,打包成区块,再将区块发送出去。

在这个过程中,交易先被解码,又被编码,操作存在冗余。

如何解决?——交易编码缓存

共识优先级高于同步,应尽量减少共识模块中不必要的操作。

因此,

在同步模块存交易时,一并将交易的编码存入交易池。

共识模块取交易时,直接从交易池中拿出编码好的交易,免去了编码操作。

问题3:重复验签

同步模块在收到交易后,需对交易的签名进行验证(简称“验签”),

共识模块在收到区块后,也需要对区块中的交易进行验签。

同步模块和共识模块所验签的交易,有很大概率是重复的。

验签是一个非常耗时的操作,每进行一次额外的验签,都会消耗大量的时间。

如何解决?——验签去重

无论是同步模块还是共识模块,在验签前,都去交易池里查询该笔交易是否存在。如果存在,就省略验签操作。如此一来,一笔交易只验签一次,减少了不必要的验签开销。

解决方案可否更优?——尽量让同步验签,减少共识模块验签的次数

仍然是共识模块优先的思想,尽量减少共识模块验签的操作。

因此,同步模块必须比共识模块跑得快,在共识模块处理一笔交易前,同步模块先拿到交易,优先对交易验签。

FISCO BCOS在此处对同步模块采取的策略是:对交易进行全量的广播

在一个打包节点拿到交易时,其它节点的同步模块也收到了相应的交易。

在其它节点收到打包节点发过去的区块时,区块中所包含的交易早已被同步模块验签后写入交易池中。

同时,为了让同步模块在相同操作的处理速度上不低于共识模块,同步模块的交易编解码,也采用了和共识模块一样的“并行编解码”和“交易编码缓存”。

结果如何?

共识与同步的流程优化,一定程度上也提高了交易处理的TPS。经测试,交易处理的TPS提高至原来的1.75倍!更重要的是,通过流程优化,确定了共识的主导地位,排除了同步给共识带来的性能影响,让之后的性能分析更好地聚焦在共识流程中!

消除了阻塞,消除了编码冗余,消除了重复验签,卓别林和他的伙伴工作得更轻松,更顺畅了!

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/articles/3_features/31_performance/consensus_and_sync_process_optimization.html

FISCO BCOS 《新摩登时代》:卓别林演绎共识与同步流程优化相关推荐

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

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

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

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

  3. 开源架构Fabric、FISCO BCOS(以下简称“BCOS”)、CITA 技术对比

    转自 https://www.coingogo.com/news/41300 联盟链技术哪家强?开源架构Fabric.FISCO BCOS(以下简称"BCOS").CITA 技术对 ...

  4. Fabric、FISCO BCOS、以太坊对比

    Fabric.FISCO BCOS.以太坊对比 一.以太坊 1.1 什么是工作量证明(POW) 1.2 这是如何运作的? 1.3 工作量证明的问题 1.4 股权证明 二.Fabric 2.1 产生背景 ...

  5. Hyperledger Fabric和FISCO BCOS技术对比

    1 起源 Hyperledger Fabric 是分布式账本解决方案的平台,该平台以模块化架构为基础,提供高度的机密性,灵活性和可扩展性.它旨在支持不同组件的可插拔实现,并适应整个经济生态系统中存在的 ...

  6. 区块链 Fisco bcos 智能合约(19)-区块链性能腾飞:基于DAG的并行交易执行引擎PTE

    在区块链世界中,交易是组成事务的基本单元. 交易吞吐量很大程度上能限制或拓宽区块链业务的适用场景,愈高的吞吐量,意味着区块链能够支持愈广的适用范围和愈大的用户规模. 当前,反映交易吞吐量的TPS(Tr ...

  7. FISCO BCOS 区块链

    FISCO BCOS是由国内企业主导研发.对外开源.安全可控的企业级金融联盟链底层平台,由金链盟开源工作组协作打造,并于2017年正式对外开源. 社区以开源链接多方,截止2020年5月,汇聚了超100 ...

  8. 西南林业大学“西林链”通过工信部电子标准院功能测试 | FISCO BCOS案例

    近日,西南林业大学基于FISCO BCOS开发的安全可控区块链基础服务平台--西林链(V4.0),通过了工信部中国电子技术标准化研究院(以下称电子标准院)的区块链系统功能测试. 信息来源: 中国区块链 ...

  9. FISCO BCOS 2022年度贡献者榜单

    平台践行开源共创的精神,FISCO BCOS开源社区致力打造开放多元的开源联盟链生态. 目前,社区已汇聚了超70000名社区用户,大家聚集于此碰撞观点.交流技术,围绕FISCO BCOS开发各类实用的 ...

  10. 感谢有你 | FISCO BCOS 2023年第一季度贡献榜单

    平台践行开源共创的精神,FISCO BCOS开源社区致力打造开放多元的开源联盟链生态. 通过多年深耕细作,FISCO BCOS开源生态圈已汇聚超过4000家企业及机构.9万余名个人成员,大家聚集于此碰 ...

最新文章

  1. 使用CORS解决同源限制
  2. C语言--在终端输入多行信息,找出包含“ould”的行,并打印改行
  3. 个人控件/对象命名规范(慢慢更新)
  4. 二进制高低位交换の琐事(洛谷P1100题题解,Java语言描述)
  5. pythonpandas数据库_Python连接mysql数据库极简教程(pandas)
  6. 关于区块链的一些思绪
  7. 英语一窍不通能学计算机吗,对英语一窍不通怎么学有什么好的方法
  8. 某些数组和字符串类型转换(转)
  9. linux中安装多个mysql_Linux环境中安装多个MySQL服务笔记
  10. servlet容器,web容器,spring容器,springmvc容器,dubbo容器之间区别
  11. 2020 年 Github 上最牛的 Java 进阶教程及 Java 实战项目都在这里了!
  12. SpringMVC条件查询+分页时下一页丢失查询条件
  13. PyQt5 信号(Signal)与槽(Slot)
  14. mybatis,引入pageHelper,参数中有pageNum和pageSize,且都不为空,会分页
  15. 2008年中国电子商务十大时刻
  16. 2020ICPC沈阳站后记
  17. dubbo解析-Merger接口作用及其实现类介绍
  18. 使用Python评估Lil John的“拒绝做什么”
  19. excel数字很大时设置下拉自增
  20. CORDIC算法的matlab和FPGA实现

热门文章

  1. 前端工程精粹(二):静态资源管理与模板框架
  2. cocos2d-x—schedule介绍
  3. redhat 替换centos yum源
  4. 一步一步解决“不能上网”
  5. WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题
  6. java参数可变方法
  7. 操作config文件
  8. 拓端tecdat|R语言回测交易:根据历史信号/交易创建股票收益曲线
  9. 拓端tecdat|Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择
  10. 拓端tecdat|R语言HAR和HEAVY模型分析高频金融数据波动率