建议和反馈

请填写你的反馈内容

《新摩登时代》:卓别林演绎共识与同步流程优化

2019-12-03 ·3398次阅读 ·读完需要15分钟

1. 为什么区块链很慢

2. FISCO BCOS的性能优化

3. 基于DAG的交易并行执行引擎

4. 共识与同步流程优化

5. 全方位的并行处理

6. 全面的性能分析工具

7. 并行合约开发框架





系列专题 | 区块链的 “慢”和优化之路(4)

共识与同步流程优化

作者:石翔



共识与同步的流程优化,是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倍!更重要的是,通过流程优化,确定了共识的主导地位,排除了同步给共识带来的性能影响,让之后的性能分析更好地聚焦在共识流程中!


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


▲ 图来源于电影《摩登时代》


下篇文章,我们将集中阐述并行优化,让可并行的操作都并行起来!敬请期待《全方位的并行处理》



声明:

本文为FISCO BCOS开源社区原创,首发于【FSICO BCOS开源社区】公众号




我们鼓励机构成员、开发者等社区伙伴参与开源共建事业,有你在一起,会更了不起。多样参与方式:


1、进入微信社群,随时随地与圈内最活跃、最顶尖的团队畅聊技术话题(进群请添加小助手微信,微信ID:fiscobcosfan);

2、订阅我们的公众号:“FISCO BCOS开源社区”,我们为你准备了开发资料库、最新FISCO BCOS动态、活动、大赛等信息;

3、来Meetup与开发团队面对面交流,FISCO BCOS正在全国举办巡回Meetup,深圳、北京、上海、成都……欢迎您公众号在菜单栏【找活动】中找到附近的Meetup,前往结识技术大咖,畅聊硬核技术;

4、参与代码贡献,您可以在Github提交Issue进行问题交流,欢迎向FISCO BCOS提交Pull Request,包括但不限于文档修改、修复发现的bug、提交新的功能特性。


代码贡献指引:

https://github.com/FISCO-BCOS/FISCO-BCOS/blob/master/docs/CONTRIBUTING_CN.md



FISCO BCOS的代码完全开源且免费

下载地址↓↓↓

https://github.com/FISCO-BCOS/FISCO-BCOS

二维码0918_看图王.jpg

评论(0)问答(0)
请先登录或注册

请先登陆或注册

相关推荐

我们如何选择开发平台:超级账本还是以太坊?

在区块链的世界里,超级账本(Hyperledger)和(Ethereum)都产生了创新的浪潮。这两个流行的开源区块链平台在行业中不仅发现了大量区块链应用,而且它们还鼓励世界各地的区块链开发者参与区块链......
论坛咸鸟 · 2020-08-11
1164阅读 · 0赞赏 · 0问答

区块链“军备竞赛”:全球科技巨头攻抢授权专利

区块链为什么会在现在如此受重视?仅仅因为它是一门新的互联网技术吗?答案是否定的。2008年,比特币开启了加密数字资产和区块链的潘多拉魔盒,我们一方面需要厘清比特币、稳定币等加密数字资产的风险与挑战,另......
区块链论坛 · 2020-08-10
482阅读 · 0赞赏 · 0问答

区块链:把规则放在阳光下

一、把规则放在阳光下每次和圈外的朋友聊天,他们总会问这么一个问题:区块链到底有什么用啊?他们说:“看过了网上很多的解释,都太复杂了,好多专业术语,你能够用一句话解释区块链到底有什么用吗?”说实话,用一......
香辣xg · 2020-08-05
1602阅读 · 0赞赏 · 0问答

区块链泡沫破灭,让更多人看见了背后的光!

“区块链泡沫”破灭后所沉淀下的真正价值,就是淘去尘土后,技术所绽放出来的光芒。在任何商业转折点到来之前,都有一个普遍征兆,就是新技术的涌现。然而,一个新技术从诞生到投入商用,往往存在一定的滞后性。泡沫......
玫瑰 · 2020-07-31
1517阅读 · 0赞赏 · 0问答

区块链的应用为什么这么难?出路在哪?

什么是区块链技术比特币区块链技术是支撑比特币的一系列技术与管理方法的总称。区块链技术是在比特币区块链技术基础上推广发展起来,包括防篡改的加密技术,实现去中心化并形成共识的机制,促使全员参与的激励办法等......
naruto · 2020-07-28
3272阅读 · 0赞赏 · 0问答

Compound登上DeFi王座的背后故事

 六月中旬,基于算法的去中心化金融协议Compound批准了一项提案,允许将其原生代币COMP代币分发给平台上的借款人和贷款人。此消息一出,立刻引起了用户关注,人们开始把资产汇聚到Compo......
社区菲菲 · 2020-07-27
1157阅读 · 0赞赏 · 0问答

FISCO BCOS

229

LK币

0

粉丝

13

笔记

感谢"FISCO BCOS"

这篇精彩的笔记,目前已经帮助

  • 0
  • 3
  • 3
  • 9
  • 8
喜欢0
链客社群 加入

微博进入

商务合作>

广告投放>

公司名称:北京链客行科技有限公司

联系方式:010-67707199

ICP备案号:京ICP备18032136号

Copyright:链客区块链技术问答社区 版权所有

感谢您的提问,问题被社区永久收入以便新人查看。一定要记得采纳最佳答案哦!加油!

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!