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

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

代码仓库:https://github.com/FISCO-BCOS

 

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

 

基础讲解

在卓别林的电影《摩登时代》里,卓别林扮演一个工人,日复一日地重复着拧螺丝的动作:提起扳手,找到零件,对准螺丝,拧紧,再提起扳手,再找到下一个零件,再对准螺丝,再拧紧......

在FISCO BCOS的设计里,共识和同步也在干着这样重复的事情。

 

共识与同步是个啥?

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

在FISCO BCOS节点的实现里,共识和同步的实体,我们称为共识模块和同步模块。

  • 共识模块:负责生产区块,让节点产生的区块都是一模一样的

  • 同步模块:负责广播交易,让用户发出的交易尽可能地到达每个节点

 

共识与同步在干啥?

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

  • 交易池:节点中缓存未被处理交易的容器

  • 网络模块:接收其它节点发来的消息包,也可向其它节点发送消息包

那么,共识模块与同步模块在干啥?

 

共识模块

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

  1. 打包区块:从交易池拿取出交易,打包成区块广播出去,或处理从网络模块拿到的其它节点的区块

  2. 执行区块:解码区块,验证区块,执行区块,将区块的执行结果签个名广播出去

  3. 收集签名:收集其它节点执行结果的签名,如果收集到的签名达到一定数量,就向其它节点广播“commit消息”

  4. 收集commit:收集其它节点的commit消息,当收集到的commit消息达到一定数量,说明区块已经一致,可以落盘了

  5. 落盘:把区块连接到现有区块链的末端,形成区块链,存储到DB中

1e3b0d201f14ac5232ae4c404e719d3d652.jpg

同步模块

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

  1. 取交易:从交易池中取出未发送的交易

  2. 发交易:把未发送的交易广播给其它节点

  3. 收交易:从网络模块收取其它节点的交易

  4. 验交易:对交易进行解码和验签

  5. 存交易:把验签通过的交易存到交易池中

bf7213378e92c20e2b846ffdad0d7a25df3.jpg

问题与优化

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

在以往的设计中,共识模块和同步模块并没有优先级的区分,导致它们在争夺资源时浪费了大量的时间。同时,共识模块和同步模块中还有很多重复的操作,也浪费了时间。因此,应该将共识模块和同步模块的执行流程一并考虑,优化流程,提高效率。

在经过详细分析和缜密验证后,FISCO BCOS将共识模块和同步模块流程进行了优化。优化基于以下思想:

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

 

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

问题1:

工作阻塞

共识模块与同步模块都是从网络模块中获取消息包,再根据相应消息包进行下一步操作。但是,由于网络回调线程数量的限制,同步模块在处理消息包时,占用了网络的回调线程,导致共识模块无法及时处理其它节点发来的共识消息,共识流程被阻塞。

5a6c24bc991d29ac4ef9f8af5bbf89ae492.jpg

如何解决?

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

基于共识模块先行的思想,应让共识模块更及时地收到共识消息,不能让同步模块占用网络回调线程太久。因此,同步模块在拿到消息时,不是直接在回调线程中对交易进行解码和验签,而是将同步消息包缓存起来,用另外一个线程“私下”慢慢处理。这样一来,同步消息的处理不会长时间占用网络回调线程,能让共识消息响应得更快。

34abb55f094c3352797c91534ff718ca788.jpg

问题2:

编解码冗余

同步模块收到同步消息中的交易,是经过编码的,同步模块需将其解码成节点代码中的数据结构,再存入交易池中。共识模块打包区块时,把交易从交易池中取出,将交易进行编码,打包成区块,再将区块发送出去。在这个过程中,交易先被解码,又被编码,操作存在冗余。

cd72d708a288fadb62d53193bb9c27745f5.jpg

如何解决?

——交易编码缓存

共识优先级高于同步,应尽量减少共识模块中不必要的操作。因此,在同步模块存交易时,一并将交易的编码存入交易池。共识模块取交易时,直接从交易池中拿出编码好的交易,免去了编码操作。

0c4411b5b5c6a0b9a4c0637005f586ab5fa.jpg

问题3:

重复验签

同步模块在收到交易后,需对交易的签名进行验证(简称“验签”),共识模块在收到区块后,也需要对区块中的交易进行验签。同步模块和共识模块所验签的交易,有很大概率是重复的。验签是一个非常耗时的操作,每进行一次额外的验签,都会消耗大量的时间。

2bff1560e2fd7a44e2e9cf65008669d9cab.jpg

如何解决?

——验签去重

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

0da8a6fe3dc1065b9400b8346b618ae75fc.jpg

解决方案可否更优?

——尽量让同步验签,减少共识模块验签的次数

仍然是共识模块优先的思想,尽量减少共识模块验签的操作。因此,同步模块必须比共识模块跑得快,在共识模块处理一笔交易前,同步模块先拿到交易,优先对交易验签。

1ca5564dee4ca6840b972f678c5f0d5d228.jpg

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

在一个打包节点拿到交易时,其它节点的同步模块也收到了相应的交易。在其它节点收到打包节点发过去的区块时,区块中所包含的交易早已被同步模块验签后写入交易池中。同时,为了让同步模块在相同操作的处理速度上不低于共识模块,同步模块的交易编解码,也采用了和共识模块一样的“并行编解码”和“交易编码缓存”。

 

结果如何?

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

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

 


 

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

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://my.oschina.net/u/4119053/blog/3045425

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26270.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卓别林论Scrum价值观:当我真正开始爱自己

As I began to love myself 当我真正开始爱自己, I found that anguish and emotional suffering are only warning signs that I was living againstmy own truth. 我才认识到,所有的痛苦和情感的折磨,都只是提醒我:我的生活违背…

当我开始爱自己——卓别林

当我真正开始爱自己, 我才认识到,所有的痛苦和情感的折磨, 都只是提醒我:活着,不要违背自己的本心。 今天我明白了,这叫做 『真实』。 当我真正开始爱自己, 我才懂得,把自己的…

前端每日挑战の纯CSS画卓别林

前端每日挑战の纯CSS画卓别林 内容摘要内容学习代码 内容摘要 伤心啊,写了好几天博客没人看~不过没关系,写博客的主要目的还是为了技术积累。在segmentFault上看到有前端每日专栏,觉得不错,正好css基础还不够巩固决定跟着该专栏每…

程序员与卓别林

时代变迁,许多电影已经过时了,被人们遗忘了,然而,总有几部电影,还留着人们的记忆中。因为人们认为,它们具有不可磨灭的精神价值。这些电影,就是我们常说的经典电影。《摩登时代》,就…

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

作者:石翔|FISCO BCOS 核心开发者 共识与同步的流程优化,是FISCO BCOS性能优化迈开的第一步。仅依靠这一流程优化,就给系统TPS带来可观的1.75倍提升。但这不是目的,其目的在于确定了共识的主导地位,排除了…

脏话越多,代码越好!

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇 作者丨程序员月亮 来源丨了不起的程序员(ID:great_developer) 你好呀,我是月亮,一个90后的老程序员啦~ 平…

基于langchain 的文档问答 最佳实践(附源码)

文档问答的原理 文档读取并切割,用句向量 向量化,存入向量数据库问题向量化,在向量数据库中进行相似性检索,并存出top K把问题和top K 答案组成 prompt 并发给大模型,等大模型答案 这里面涉及到的技术点有&#xff1a…

chatgpt赋能python:Python为什么闪退?

Python为什么闪退? Python作为一种高级编程语言,已经赢得了世界各地许多开发者的青睐。但是,有时候Python会因为各种原因而突然闪退,给开发者带来极大的困扰。那么,Python为什么会闪退呢? 1. 内存泄漏 内…

Trexquant | 量化多岗位招聘(全职+实习)

量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W关注者。 具体投递方式 投递邮箱 tqchina_resumetrexquant.com 简历命名 岗位-姓名…

京东各大城市内推岗位(2021.2.7更)

北京: 上海: 广东: 四川: 重庆: 暂无 杭州: 暂无 陕西: 湖北: 湖南: 暂无 岗位每周更新一次 因为内推系统只能以省份维度查看,想了解具体城市和岗…

北京内推 | 京东营销与商业化中心招聘NLP算法工程师/实习生

合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 京东 京东营销与商业化中心(原商提广告部)成立于2014年初&#xff0…

【CSDN雇主招聘】深信服科技带着高薪岗位JD和公司周边来啦

为了帮助企业更好的应对用人难的挑战,CSDN面向所有企业全新升级了CSDN2022雇主品牌计划,在企业发展、吸引人才、连接人才、宣传公司多个维度提供专属的支持。 ————本次为深信服科技专场———— 直播主题:《CSDN雇主品牌-深信服招聘专场…

【名企招聘】4月20日19点,Thoughtworks专场招聘,众多岗位JD解读,总有适合你的岗位~

为了帮助企业更好的应对用人难的挑战,CSDN面向所有企业全新升级了CSDN2022雇主品牌计划,在企业发展、吸引人才、连接人才、宣传公司多个维度提供专属的支持。 ————本次为Thoughtworks专场———— 直播主题:《CSDN雇主品牌-Thoughtwork…

WhatsApp 群组营销分析

一、WhatsApp基本介绍。 1、创建特点。 whatsapp是一款国际应用,他允许用户自由创建群组,拉人进群。用户可以设置群组隐私来防止陌生人的广告骚扰。 2、成员分类。 群组的人员上限为257。成员分为三类群主、管理员和普通成员。三者的权利依次减小。群…

邮件营销有效吗?分享几个实用的电子邮件营销策略和技巧!

(一)什么是电子邮件营销,它从什么时候开始的? 1971 年,Ray Tomlinson根据来源发送了世界上第一封电子邮件,标志着现代通信时代的开始。这条信息没什么特别的,一串数字和字母,看起来…

element日历(Calendar)排班

修改展示 父组件内容 <template><!--排班管理--><div class"dutySchedule"><div class"dutySchedule-calendar"><el-calendar v-model"priceTime"><template slot"dateCell" slot-scope"{d…

Clickhouse 生成日历表

运行环境&#xff1a; SELECT version()Query id: 90d74a1e-3ce1-42b4-8b66-bd09802310c4┌─version()─┐ │ 20.12.3.3 │ └───────────┘1 rows in set. Elapsed: 0.002 sec.clickhouse的 date和datetime的时间范围目前只支持 [1970-01-01 00:00:00, 2105-12-…

邮件营销EDM(Email Direct Marketing) 运营笔记

我是2018年毕业后接触邮件营销&#xff0c;国内和国外的邮件营销都接触过。从最初和公司爬虫团队合作扩张性开发客户到现在的客户精细化运营&#xff0c;期间遇到过邮件营销各种各样的问题。好像发mass mail 被投诉垃圾邮件平台被封&#xff0c;送达打开率不正常&#xff0c;邮…

Tips系列之飞书日历

最近收到很多小伙伴的问题,咨询飞书日历如何使用,今天就给大家呈上几个小Tips,让你更全面的了解飞书日历! 👉免费使用​ 飞书官网 1、订阅日历 你可以订阅同事的日历,查看对方的忙闲状态,省去反复沟通的麻烦,快速找到空闲时间并邀约会议。 如何订阅日历方法一:在日…

使用日历丰富产品的用户体验

前言 经过一段时间的梳理和遴选&#xff0c;我挑选出了Android知识图谱中重要的部分&#xff0c;制作了一张脑图。读者朋友们可按照脑图查漏补缺了&#xff0c; 图片尺寸较大&#xff0c;仅附链接 。 当然&#xff0c;这是我按照自己的判断、结合参考其他博主的观点进行的挑选…