1.本说明书涉及计算机软件技术领域,尤其涉及一种基于流式处理的区块链共识算法实现方法、装置、电子设备和存储介质。
背景技术:2.共识算法是为了实现分布式一致性协议而产生的一系列流程与规则,常用的共识算法包括pow(proof of work)、pos(proof of stake)等传统的区块链共识算法,也包括tendermint共识引擎框架。共识模块作为区块链系统的核心模块,在区块链系统中起至关重要的作用。但是,由于共识算法的实现复杂度较大的客观存在,其代码量的更新迭代;同时,由于共识模块的运行期间的数据存放在其运行环境的磁盘中,其性能会受限于磁盘io。如何将共识算法实现的过程进行合理的框架设计,增强共识模块的灵活性、通用性,提高共识计算的效率和可扩展性,是需要亟待解决的技术问题。
技术实现要素:3.本说明书实施例的目的是针对上述问题,提供一种基于流式处理的区块链共识算法实现方法、装置、电子设备和存储介质。
4.为解决上述技术问题,本说明书实施例是这样实现的:
5.第一方面,提出了一种基于流式处理的区块链共识算法实现方法,用于执行区块链共识算法的共识模块包括外部事件、共识引擎、中间件和数据源;对应于实现共识算法,包括:
6.接收所述外部事件,以及根据消息类型将所述外部事件分发至所述共识引擎,所述共识引擎包括对应于所述消息类型的处理单元;
7.所述共识引擎实时读取由所述数据源提供的最新数据,以及基于所述最新数据和对应所述消息类型,将所述外部事件提交至所述共识引擎相应所述处理单元进行计算;
8.调用所述中间件将所述处理数据实时写入所述数据源。
9.第二方面,提出了一种基于流式处理的区块链共识算法实现装置,用于执行区块链共识算法的共识模块包括外部事件、共识引擎、中间件和数据源;对应于实现共识算法,包括:
10.外部事件接收模块,用于接收所述外部事件,以及根据消息类型将所述外部事件分发至所述共识引擎,所述共识引擎包括对应于所述消息类型的处理单元;
11.共识引擎计算模块,用于所述共识引擎读取由所述数据源提供的最新数据,以及基于所述最新数据和对应所述消息类型,将所述外部事件提交至所述共识引擎相应所述处理单元进行计算;
12.数据更新模块,用于调用所述中间件将所述处理数据实时写入所述数据源。
13.第三方面,提出了一种电子设备,包括:处理器;以及
14.被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处
理器执行第一方面所述的方法。
15.第四方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行第一方面所述的方法。
16.本说明书可以达到至少以下技术效果:
17.本发明方案引入流式处理,将共识模块的实现拆分为外部事件、共识引擎、中间件、数据源等相应功能模块,共识引擎部分只需做部分适配即可实现共识引擎替换,相应的数据读写则交由中间件与数据源处理,具有通用性强,扩展性强,高性能、可维护性强等特点。
附图说明
18.为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
19.图1为本说明书实施例提供的基于流式处理的区块链共识算法实现方法框架图。
20.图2为本说明书实施例提供的基于流式处理的区块链共识算法实现方法示意图之一。
21.图3为本说明书实施例提供的基于流式处理的区块链共识算法实现方法示意图之二。
22.图4为本说明书实施例提供的基于流式处理的区块链共识算法实现方法示意图之三。
23.图5为本说明书实施例提供的基于流式处理的区块链共识算法实现装置示意图之一。
24.图6为本说明书实施例提供的基于流式处理的区块链共识算法实现装置示意图之二。
25.图7为本说明书的一个实施例提供的电子设备的结构示意图。
具体实施方式
26.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
27.下面通过具体的实例对本说明书所涉及的一种基于流式处理的区块链共识算法实现方案进行详述。
28.关键术语
29.区块链共识:在区块链中,节点之间通过数据通信进行沟通,只要符合某一种区块链约定的数据格式,任何一个节点都可以加入到这个区块链系统中。也就是说,每个节点可
以使用任意编写的程序来攻击区块链获取利益。区块链系统为了确保运行安全,就必须让出块节点尽可能的分散,因为在这种情况下,某个节点如果记了假账,会被其的记账节点推翻,因此,简单地看待区块链共识机制的本质就是一种让出块的节点尽可能随机和分散的方法。常用的区块链共识机制包括:(1)pow(工作量证明);(2)pos(权益证明)(3)dpos(委任权益证明);(4)pbft(实用拜占庭容错算法);(5)pol(验证池)等;此外,还有pow+pos和pop机制。
30.流式处理:是对无界数据集连续不断的处理,聚合,分析的过程。流式处理假设数据的潜在价值是数据的新鲜度,需要尽快处理得到结果。在这种方式下,数据以流的方式到达。在数据连续到达的过程中,由于流携带了大量数据,只有小部分的流数据被保存在有限的内存中。流处理方式用于在线应用,通常工作在秒或毫秒级别。目前主流的流处理组件包括:strom、spark streaming、kafka、flume、flink、s3、local file等。流式处理以其能快速、高效处理海量数据能力逐渐成为大数据处理技术主流工具,下面是一些常见应用场景:算法交易、股市监控;入侵、监视及欺诈检测;智能电网;地理围栏;车辆及野生动物跟踪;交通监控。一般来说,流处理对我们检测问题并有效改进结果时效性的场景非常有用。此外,流处理在数据驱动的公司中扮演着关键角色。
31.tendermint:是tendermint公司的一个开源项目,是一个pbft算法的变体,tendermint和pbft的关系类似于raft和paxos的关系,tendermint是pbft的简化版。tendermint算法先随机选出一些节点作为validators验证节点,然后选择其中一个validator作为proposer节点。proposer节点开始监听并收集全网的所有交易,几分钟后,组装一个新块,并向全网广播,这个就是proposal block。全网所有validator节点收到这个proposal block后,开始读取这个block里的所有交易,一一进行验证,如果没有问题,就发出一条pre-vote投票消息,表示同意这个block,投一个肯定票,如果发现block里有非法交易,则投一个反对票,这些投票消息会被广播到所有validator节点,所以每个validator节点既会发出一个投票消息,又会收集别人的投票消息,当发现收集到的同意投票数量超过2/3时,就发出一个pre-commit投票信息,这是第二阶段的投票了,这是每个节点也在监听并收集pre-commit的投票消息。当一个validator节点收集到的pre-commit同意票数超过2/3时,说明这个block是得到了大多数人同意的,可以放心把这个block写入本地的区块链,追加到末尾,即完成commit。同时区块高度增1,proposer节点索引也增1,进入下一轮开始提议新块。
32.实施例一
33.参照图1所示,为本发明实施例的基于流式处理的区块链共识算法实现方法框架图。如图1所示,本发明方案的整体流程可以描述为:(1)外部事件驱动,即通过循环检测外部事件,并将相应事件分发至共识引擎对应的方法进行决策;(2)事件决策,即共识引擎根据实时更新的数据源作为状态变量进行判断,并通过消息中间件写入数据源,驱动数据源实时更新;(3)返回决策结果,即将决策结果返回相应的客户端。需要说明的是,这里所述外部事件是指共识模块中来自于外部的读写数据事件,其驱动共识模块的运行;所述中间件是流式处理中使用的中间件,例如kafka,s3,local file等;所述数据源是指在数据流式处理中的数据源,用于存储区块链共识模块数据,并提供读写能力;所述共识引擎是指根据共识算法实现,收发数据,处理数据的引擎,但不包含数据的存储。同时,数据源处理还需要用
到结构化查询语言;以及共识算法中负责处理外部事件的共识节点leader。
34.为此,如图2所示是本发明的基于流式处理的区块链共识算法实现方法。用于执行区块链共识算法的共识模块包括外部事件、共识引擎、中间件和数据源;对应于实现共识算法,包括:
35.步骤101:接收所述外部事件,以及根据消息类型将所述外部事件分发至所述共识引擎,所述共识引擎包括对应于所述消息类型的处理单元。
36.可选地,所述区块链共识算法至少包括tendermint共识算法。本实施例也将以tendermint共识算法为例进行说明,但应当理解,凡是能够使用流式处理方式实现的区块链共识算法,都在本发明的保护范围内。
37.可选地,所述消息类型至少包括noop、proposal、prevote、precommit、newview、leaderprevote或leaderprecommit中的一种。外部事件是对事件处理消息的抽象概括,但应当理解,凡是来自共识模块外部的读写数据事件,能够驱动共识模块运行的消息类型,都在本发明的保护范围内。
38.步骤102:所述共识引擎实时读取由所述数据源提供的最新数据,以及基于所述最新数据和对应所述消息类型,将所述外部事件提交至所述共识引擎相应所述处理单元进行计算。
39.可选地,如图3所示,根据所述消息类型将所述外部事件分发至所述共识引擎的具体过程包括:
40.步骤301:根据所述数据源提供的所述最新数据,更新所述共识模块的参数配置。
41.步骤302:根据所述外部事件的所述消息类型,检查块的有效性。
42.步骤103:调用所述中间件将所述处理数据实时写入所述数据源。
43.本发明一个实施例选用tendermint共识算法,以local file为中间件,以materialize为数据源作流式处理,使用sql进行数据源的读取。首先,针对来自于网络的消息定义了如上的proto文件,来接受外部事件,并交由共识引擎根据消息类型做进一步处理,技术细节如下。
[0044][0045]
[0046]
其次,针对数据源定义如trait,对数据源进行生命周期管理,并以local file方式提供write_json方法,实现数据写入数据源,再利用数据源实时更新数据的能力,提供实时最新数据,技术细节如下。
[0047][0048]
若采用其他共识算法实现共识的功能,需按照proto文件对来自于网络的事件进行处理,并按照trait实现数据的读写与数据源生命周期管理。
[0049]
如图4所示,在另一个实施例提供的一种基于流式处理的区块链共识算法实现方法,还包括:
[0050]
步骤104:当节点共识投票数量超过验证节点总数的设定比例,更新所述节点状态,以及广播至区块链节点后调用所述中间件将所述节点状态写入所述数据源。
[0051]
对于不同的消息类型,相应的处理过程也可具体设计。本发明一个实施例以proposal类型为例,其具体工作的流式处理过程为:将收到的消息的字节数组反序列化为程序可读的结构体,通过该结构体的参数以及sql查询数据源是否收到过该消息;通过sql查询数据源确定该消息的发送者是否为leader,该消息对应的区块是否存在;若前两步校验通过,将该消息通过中间件,写入数据源,数据会实时更新,以便其他查询使用;通过sql查询数据源确定区块状态是否正常,并通过中间件写入数据源;将区块与区块状态对应关系通过中间件写入数据源;若投票数量超过验证节点总数的2/3,清理数据,进入下一步,否则结束处理;广播消息,改变当前节点状态,并通过中间件写入数据源;返回处理结果。
[0052]
实施例二
[0053]
图5为本说明书的一个实施例提供的一种基于流式处理的区块链共识算法实现装置500的结构示意图。请参考图5,在一种实施方式中基于流式处理的区块链共识算法实现装置,用于执行区块链共识算法的共识模块包括外部事件、共识引擎、中间件和数据源;对应于实现共识算法,包括:
[0054]
外部事件接收模块501,用于接收所述外部事件,以及根据消息类型将所述外部事件分发至所述共识引擎,所述共识引擎包括对应于所述消息类型的处理单元;
[0055]
共识引擎计算模块502,用于所述共识引擎读取由所述数据源提供的最新数据,以及基于所述最新数据和对应所述消息类型,将所述外部事件提交至所述共识引擎相应所述
处理单元进行计算;
[0056]
数据更新模块503,用于调用所述中间件将所述处理数据实时写入所述数据源。
[0057]
如图6所示,在另一个实施例提供的一种基于流式处理的区块链共识算法实现装置500,还包括:
[0058]
共识反馈模块504,用于当节点共识投票数量超过验证节点总数的设定比例,更新所述节点状态,以及广播至区块链节点后调用所述中间件将所述节点状态写入所述数据源。
[0059]
应理解,本说明书实施例的基于流式处理的区块链共识算法实现装置还可执行图1至图4中基于流式处理的区块链共识算法实现装置(或设备)执行的方法,并实现基于流式处理的区块链共识算法实现装置(或设备)在图1至图4所示实例的功能,在此不再赘述。
[0060]
实施例三
[0061]
图7是本说明书的一个实施例电子设备的结构示意图。请参考图7,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(random-access memory,ram),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
[0062]
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是isa(industry standard architecture,工业标准体系结构)总线、pci(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0063]
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
[0064]
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成共享资源访问控制装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
[0065]
用于执行区块链共识算法的共识模块包括外部事件、共识引擎、中间件和数据源;对应于实现共识算法,包括:
[0066]
接收所述外部事件,以及根据消息类型将所述外部事件分发至所述共识引擎,所述共识引擎包括对应于所述消息类型的处理单元;
[0067]
所述共识引擎实时读取由所述数据源提供的最新数据,以及基于所述最新数据和对应所述消息类型,将所述外部事件提交至所述共识引擎相应所述处理单元进行计算;
[0068]
调用所述中间件将所述处理数据实时写入所述数据源。
[0069]
上述如本说明书图1至图4所示实施例揭示的一种基于流式处理的区块链共识算法实现方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字
信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
[0070]
当然,除了软件实现方式之外,本说明书实施例的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
[0071]
实施例四
[0072]
本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1至图4所示实施例的方法,并具体用于执行以下方法:
[0073]
用于执行区块链共识算法的共识模块包括外部事件、共识引擎、中间件和数据源;对应于实现共识算法,包括:
[0074]
接收所述外部事件,以及根据消息类型将所述外部事件分发至所述共识引擎,所述共识引擎包括对应于所述消息类型的处理单元;
[0075]
所述共识引擎实时读取由所述数据源提供的最新数据,以及基于所述最新数据和对应所述消息类型,将所述外部事件提交至所述共识引擎相应所述处理单元进行计算;
[0076]
调用所述中间件将所述处理数据实时写入所述数据源。
[0077]
总之,以上所述仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书的保护范围之内。
[0078]
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
[0079]
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算
机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0080]
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0081]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
技术特征:1.一种基于流式处理的区块链共识算法实现方法,其特征在于,用于执行区块链共识算法的共识模块包括外部事件、共识引擎、中间件和数据源;对应于实现共识算法,包括:接收所述外部事件,以及根据消息类型将所述外部事件分发至所述共识引擎,所述共识引擎包括对应于所述消息类型的处理单元;所述共识引擎实时读取由所述数据源提供的最新数据,以及基于所述最新数据和对应所述消息类型,将所述外部事件提交至所述共识引擎相应所述处理单元进行计算;调用所述中间件将所述处理数据实时写入所述数据源。2.根据权利要求1所述的方法,其特征在于,所述区块链共识算法至少包括tendermint共识算法。3.根据权利要求1所述的方法,其特征在于,所述消息类型至少包括noop、proposal、prevote、precommit、newview、leaderprevote或leaderprecommit中的一种。4.根据权利要求1所述的方法,其特征在于,根据所述消息类型将所述外部事件分发至所述共识引擎包括:根据所述数据源提供的所述最新数据,更新所述共识模块的参数配置;以及,根据所述外部事件的所述消息类型,检查块的有效性。5.根据权利要求1所述的方法,其特征在于,还包括当节点共识投票数量超过验证节点总数的设定比例,更新所述节点状态,以及广播至区块链节点后调用所述中间件将所述节点状态写入所述数据源。6.一种基于流式处理的区块链共识算法实现装置,其特征在于,用于执行区块链共识算法的共识模块包括外部事件、共识引擎、中间件和数据源;对应于实现共识算法,包括:外部事件接收模块,用于接收所述外部事件,以及根据消息类型将所述外部事件分发至所述共识引擎,所述共识引擎包括对应于所述消息类型的处理单元;共识引擎计算模块,用于所述共识引擎读取由所述数据源提供的最新数据,以及基于所述最新数据和对应所述消息类型,将所述外部事件提交至所述共识引擎相应所述处理单元进行计算;数据更新模块,用于调用所述中间件将所述处理数据实时写入所述数据源。7.根据权利要求6所述的装置,其特征在于,所述区块链共识算法至少包括tendermint共识算法。8.根据权利要求6所述的装置,其特征在于,所述消息类型至少包括noop、proposal、prevote、precommit、newview、leaderprevote或leaderprecommit中的一种。9.根据权利要求6所述的装置,其特征在于,根据所述消息类型将所述外部事件分发至所述共识引擎包括:根据所述数据源提供的所述最新数据,更新所述共识模块的参数配置;以及根据所述外部事件的所述消息类型检查块的有效性。10.根据权利要求6所述的装置,其特征在于,还包括共识反馈模块,用于当节点共识投票数量超过验证节点总数的设定比例,更新所述节点状态,以及广播至区块链节点后调用所述中间件将所述节点状态写入所述数据源。11.一种电子设备,其特征在于,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行权利要求1至5任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行权利要求1至5任一项所述的方法。
技术总结本说明书实施例公开了一种基于流式处理的区块链共识算法实现方法和装置,其中方法,用于执行区块链共识算法的共识模块包括外部事件、共识引擎、中间件和数据源;对应于实现共识算法,包括:接收所述外部事件,以及根据消息类型将所述外部事件分发至所述共识引擎,所述共识引擎包括对应于所述消息类型的处理单元;所述共识引擎实时读取由所述数据源提供的最新数据,以及基于所述最新数据和对应所述消息类型,将所述外部事件提交至所述共识引擎相应所述处理单元进行计算;调用所述中间件将所述处理数据实时写入所述数据源。本发明引入流式处理,将共识模块的实现拆分为相应功能模块,具有通用性强,扩展性强,高性能、可维护性强等特点。特点。特点。
技术研发人员:王晓亮 宁志伟
受保护的技术使用者:北京溪塔科技有限公司
技术研发日:2022.06.07
技术公布日:2022/11/1