一种广播消息的方法及装置
技术领域
本申请涉及区块链技术领域,尤其涉及一种广播消息的方法及装置。
背景技术
在区块链技术领域中,负责对业务进行共识验证的区块链节点称为共识节点。在区块链全球化的趋势下,各共识节点常常分布在世界各地。
每个共识节点在受理业务、共识验证等阶段往往需要向其他共识节点广播消息(如业务消息、共识消息等)。由于全球化的异构网络会导致消息传输过程的不稳定,如中国网络与美国网络是异构网络,位于美国网络的共识节点可能接收不到来自中国网络中的共识节点广播的消息,因此为了保证每个其他共识节点接收到消息的成功率较高,广播消息的共识节点通常会针对每个其他共识节点,创建一个线程,并通过该线程执行向该其他共识节点发送消息的任务。
具体而言,广播消息的共识节点通过该线程向该其他共识节点发送消息后,会等待接收该其他共识节点返回的通知(声明已经接收到消息),若在规定时间内没有通过该线程接收到通知,则会通过该线程再次向该共识节点发送消息,直至接收到通知,或在已经发送过多次消息的前提下,仍未通过该线程接收到通知,该线程才会被撤销。这样的话,可以保证该其他共识节点接收消息的成功率较高。
但是,实际上广播消息的共识节点通过其创建的线程执行向其他共识节点发送消息的任务时,往往需要重复多次发送消息,耗费广播消息的共识节点大量的运算资源,这就会给广播消息的共识节点造成过大的负担。
发明内容
本申请实施例提供一种广播消息的方法及装置,以解决现有的广播消息的方法会给广播消息的共识节点造成过大负担的问题。
为解决上述技术问题,本申请实施例是这样实现的:
本申请实施例提供的一种广播消息的方法,包括:
共识节点获取第一广播消息;
针对所述共识节点对应的消息处理设备创建第一线程,并通过所述第一线程向所述消息处理设备发送所述第一广播消息,以使所述消息处理设备向其他共识节点对应的消息处理设备发送所述第一广播消息;
撤销所述第一线程。
本申请实施例提供的另一种广播消息的方法,包括:
消息处理设备接收所述消息处理设备对应的共识节点发送的第一广播消息;
针对每个其他共识节点对应的消息处理设备创建第二线程,并通过该第二线程向该其他共识节点对应的消息处理设备发送所述第一广播消息;
当确定该其他共识节点对应的消息处理设备接收到所述第一广播消息时,撤销该第二线程。
本申请实施例提供的一种广播消息的装置,包括:
获取模块,获取第一广播消息;
发送模块,针对所述装置对应的消息处理设备创建第一线程,并通过所述第一线程向所述消息处理设备发送所述第一广播消息,以使所述消息处理设备向其他共识节点对应的消息处理设备发送所述第一广播消息;
撤销模块,撤销所述第一线程。
本申请实施例提供的另一种广播消息的装置,包括:
第一接收模块,接收所述装置对应的共识节点发送的第一广播消息;
发送模块,针对每个其他共识节点对应的消息处理设备创建第二线程,并通过该第二线程向该其他共识节点对应的消息处理设备发送所述第一广播消息;
撤销模块,当确定该其他共识节点对应的消息处理设备接收到所述第一广播消息时,撤销该第二线程。
由以上本申请实施例提供的技术方案可见,在本申请实施例中,为每个共识节点都分配一个消息处理设备,将各共识节点之间广播消息的工作交由各消息处理设备执行。对于某个共识节点而言,可以由其对应的消息处理设备针对其他共识节点对应的消息处理设备创建线程,来执行广播消息的任务,直至其他共识节点对应的消息处理设备接收到广播的消息。如此一来,执行广播消息任务的线程只会耗费消息处理设备的运算资源,却不会耗费共识节点的资源,从而不会给共识节点造成负担,可以使得共识节点更高效地对业务进行共识验证。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种广播消息的方法流程图;
图2是现有的广播消息方法与本申请提供的广播消息方法的对比示意图;
图3是本申请实施例提供的一种广播消息的装置示意图;
图4是本申请实施例提供的另一种广播消息的装置示意图。
具体实施方式
本申请实施例提供一种广播消息的方法及装置。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1是本申请实施例提供的一种广播消息的方法流程图,包括以下步骤:
S101:共识节点获取第一广播消息。
在本申请实施例中,所述共识节点是区块链网络中参与对业务进行共识验证的区块链节点。在典型的区块链网络中,各区块链节点都可以作为共识节点参与共识验证。而在特殊的区块链网络(如由联盟链子网和公有链子络组成的区块链网络)中,并不是所有区块链节点都可以作为共识节点参与共识验证。
总之,在各共识节点受理业务、共识验证等阶段,共识节点间需要互相广播或发送消息,这就是本申请实施例的应用场景。
其中,受理业务阶段是指某个共识节点接收业务消息,并将业务消息广播给其他共识节点,使得每个共识节点都接收到业务消息,方便后续对业务消息进行共识验证。共识验证阶段是指各共识节点遵循某种共识算法,对验证结果达成共识的阶段,在共识验证阶段,各共识节点间需要互相发送验证消息,以达成共识。
在本申请实施例中,所述第一广播消息可以是上述的业务消息,也可以是上述的验证消息,还可以是某个共识节点向其他共识节点广播或发送的消息。
值得强调的是,本方法的执行主体可以是任一个共识节点,在受理业务阶段,所述共识节点可以接收客户端或非共识节点发送的业务消息,作为获取到的所述第一广播消息;在共识验证阶段,所述共识节点可以在对业务消息进行验证后,生成验证消息,作为获取到的所述第一广播消息。
S102:共识节点针对所述共识节点对应的消息处理设备创建第一线程,并通过所述第一线程向所述消息处理设备发送所述第一广播消息。
S103:共识节点撤销所述第一线程。
在本申请实施例中,所述共识节点可以将所述第一广播消息发送给其对应的消息处理设备,将广播或发送所述第一广播消息的任务完全交由其对应的消息处理设备处理,由所述消息处理设备确保其他共识节点的消息处理设备成功接收到所述第一广播消息。如此一来,所述共识节点无需再耗费运算资源确保每个其他共识节点尽可能地接收到所述第一广播消息。
图2是现有的广播消息方法与本申请提供的广播消息方法的对比示意图。如图2所示,共识节点对应的消息处理设备是独立于共识节点的计算设备。各共识节点间的消息交互,是由各共识节点分别对应的消息处理设备代为执行的。
也就是说,所述共识节点仅需要针对其对应的消息处理设备创建第一线程,在通过所述第一线程发送第一广播消息给其对应的消息处理设备后,就可以撤销所述第一线程,而无需耗费运算资源继续维持所述第一线程。
其中,所述第一线程是共识节点针对其对应的消息处理设备创建的线程,而下文所述的第二线程则是消息处理设备针对其他共识节点对应的消息处理设备创建的线程。
实际上,所述共识节点是采用异步调用技术,创建一个用于发送所述第一广播消息给其对应的消息处理设备的第一线程,待通过所述第一线程发送所述第一广播消息后,所述共识节点不必关心所述消息处理设备是否接收到所述第一广播消息,就可以直接撤销所述第一线程。
值得强调的是,所述共识节点与其对应的消息处理设备一般并不分布于异构网络中,也就是说,所述共识节点与其对应的消息处理设备之间的信息交互是稳定的,消息处理设备一般是能够一次顺利地接收到其对应的共识节点发送的消息的。
进一步地,为了完全确保所述第一广播消息从所述共识节点传输给对应的消息处理设备的过程中不会丢失,可以采用区域专线连接所述共识节点和所述共识节点对应的消息处理设备,从而尽可能降低所述共识节点和其对应的消息处理设备之间可能存在的网络扰动。
此外,所述共识节点除了可以指令其对应的消息处理设备对外广播消息外,还可以利用其对应的消息处理设备接收其他共识节点广播的消息。
具体而言,所述共识节点可以接收所述共识节点对应的消息处理设备发送的第二广播消息,其中,所述第二广播消息是其他共识节点对应的消息处理设备广播的。而所述消息处理设备可以接收其他共识节点对应的消息处理设备广播的第二广播消息,再将所述第二广播消息发送给所述共识节点。
值得强调的是,所述第一广播消息和所述第二广播消息都是共识节点广播的广播消息,所述第一广播消息和所述第二广播消息都可以是上述的业务消息、验证消息等。
S104:消息处理设备针对每个其他共识节点对应的消息处理设备创建第二线程,并通过该第二线程向该其他共识节点对应的消息处理设备发送所述第一广播消息。
S105:消息处理设备当确定该其他共识节点对应的消息处理设备接收到所述第一广播消息时,撤销该第二线程。
在现有技术中,对外广播消息的工作是共识节点自己负责的,共识节点会创建占用自身运算资源的线程,并通过线程去尽可能地确保每个其他共识节点接收到其广播的消息。
而在本申请实施例中,所述共识节点仅需要将所述第一广播消息发送给其对应的消息处理设备即可。所述消息处理设备作为一个独立于所述共识节点的计算设备,可以独立负责对外广播消息。这样就解放了所述共识节点,使得所述共识节点可以集中有限的运算资源更高效地执行共识验证工作。
在本申请实施例中,所述消息处理设备会针对每个其他共识节点对应的消息处理设备创建第二线程,通过该第二线程,耗费所述消息处理设备自身的运算资源来等待确认该共识节点成功接收到所述第一广播消息。
具体而言,所述消息处理设备可以通过针对每个其他共识节点创建的第二线程,向各其他共识节点分别对应的消息处理设备发送所述第一广播消息;统计接收到的响应信号的数量,其中,响应信号是其他共识节点对应的消息处理设备在接收到所述第一广播消息后返回的;若统计的数量小于特定值,则通过各第二线程重新发送所述第一广播消息,直至统计的接收到的响应信号的数量不小于所述特定值为止,所述特定值为大于0的整数。所述特定值是可配置的,特定值越高,能够确保接收到所述第一广播消息的共识节点的数量就越多,所述共识节点广播消息的成功率就越高。本申请对特定值具体是多少不做限制。
进一步地,若统计的数量小于特定值,则所述消息处理设备可以通过未返回响应信号的消息处理设备对应的第二线程,继续向未返回响应信号的消息处理设备发送所述第一广播消息,直至历次统计的接收到的响应信号的总数量不小于所述特定值为止;也可以通过各第二线程再次向所有其他消息处理设备发送所述第一广播消息,直至下一次统计的接收到的响应信号的数量不小于所述特定值为止。
进一步地,当所述消息处理设备通过第二线程向某个其他消息处理设备发送所述第一广播消息达到指定次数后时,若通过该第二线程仍未接收到该其他消息处理设备返回的响应信号,则可以暂停向该消息处理设备发送所述第一广播消息;待规定期限后,继续向该消息处理设备发送所述第一广播消息。
举例来说,所述消息处理设备可以先向其他消息处理设备广播一次所述第一广播消息,然后确定未返回响应信号的其他消息处理设备(也就是未接收到所述第一广播消息的消息处理设备),再向未接收到所述第一广播消息的消息处理设备发送一次所述第一广播消息,如是反复。在重复向同一个其他消息处理设备发送所述第一广播消息达到3次后,说明存在暂时无法解决的传输问题(可能是未接收成功的消息处理设备宕机或者网络出现大的故障),于是先暂停向该其他消息处理设备发送所述第一广播消息,等待较长时间后(传输问题可能已经解决了),再继续向该其他消息处理设备发送所述第一广播消息。
在本申请实施例中,消息处理设备会在确保所述第一广播消息被各其他共识节点对应的消息处理设备接收到之后,才撤销所述第二线程。值得强调的是,消息处理设备可以采用各种消息投递策略,如延时投递、补偿投递(由未接收到消息的主体主动要求补偿该消息)等,来确保所述第一广播消息被各其他共识节点对应的消息处理设备接收到,本申请对消息处理设备采取的消息投递策略不做具体限制。
由上可知,所述消息处理设备实际上是采用同步调用技术,针对每个其他共识节点对应的消息处理设备,创建一个用于向该消息处理设备发送所述第一广播消息的第二线程,通过该第二线程发送第一广播消息后,仍通过该第二线程继续等待确认该消息处理设备接收到了所述第一广播消息,若该消息处理设备未接收到,则重新通过该第二线程向该消息处理设备发送第一广播消息,直至该消息处理设备确实接收到了所述第一广播消息或触发了停止发送的条件,该第二线程才会被撤销。
S106:其他共识节点对应的消息处理设备,将所述第一广播消息发送给相应的其他共识节点。
如前所述,其他共识节点可以利用其对应的消息处理设备接收其他共识节点广播的消息。
通过图1所示的广播消息的方法,为每个共识节点都分配一个消息处理设备,将各共识节点之间广播消息的工作交由各消息处理设备执行。对于某个共识节点而言,可以由其对应的消息处理设备针对各其他共识节点对应的消息处理设备创建线程,来执行广播消息的任务,直至其他共识节点对应的消息处理设备接收到广播的消息。如此一来,执行广播消息任务的线程只会耗费消息处理设备的运算资源,却不会耗费共识节点的资源,从而不会给共识节点造成负担,可以使得共识节点更高效地对业务进行共识验证。
基于图1所示的广播消息的方法,本申请实施例还对应提供了一种广播消息的装置,如图3所示,包括:
获取模块301,获取第一广播消息;
发送模块302,针对所述装置对应的消息处理设备创建第一线程,并通过所述第一线程向所述消息处理设备发送所述第一广播消息,以使所述消息处理设备向其他共识节点对应的消息处理设备发送所述第一广播消息;
撤销模块303,撤销所述第一线程。
所述装置与所述消息处理设备通过区域专线连接。
所述装置还包括:接收模块,接收所述装置对应的消息处理设备发送的第二广播消息,所述第二广播消息是其他共识节点对应的消息处理设备广播的。
基于图1所示的广播消息的方法,本申请实施例还对应提供了另一种广播消息的装置,如图4所示,包括:
第一接收模块401,接收所述装置对应的共识节点发送的第一广播消息;
发送模块402,针对每个其他共识节点对应的消息处理设备创建第二线程,并通过该第二线程向该其他共识节点对应的消息处理设备发送所述第一广播消息;
撤销模块403,当确定该其他共识节点对应的消息处理设备接收到所述第一广播消息时,撤销该第二线程。
所述撤销模块403,通过各第二线程统计接收到的响应信号的数量,其中,响应信号是其他共识节点对应的消息处理设备在接收到所述第一广播消息后返回的;若统计的数量小于特定值,则通过各第二线程重新发送所述第一广播消息,直至统计的接收到的响应信号的数量不小于所述特定值为止,所述特定值为大于0的整数。
所述装置还包括:第二接收模块,接收其他共识节点对应的消息处理设备广播的第二广播消息;将所述第二广播消息发送给所述共识节点。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带式磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。