区块链共识的方法、装置、设备及存储介质
本申请要求于2019年5月6日提交中国专利局、申请号为201910371485.8、发明名称为“电子装置、区块链共识的方法及存储介质”的中国专利申请的优先权,其全部内容通过引用结合在申请中。
技术领域
本申请涉及区块链技术领域,尤其涉及区块链共识的方法、装置、设备及存储介质。
背景技术
区块链一般被理解为一个分布式账本,它的本质也是一个分布式的数据库。联盟区块链与普通区块链的区别是可以提供更高效的交易性能,参与节点数也相对较少。一般来说,联盟区块链需要参与机构进行多机房异地部署。目前,在联盟链的部署场景中,如果发生机房毁坏或宕机的情况,则该机房的交易数据无法共识以同步给异地机房,发明人意识到这样容易导致交易数据的丢失,造成链的分叉,联盟区块链交易无法正常执行。
发明内容
本申请的目的在于提供一种区块链共识的方法、装置、设备及存储介质,旨在实现对联盟链多机房异地部署的灾备补救。
为实现上述目的,本申请第一方面提供了一种区块链共识的方法,包括:S1,当集群中的主共识节点在共识完成区块,分别向其他集群中的主共识节点发送是否共识完成该区块的确认请求后,若在预定的第一时间内未接收到基于该确认请求对应的确认消息,则向未接收到确认消息对应的集群的主共识节点发送心跳请求,其中,将共识节点按照机房进行划分,将同一机房的共识节点划分为同一集群,每一集群配置一个主共识节点及至少一个备用共识节点;S2,若在预定的第二时间内未接收到该集群基于该心跳请求的心跳响应,则该未进行心跳响应的集群发生机房宕机,启用本集群中的备用共识节点作为发生机房宕机的集群的主共识节点进行共识服务,以对区块进行共识;S3,当接收到发生机房宕机的集群发送的恢复运行的恢复消息后,关闭作为该恢复运行的集群的主共识节点的备用共识节点的共识服务,并控制该备用共识节点与该恢复运行的集群的主共识节点同步增量区块数据。
本申请第二方面提供了一种区块链共识的装置,包括:发送模块,用于当集群中的主共识节点在共识完成区块,分别向其他集群中的主共识节点发送是否共识完成该区块的确认请求后,若在预定的第一时间内未接收到基于该确认请求对应的确认消息,则向未接收到确认消息对应的集群的主共识节点发送心跳请求,其中,将共识节点按照机房进行划分,将同一机房的共识节点划分为同一集群,每一集群配置一个主共识节点及至少一个备用共识节点;启用模块, 用于若在预定的第二时间内未接收到该集群基于该心跳请求的心跳响应,则该未进行心跳响应的集群发生机房宕机,启用本集群中的备用共识节点作为发生机房宕机的集群的主共识节点进行共识服务,以对区块进行共识;共识模块,用于当接收到发生机房宕机的集群发送的恢复运行的恢复消息后,关闭作为该恢复运行的集群的主共识节点的备用共识节点的共识服务,并控制该备用共识节点与该恢复运行的集群的主共识节点同步增量区块数据。
本申请第三方面提供了一种区块链共识的设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互联;所述至少一个处理器调用所述存储器中的所述指令,以使得所述区块链共识的设备执行上述第一方面所述的方法。
本申请的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行上述第一方面所述的方法。
本申请在联盟链多机房异地部署的场景下,将同一机房的共识节点划分为同一集群,每个机房中配备一个主共识节点及至少一个备用共识节点,在机房宕机后无法与其他机房进行共识时,可以启用正常运行的机房中的备用共识节点作为宕机机房的暂时的主共识节点进行共识服务,并在宕机机房恢复运行后,将该暂时的主共识节点的共识服务进行关闭,然后该暂时的主共识节点与恢复运行的机房中的主共识节点同步增量区块数据,通过这种方式,在有机房发生宕机下线情况下,通过其他正常运行的机房代替该宕机机房进行共识服务,并在宕机机房恢复运行后,将期间共识的增量区块数据同步给该宕机机房的主共识节点,使得数据不会丢失,保证数据的完整性,实现对联盟链多机房异地部署的灾备补救。
附图说明
图1为本申请各个实施例一可选的应用环境示意图;
图2是图1中电子装置一实施例的硬件架构的示意图;
图3为图2中处理系统一实施例的程序模块图;
图4为本申请区块链共识的方法一实施例的流程示意图。
具体实施方式
本申请实施例提供了一种区块链共识的方法、装置、设备及存储介质,旨在实现对联盟链多机房异地部署的灾备补救。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例进行描述。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里 描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为便于理解,下面对本申请实施例的具体流程进行描述,参阅图1所示,是本申请的较佳实施例的应用环境示意图。在该实施例中,多机房为异地部署的场景,在该场景下,需要将共识节点按照机房进行划分,将同一机房的共识节点划分为同一集群,每一集群配置一个主共识节点及至少一个备用共识节点。在图1中,每个机房配置了一个主共识节点及两个备共识节点。由于需要将共识节点的数据时刻更新到最新,网络传输会是主要的时间消耗,因此,需要使用专线网络来连接各个机房或者尽量缩短各个机房之间的物理距离。电子装置为主共识节点所在的设备。
所述电子装置是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。所述电子装置可以是计算机、也可以是单个网络服务器、多个网络服务器组成的服务器组或者基于云计算的由大量主机或者网络服务器构成的云,其中云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。
参照图2所示,在本实施例中,电子装置1可包括,但不仅限于,可通过系统总线相互通信连接的存储器11、处理器12、网络接口13,存储器11存储有可在处理器12上运行的处理系统10。需要指出的是,图2仅示出了具有组件11-13的电子装置1,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
其中,存储器11包括内存及至少一种类型的可读存储介质。内存为电子装置1的运行提供缓存;可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等的非易失性存储介质。在一些实施例中,可读存储介质可以是电子装置1的内部存储单元,例如该电子装置1的硬盘;在另一些实施例中,该非易失性存储介质也可以是电子装置1的外部存储设备,例如电子装置1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。本实施例中,存储器11的可读存储介质通常用于存储安装于电子装置1的操作系统和各类应用软件,例如存储本申请一实施例中的处理系统10的程序代码等。此外,存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片,用于运行所述存储器11中存储的程序代码或者处理数据,例如运行处理系统10等。
所述网络接口13可包括标准的无线网络接口、有线网络接口,该网络接口13通常用于在所述电子装置1与其他电子设备之间建立通信连接。
所述处理系统10存储在存储器11中,包括至少一个存储在存储器11中的计算机可读指令,该至少一个计算机可读指令可被处理器器12执行,以实现本申请各实施例的方法;以及,该至少一个计算机可读指令依据其各部分所实现的功能不同,可被划为不同的逻辑模块。
在一实施例中,上述处理系统10被所述处理器12执行时实现如下步骤:
当集群中的主共识节点在共识完成区块,分别向其他集群中的主共识节点发送是否共识完成该区块的确认请求后,若在预定的第一时间内未接收到基于该确认请求对应的确认消息,则向未接收到确认消息对应的集群的主共识节点发送心跳请求,其中,将共识节点按照机房进行划分,将同一机房的共识节点划分为同一集群,每一集群配置一个主共识节点及至少一个备用共识节点;
若在预定的第二时间内未接收到该集群基于该心跳请求的心跳响应,则该未进行心跳响应的集群发生机房宕机,启用本集群中的备用共识节点作为发生机房宕机的集群的主共识节点进行共识服务,以对区块进行共识;
当接收到发生机房宕机的集群发送的恢复运行的恢复消息后,关闭作为该恢复运行的集群的主共识节点的备用共识节点的共识服务,并控制该备用共识节点与该恢复运行的集群的主共识节点同步增量区块数据。
具体原理请参照下述图3关于处理系统10的程序模块图及图4关于该方法的流程图的介绍。
参照图3所示,为图2中处理系统10的程序模块图。所述处理系统10被分割为多个模块,该多个模块被存储于存储器12中,并由处理器13执行,以完成本申请。本申请所称的模块是指能够完成特定功能的一系列计算机程序指令段。
所述处理系统10可以被分割为:发送模块101、启用模块102及共识模块103。
所述发送模块101,用于当集群中的主共识节点在共识完成区块,分别向其他集群中的主共识节点发送是否共识完成该区块的确认请求后,若在预定的第一时间内未接收到基于该确认请求对应的确认消息,则向未接收到确认消息对应的集群的主共识节点发送心跳请求;
其中,将共识节点按照机房进行划分,将同一机房的共识节点划分为同一集群,每一集群配置一个主共识节点及至少一个备用共识节点。
其中,如果在预定的第一时间内未接收其他集群中的至少一个主共识节点发送的确认消息,则说明该机房出现异常,该异常可能是主共识节点宕机也可能是整个机房宕机。为了确认该异常是主共识节点宕机还是整个机房宕机,则 可以再次向未接收到确认消息对应的集群的主共识节点发送心跳请求,例如,每隔10秒钟发送一次心跳请求给这些集群的主共识节点,若有心跳响应,则主共识节点正常工作,若主共识节点宕机,则会在限定时间内(例如,1分钟)选举本集群中的某一备用共识节点作为主共识节点,此期间,无法收到心跳响应,但后续选举备用共识节点作为暂时的主共识节点后,能够进行心跳响应,可以确认该集群的主共识节点宕机。
所述启用模块102,用于若在预定的第二时间内(即超过选举时间阈值)未接收到该集群基于该心跳请求的心跳响应,则该未进行心跳响应的集群发生机房宕机,启用本集群中的备用共识节点作为发生机房宕机的集群的主共识节点进行共识服务,以对区块进行共识;
所述共识模块103,用于当接收到发生机房宕机的集群发送的恢复运行的恢复消息后,关闭作为该恢复运行的集群的主共识节点的备用共识节点的共识服务,并控制该备用共识节点与该恢复运行的集群的主共识节点同步增量区块数据。
其中,对于启用本集群中的备用共识节点作为发生机房宕机的集群的暂时的主共识节点的机房,在接收到恢复消息后,由于不再需要该暂时的主共识节点的共识服务,因此将该暂时的主共识节点的共识服务进行关闭。然后,该暂时的主共识节点与恢复运行的集群的主共识节点同步增量区块数据。同步完成后,该恢复运行的集群的主共识节点上线共识服务。
如图4所示,图4为本申请方法一实施例的流程示意图,电子装置1的处理器13执行存储器12中存储的处理系统10时实现该方法的如下步骤:
步骤S1,当集群中的主共识节点在共识完成区块,分别向其他集群中的主共识节点发送是否共识完成该区块的确认请求后,若在预定的第一时间内未接收到基于该确认请求对应的确认消息,则向未接收到确认消息对应的集群的主共识节点发送心跳请求;
其中,将共识节点按照机房进行划分,将同一机房的共识节点划分为同一集群,每一集群配置一个主共识节点及至少一个备用共识节点。
其中,可以使用Paxos、Raft或PBFT等算法进行区块的共识。
如果在预定的第一时间内(例如,5分钟)均接收到其他集群中的主共识节点发送的确认消息,说明本次区块的共识成功,可以将共识后区块数据提交至数据节点。如果在预定的第一时间内未接收其他集群中的至少一个主共识节点发送的确认消息,则说明该机房出现异常,该异常可能是主共识节点宕机也可能是整个机房宕机。为了确认该异常是主共识节点宕机还是整个机房宕机,则可以再次向未接收到确认消息对应的集群的主共识节点发送心跳请求,例如,每隔10秒钟发送一次心跳请求给这些集群的主共识节点,若有心跳响应,则主共识节点正常工作,若主共识节点宕机,则会在限定时间内(例如,1分钟)选举本集群中的某一备用共识节点作为主共识节点,此期间,无法收到心 跳响应,但后续选举备用共识节点作为暂时的主共识节点后,能够进行心跳响应,可以确认该集群的主共识节点宕机。
步骤S2,若在预定的第二时间内未接收到该集群基于该心跳请求的心跳响应,则该未进行心跳响应的集群发生机房宕机,启用本集群中的备用共识节点作为发生机房宕机的集群的主共识节点进行共识服务,以对区块进行共识;
若在预定的第二时间内(例如3分钟)未接收到该集群基于该心跳请求的心跳响应,即超过选举时间阈值,可以认为机房宕机,即此机房所有设备均损坏,例如发生地震、火灾等情况下整个机房均损坏,则启用本集群中的备用共识节点作为发生机房宕机的集群的暂时的主共识节点,进行共识服务。
步骤S3,当接收到发生机房宕机的集群发送的恢复运行的恢复消息后,关闭作为该恢复运行的集群的主共识节点的备用共识节点的共识服务,并控制该备用共识节点与该恢复运行的集群的主共识节点同步增量区块数据。
其中,在宕机机房恢复正常运行后,分别向其他各个机房的主共识节点发送恢复消息,其他各个机房的主共识节点接收到该恢复消息后,可以确认该机房已经恢复正常运行。对于启用本集群中的备用共识节点作为发生机房宕机的集群的暂时的主共识节点的机房,在接收到恢复消息后,由于不再需要该暂时的主共识节点的共识服务,因此将该暂时的主共识节点的共识服务进行关闭。然后,通过控制该暂时的主共识节点与恢复运行的集群的主共识节点同步增量区块数据,以将恢复运行的集群的主共识节点的区块数据更新至最新区块数据的状态。同步完成后,该恢复运行的集群的主共识节点上线共识服务。
其中,在同步增量区块数据时,可以使用Kafka的数据同步功能,通过Kafka对机房(rack)和同步增量区块数据的节点(insync replica)的配置完成同步。
进一步地,在上述的步骤S3之后,当集群中的主共识节点同步增量区块数据后,该方法还包括:分别向其他集群中的主共识节点发送是否共识完成该增量区块数据的确认请求;若均接收到其他集群中的主共识节点基于该确认请求发送的确认消息,则将该增量区块数据同步给区块链中的数据节点。
进一步地,当集群中的主共识节点接收到其他集群中的主共识节点发送的是否共识完成一区块的确认请求后,分析本集群中的主共识节点的最新区块编号与其他集群中的主共识节点的最新区块编号是否一致;
若本集群中的主共识节点的最新区块编号小于其他集群中的主共识节点的最新区块编号,则向其他集群中的主共识节点请求增量区块数据;
若本集群中的主共识节点的最新区块编号大于其他集群中的主共识节点的最新区块编号,则向其他集群中的主共识节点发送确认请求,以供其他集群中的主共识节点向本集群中的主共识节点请求增量区块数据。
其中,如果各个集群中的主共识节点的最新区块的区块编号均一致,即可认为各个集群中的区块同步到最新状态。例如,如果本集群中的主共识节点的 最新区块编号为100,其他集群中的主共识节点的最新区块编号为103,则本集群中的主共识节点需要向其他集群中的主共识节点请求区块编号为101至103的区块编号对应的增量区块数据;如果本集群中的主共识节点的最新区块编号为103,其他集群中的主共识节点的最新区块编号为100,则本集群中的主共识节点需要向其他集群中的主共识节点发送确认请求,以供其他集群中的主共识节点向本集群中的主共识节点请求该区块区块编号为101至103的区块编号对应的增量区块数据。
在一实施例中,在上述实施例的基础上,在上述步骤S1之后,该方法还包括:当有集群中的主共识节点发生宕机,将该集群中的一个备用共识节点设置为主共识节点,以进行共识服务;当该发生宕机的主共识节点恢复运行后,向该备用共识节点发送恢复消息,以便该备用共识节点基于该恢复消息关闭共识服务,并控制该备用共识节点与该恢复运行的主共识节点同步增量区块数据。
其中,如上所述,当本集群中的主共识节点在预定的第一时间内未接收到基于该确认请求对应的确认消息,说明有机房出现异常,需要再次心跳请求至未接收确认消息的集群对应的主共识节点,若主共识节点宕机,则选举备用共识节点作为暂时的主共识节点,进行共识服务,并进行心跳响应。当宕机的主共识节点恢复运行后,首先向作为暂时的主共识节点的备用共识节点发送恢复消息,该作为暂时的主共识节点的备用共识节点接收到恢复消息后关闭共识服务,然后作为暂时的主共识节点的备用共识节点与恢复运行的主共识节点同步增量区块数据,同步完成后,该恢复运行的主共识节点上线共识服务。
可以看出,在多机房异地部署的联盟区块链场景下,若仅有两个机房,可允许一个机房宕机,节点的共识服务仍能正常进行,适用于异地双机房异地部署的灾备情况,当然,也适用于两个以上的机房异地部署的灾备情况,容错率高。
与现有技术相比,本申请在联盟链多机房异地部署的场景下,将同一机房的共识节点划分为同一集群,每个机房中配备一个主共识节点及至少一个备用共识节点,在机房宕机后无法与其他机房进行共识时,可以启用正常运行的机房中的备用共识节点作为宕机机房的暂时的主共识节点进行共识服务,并在宕机机房恢复运行后,将该暂时的主共识节点的共识服务进行关闭,然后该暂时的主共识节点与恢复运行的机房中的主共识节点同步增量区块数据,通过这种方式,在有机房发生宕机下线情况下,通过其他正常运行的机房代替该宕机机房进行共识服务,并在宕机机房恢复运行后,将期间共识的增量区块数据同步给该宕机机房的主共识节点,使得数据不会丢失,保证数据的完整性,实现对联盟链多机房异地部署的灾备补救。
本申请还提供一种区块链共识的设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互联; 所述至少一个处理器调用所述存储器中的所述指令,以使得所述区块链共识的设备执行上述区块链共识的方法中的步骤。
本申请还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,也可以为易失性计算机可读存储介质。计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如下步骤:
S1,当集群中的主共识节点在共识完成区块,分别向其他集群中的主共识节点发送是否共识完成该区块的确认请求后,若在预定的第一时间内未接收到基于该确认请求对应的确认消息,则向未接收到确认消息对应的集群的主共识节点发送心跳请求,其中,将共识节点按照机房进行划分,将同一机房的共识节点划分为同一集群,每一集群配置一个主共识节点及至少一个备用共识节点;
S2,若在预定的第二时间内未接收到该集群基于该心跳请求的心跳响应,则该未进行心跳响应的集群发生机房宕机,启用本集群中的备用共识节点作为发生机房宕机的集群的主共识节点进行共识服务,以对区块进行共识;
S3,当接收到发生机房宕机的集群发送的恢复运行的恢复消息后,关闭作为该恢复运行的集群的主共识节点的备用共识节点的共识服务,并控制该备用共识节点与该恢复运行的集群的主共识节点同步增量区块数据。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。