CN112433885A - 区块链共识处理方法及装置、电子设备、存储介质 - Google Patents
区块链共识处理方法及装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN112433885A CN112433885A CN202011306346.6A CN202011306346A CN112433885A CN 112433885 A CN112433885 A CN 112433885A CN 202011306346 A CN202011306346 A CN 202011306346A CN 112433885 A CN112433885 A CN 112433885A
- Authority
- CN
- China
- Prior art keywords
- consensus
- log
- block
- information
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Retry When Errors Occur (AREA)
Abstract
本申请的实施例揭示了一种区块链共识处理方法及装置,该方法包括:将共识节点获取到的共识消息记录至共识日志中,以使所述共识日志按照本地时间顺序存储所述共识消息;在所述共识节点根据获取到的共识消息进行的共识过程中,若检测到所述共识节点发生故障,则在故障恢复后调用所述共识日志,以获取所述共识日志在所述共识过程中按照本地时间顺序存储的共识消息;根据从所述共识日志中获取到的共识消息,在所述共识节点中按照共识消息对应的本地时间顺序重新执行所述共识过程。本申请实施例的技术方案使得共识节点在故障恢复之后,可以快速地恢复共识节点在发生故障前的共识状态。
Description
技术领域
本申请涉及区块链技术领域,具体而言,涉及区块链共识方法及装置、电子设备、计算机可读存储介质。
背景技术
目前,区块链***的共识算法都是内存操作,当共识节点宕机重启后,由于共识节点丢失了共识消息,导致共识节点无法恢复共识过程,进而导致整个区块链***不可用。因此,如何提升区块链***的共识可用性是现有技术中还有待解决的问题。
发明内容
为解决上述技术问题,本申请的实施例提供了一种区块链共识处理方法及装置、电子设备、计算机可读存储介质。
根据本申请实施例的一个方面,提供了一种区块链共识处理方法,该方法包括:将共识节点获取到的共识消息记录至共识日志中,以使所述共识日志按照本地时间顺序存储所述共识消息;在所述共识节点根据获取到的共识消息进行的共识过程中,若检测到所述共识节点发生故障,则在故障恢复后调用所述共识日志,以获取所述共识日志在所述共识过程中按照本地时间顺序存储的共识消息;根据从所述共识日志中获取到的共识消息,在所述共识节点中按照共识消息对应的本地时间顺序重新执行所述共识过程。
根据本申请实施例的一个方面,提供了一种区块链共识处理装置,该装置包括:共识消息记录模块,配置为将共识节点获取到的共识消息记录至共识日志中,以使所述共识日志按照本地时间顺序存储所述共识消息;共识消息回放模块,配置为在所述共识节点根据获取到的共识消息进行的共识过程中,若检测到所述共识节点发生故障,则在故障恢复后调用所述共识日志,以获取所述共识日志在所述共识过程中按照本地时间顺序存储的共识消息;共识恢复执行模块,配置为根据从所述共识日志中获取到的共识消息,在所述共识节点中按照共识消息对应的本地时间顺序重新执行所述共识过程。
根据本申请实施例的一个方面,提供了一种电子设备,包括处理器及存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现如上所述的区块链共识处理方法。
根据本申请实施例的一个方面,提供了一种计算机可读存储介质,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行如上所述的区块链共识处理方法。
根据本申请实施例的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实施例中提供的区块链共识处理方法。
在本申请的实施例所提供的技术方案中,通过共识日志来持久化存储共识过程中共识消息,并且共识日志是按照本地时间顺序来存储共识消息的,如果共识节点在进行共识的过程中发生了故障,则会在故障恢复后通过获取共识日志在共识过程中按照本地时间顺序存储的共识消息,并在共识节点中基于这些共识消息、以及共识消息对应的本地时间顺序重新执行所述共识过程,由此使得共识节点在故障恢复之后,可以快速地恢复共识节点在发生故障前的共识状态,因此能够在较大程度上提升了区块链***的共识可用性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术者来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本申请涉及的一种实施环境的示意图;
图2是本申请的一示例性实施例示出的区块链共识处理方法的流程图;
图3是图2所示实施例中的步骤S130在一个示例性实施例的流程图;
图4是本申请的一示例性实施例示出的一种区块链共识处理装置的框图;
图5示出了适于用来实现本申请实施例的电子设备的计算机***的结构示意图。
具体实施方式
这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
还需要说明的是:在本申请中提及的“多个”是指两个或者两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
请参阅图1,图1是本申请涉及的一种实施环境的示意图,该实施环境具体为一区块链***。
图1中示出的区块链***100是指用于进行节点设备10与节点设备10之间数据共享的***,为了保证区块链***100内的信息互通,区块链***100中的节点设备10之间可以存在信息连接,节点设备10之间可以通过此信息连接进行信息传输。
如图1所示,区块链***100中的节点设备10中存储有区块链20,区块链20由多个区块组成,每个区块包括区块头和区块体,区块头中存储有区块高度、时间戳等信息。
区块链***100中含有的全部或者部分节点设备10将作为共识节点参与共识消息的共识过程,其中,共识消息包括参与到共识过程中的所有消息,例如在拜占庭共识算法中,共识消息包括拜占庭共识算法所涉及的提案阶段、预投票阶段、预提交阶段这三个阶段中分别需要进行共识的提案消息、预投票消息和预提交消息。只有通过全部或者部分共识节点的共识的区块数据才能够在区块链20上进行去中心化地、可靠地存储。
节点设备10在针对共识消息进行的共识过程中,可能发生宕机、网络断线等故障,容易导致区块链***100的共识状态卡住而无法成功完成共识消息的共识,进而导致区块链***100的共识不可用。
为避免出现以上问题,图1所示的节点设备10将获取到的共识消息记录至共识日志中,以使共识日志按照本地时间顺序存储共识消息,在节点设备10根据获取到的共识消息所进行的共识过程中,如果节点设备10发生了故障,则在故障恢复后调用共识日志,以获取共识日志在故障发生前,针对共识消息进行的共识过程中按照本地时间顺序所存储的共识消息,然后根据从共识日志中获取到的共识消息,按照共识消息对应的本地时间顺序重新执行共识过程。
通过执行如上过程,则可以将节点设备10的共识状态快速地恢复至发生故障之前的共识状态,也使得节点设备10在故障恢复后可以高效地加入到区块链***100中,进而使得区块链***100具有极高的共识存活性能。
需要说明的是,图1所示区块链***100中的节点设备10可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)以及大数据和人工智能平台等基础云计算服务的云服务器,本处也不对此进行限制。
图2是本申请的一示例性实施例示出的区块链共识处理方法的流程图。
该方法可以应用于图1所示的实施环境,并由图1所示实施例环境中的节点设备20具体执行。该方法也可以应用在其它的区块链***中,并由这些区块链***中含有的节点设备执行,本实施例不对此进行限制。
如图2所示,该区块链共识方法至少包括步骤S110至步骤S150,详细介绍如下:
步骤S110,将共识节点获取到的共识消息记录至共识日志中,以使共识日志按照本地时间顺序存储共识消息。
首先需要说明的是,本实施例提及的共识消息包括共识消息包括参与到共识过程中的所有消息,具体包括共识节点自身生成的共识消息,还包括共识节点接收到的其它共识节点发送的共识消息。
例如,以拜占庭共识算法为例进行说明,通用的拜占庭共识算法包含三个共识阶段:第一阶段是提案阶段,第二阶段是预投票阶段,第三阶段是预提交阶段,在提案阶段的共识消息为提案消息,共识节点获取到提案消息后,可以选择接受或不接受该提案消息,若共识节点选择接受,共识过程进入预投票阶段。在预投票阶段,共识节点向其它共识节点发送预投票消息,共识节点也可能接收到其它共识节点发送的预投票消息,因此共识消息还包括预投票阶段的预投票消息。在预提交阶段,共识节点向其它共识节点广播预提交消息,共识节点也可能接收到其它共识节点广播的预提交消息,当共识接收到目标数量的预提交消息,则表示大多数的共识节点已经对待写入区块链的数据达成共识,因此共识消息还包括预提交阶段的预提交消息。
应当理解的是,在实际的区块链应用场景中,由于区块链***实际采用的共识机制可能是多样的,共识节点实际获取到的共识消息可能与上述拜占庭共识算法中含有的共识消息不同。
由于目前的区块链***的共识算法都是内存操作,若某个共识节点发生宕机、网络断线等故障,共识节点执行共识过程的数据将部分或全部丢失,共识节点在故障恢复后也无法恢复故障发生之前的共识状态,导致整个区块链***的共识功能不可用。为解决此问题,本实施例设置共识日志用于持久化存储共识消息,具体来说,共识节点在根据获取到的共识消息执行共识之前,或者在根据获取到的共识消息执行共识的同时,将共识消息记录到共识日志中进行持久化存储,即使共识节点在执行共识的过程发生故障,在故障恢复后即可从共识日志中获取这些持久化存储的共识消息,进而根据这些共识消息快度地恢复发生故障前的共识状态。
在本实施例中,共识日志按照本地时间顺序存储共识节点所获取到的共识消息。如上所述的,共识节点所进行的共识过程通常是阶段性的,共识过程的不同阶段之间具有时间先后顺序,共识节点将获取到的共识消息记录至共识日志的过程也具有时间先后顺序,因此本实施例设置共识日志按照本地时间顺序存储共识消息,使得共识消息被共识日志记录的本地时间顺序能够准确地反映出共识消息在共识过程中的执行时间顺序,进而使得共识节点在故障恢复后,即可根据共识消息被共识日志记录的本地时间顺序,准确地对故障前基于共识消息所执行的共识过程进行回放处理,从而快速地恢复共识节点在故障前的共识状态。
需要说明的是,共识日志可以采用任意能够按照本地时间顺序对共识消息进行存储的日志形式,例如采用二进制(也称为binlog)日志,本实施例不对此进行限制。
步骤S130,在共识节点根据获取到的共识消息进行的共识过程中,若检测到共识节点发生故障,则在故障恢复后调用共识日志,以获取共识日志在共识过程中按照本地时间顺序存储的共识消息。
如上所述的,在通用的拜占庭共识算法中,共识节点根据获取到的共识消息进行的共识过程通常包括提案阶段、预投票阶段和预提交阶段。而在实际的区块链应用场景中,共识根据获取到的共识消息进行的共识过程则可能与拜占庭共识算法所包括的三个阶段不同,本实施例并不对具体的共识过程进行限制。
在根据获取到的共识消息进行的共识过程中,检测到的共识节点所发生的故障可以包括共识节点宕机、共识节点的网络断线等,若继续检测到共识节点重启或共识节点恢复了网络连接,则表示共识节点完成了故障恢复。
共识节点在故障恢复后,通过调用共识日志,可以获取共识日志在共识节点发生故障前所进行的共识过程中所存储的共识消息,并且能够相应获取这些共识消息在共识日志中所记录的本地时间顺序。也即是说,共识节点通过调用共识日志,不仅能够获取到共识节点在发生故障前所执行的共识过程中涉及处理的共识消息,还能够相应获取各个共识消息在共识过程中的处理顺序。共识节点故障恢复后,按照各个共识消息在共识过程中的处理顺序,在共识节点中重新执行发生故障之前所执行的共识过程,即可快速地恢复自身的共识机制,进而能够将自身的共识状态快速地恢复至发生故障之前的共识状态。
步骤S150,根据从共识日志中获取到的共识消息,在共识节点中按照共识消息对应的本地时间顺序重新执行共识过程。
如前所述的,共识日志按照本地时间顺序对共识节点获取到的共识消息进行存储,能够体现出共识节点在发生故障之前根据共识消息执行共识过程的顺序,因此在本实施例中,共识节点在从共识日志中获取到共识消息之后,按照各个共识消息在共识过程中的处理顺序来重新执行共识过程,在逻辑上是对发生故障之前的共识过程所准确进行的回放处理,这样即可使得共识节点可以快速地恢复到发生故障之前的共识状态,完成故障恢复的共识节点就能早地加入到区块链***的共识过程,也在较大程度上提高了区块链***的共识性能。
在另外的实施例中,考虑到共识节点在根据获取到的共识消息所执行的共识过程中可能产生超时事件,例如在上述通用的拜占庭共识算法中,任意的共识阶段都可能由于网络带宽较低等原因而产生超时,为了实现共识节点发生故障前的共识状态的准确恢复,有必要在共识节点恢复执行针对共识消息的共识过程中回放相应的超时状态。
为此,本实施例在共识节点根据获取到的共识消息进行的共识过程中,若检测到超时事件,还将检测到的超时事件所对应的超时信息记录至共识日志中,以在共识节点完成故障恢复后,通过调用共识日志还获取共识过程中记录的超时信息,进而根据从共识日志中获取到的共识消息和超时信息,在共识节点中重新执行共识过程。
需要说明的是,超时事件所对应的超时信息可以包括超时类型、超时时间值等参数,共识节点在故障恢复后,会在重新执行的共识过程中相应执行这些超时信息,以在共识过程中实现超时事件的回放处理,由此使得共识节点能够更加准确地恢复至故障之前的共识状态。
共识节点完整地执行一轮共识过程后,会得到待上链的区块,该区块中含有待存储至区块链上的数据,并且该区块通过了区块链***中含有的全部或者大多数共识节点的共识。在一些实施例中,共识节点将共识得到的区块存储至区块链上之后,还可以将区块链上最新区块的区块高度记录到共识日志中。
由于共识日志都是按照本地时间顺序来存储数据,并且区块链上每个区块的区块高度各不相同,本实施例将区块链上最新区块的区块高度记录到共识日志中,以便于在共识日志中定位每一轮区块的共识过程中记录的数据。例如,假设共识节点完成上一轮区块的共识过程后,区块链上新增了区块高度为10001的最新区块,因此在共识日志中记录区块高度10001,共识节点随即进行本轮区块的共识过程,并将本轮区块的共识过程中所获取到的共识消息、以及本轮区块的共识过程中所产生的超时事件对应的超时信息记录到共识日志中,因此共识日志中存储的位于区块高度10001之后的共识消息及超时信息即为本轮区块的共识过程中记录的数据。
基于此,共识节点在故障恢复后,获取共识日志在共识过程中按照本地时间顺序存储的共识消息的流程,具体可以包括图3所示的步骤S131至步骤S135,详细介绍如下:
步骤S131,调用共识日志,以获取共识日志中存储的最新区块高度。
首先需要说明的是,本实施例调用共识日志,具体可以是调用共识日志对外提供的数据读取接口,外部通过调用此数据读取接口,即可读取到共识日志中存储的数据,例如可以读取到共识日志中存储的最新区块高度以即共识信息。
共识日志还可以对外提供数据写入接口,外部通过此数据写入接口可以向共识日志传入共识消息、超时事件对应的超时信息、区块链上最新区块的区块高度等数据,以使得这些数据在共识日志中进行持久化地存储。并且在一些实施例中,上述共识日志对外提供的数据读取接口和数据写入接口可以是同一接口,此接口同时支持数据读取以及数据写入的调用,由此支持共识日志对于数据的存储及读取操作。
还需要说明的是,本实施例提及的最新区块高度是指共识日志中最近一次存储的区块高度,例如在本轮区块的共识过程中,共识日志中最近一次存储的区块高度是当前区块链上最新区块的区块高度,共识日志中存储的最新区块高度即为当前区块链上最新区块的区块高度。
步骤S133,若确定最新区块高度为区块链上最新区块的区块高度,则从共识日志中获取共识过程中按照本地时间顺序记录的共识消息。
如果共识日志中存储的最新区块高度为区块链上最新区块的区块高度,则表示共识节点是在本轮区块的共识过程中发生的故障,因此确定需要在故障恢复的共识节点中重新执行本轮区块的共识过程,进而从共识日志中获取共识过程中按照本地时间顺序记录的共识消息。还需要说明的是,如果共识日志中存储有共识节点在故障前执行本轮区块的共识过程中产生的超时信息,则将从共识日志中获取共识过程中按照本地时间顺序记录的共识消息以及超时信息。
示例性的,通过在共识日志中查找包含有区块链上最新区块的区块高度的目标日志文件以及文件偏移位,然后以文件偏移位为起始,读取目标日志文件中记录的数据,即可得到共识日志在共识过程中按照本地时间顺序记录的共识消息以及超时信息。
应当理解的是,共识日志中通常存储有多个日志文件,本实施例将存储有区块链上最新区块的区块高度的日志文件作为目标日志文件,文件偏移位是指区块链上最新区块的区块高度在目标日志文件中进行存储的位置信息。因此,本实施例以区块链上最新区块的区块高度对应的文件偏移位为起始读取所述目标日志文件中记录的数据,即可以相应获取到共识节点在故障前执行共识过程中基于时间先后顺序处理的共识消息,以及共识过程中所发生的超时事件对应的时间信息,从而基于获取到的这些信息对共识节点在发生故障之前的共识状态进行快速且准确地恢复。
步骤S135,若确定最新区块高度小于区块链上最新区块的区块高度,则执行下一轮区块的共识过程。
如果共识日志中存储的最新区块高度小于区块链上最新区块的区块高度,则表示共识节点已经完成本轮区块的共识过程,而是在向共识日志中记录区块链上最新区块的区块高度之前共识节点出现了故障,这显然不会影响区块链***的共识性能,因此共识节点可以直接跳转执行下一轮区块的共识过程,不必重新执行本轮区块的共识过程,也不必调取共识日志中存储的数据。
在另一些实施例中,共识节点在执行下一轮区块的共识过程之前,还可以将区块链上最新区块的区块高度记录到共识日志中,以基于共识日志中记录的最新区块高度来标识本轮区块的共识过程已经完成,进而保证共识日志针对共识节点所进行共识过程的数据完整性。
由此,在以上实施例提供的方法中,通过共识日志中存储的最新区块高度与当前区块链上最新区块的区块高度之间的大小关系来进行共识日志中所存储数据的获取,可以灵活地进行共识节点所发生故障的应对处理,例如,如果确定共识节点是在向共识日志中记录区块链上最新区块的区块高度之前出现了故障,共识节点则不必重新执行本轮区块的共识过程,从而进一步地提升了区块链***的共识性能。
在另一示例性实施例中,共识日志具体采用二进制日志,该二进制日志以组(通常称为group)的形式来管理日志文件,每个日志文件有数据量大小的限制,同时也会限制二进制日志中所有日志文件的总数据量大小。
二进制日志在最开始记录数据时,其中只含有一个日志文件,当该日志文件中记录的数据量达到预先设定的阈值后,二进制日志会轮询生成下一个日志文件,并且各个日志文件之间具有共同的前缀信息,但各个日志文件的后缀信息各不相同,以通过后缀信息来区分不同的日志文件。因此,各个日志文件的后缀信息也可以作为相应日志文件的文件索引号,以便于根据文件索引号在二进制日志中查找相应的日志文件。
便于理解的,若假设二进制日志中含有的日志文件依次为datalog.000,datalog.001,……,datalog.###,“000”则为初始文件索引号,其用于索引二进制日志中的初始日志文件,“###”为最新文件索引号,其用于索引二进制日志中的最新日志文件。随着更多的数据在二进制日志中的写入,文件索引号递增变大,因此在查找二进制日志中具体的某个日志文件时,可以根据该日志文件对应的文件索引号与初始文件索引号或最新文件索引号之间的对应关系进行索引查找。
因此,在共识日志中查找以区块链上最新区块的区块高度为起点的目标日志文件以及文件偏移位时,可以先确定记录有区块链上最新区块的区块高度的目标文件索引号,然后根据目标文件索引号与共识日志对应的初始文件索引号或最新文件索引号之间的对应关系,在共识文件中查找目标文件索引号所标识的目标日志文件,最后再获取区块链上最新区块的区块高度在目标日志文件上的文件偏移位。其中,如果目标文件索引号与初始文件索引号之间的差值大于目标文件索引号与最新文件索引号之间的差值,则表示待查找的目标日志文件相距初始日志文件更近,因此从初始日志文件开始在二进制日志中向前遍历目标日志文件,反之则从最新日志文件开始在二进制日志中向后遍历目标日志文件。
二进制日志采用二进制的方式实现数据存储,也即二进制日志中都是存储的二进制数据,因此二进制日志还提供有数据编码接口和数据解码接口,数据编码接口用于实现二进制数据的编码,数据解码接口用于实现二进制数据的相应解码。
因此在向二进制日志中存入数据时,通过调用二进制日志提供的数据编码接口,以对这些数据进行编码处理得到对应的二进制数据,然后即可将所得到的二进制数据记录至二进制日志中。需要说明的是,向二进制日志中存入的数据可以包括共识消息、超时事件对应的超时信息、以及当前区块链上最新区块的区块高度。将所得到的二进制数据记录至二进制日志中,具体是将二进制数据存储至二进制日志中最新的日志文件中,若在二进制数据的存储过程中检测到最新的日志文件的数据量达到阈值,则将未保存的二进制数据轮询存储至下一日志文件中。
在从日志文件中读取数据时,通过调用二进制日志提供的数据解码接口,获取经由数据解码接口处理输出的解码数据。具体来说,从区块链上最新区块的区块高度在目标日志文件中的文件偏移位为起始,依次读取目标日志文件中记录的二进制数据,这些二进制数据经由数据解码接口处理输出为解码数据,因此将这些解码数据获取为共识过程中按照本地时间顺序记录的数据。
还需要说明的是,以上描述的二进制日志所进行数据存储以及数据读取的过程也可以扩展应用至其它类型的共识日志中,并不限于在上述的二进制日志中使用。基于以上描述的二进制日志所进行数据存储以及数据读取的过程,十分便于对共识节点在故障前所进行的共识过程中数据的存储,以及共识节点在故障恢复后针对故障前的共识过程的重新执行。
图4是本申请的一示例性实施例示出的一种区块链共识处理装置的框图。如图4所示,该示例性的区块链共识处理装置包括:
共识消息记录模块210,配置为将共识节点获取到的共识消息记录至共识日志中,以使共识日志按照本地时间顺序存储共识消息;共识消息回放模块230,配置为在共识节点根据获取到的共识消息进行的共识过程中,若检测到共识节点发生故障,则在故障恢复后调用共识日志,以获取共识日志在共识过程中按照本地时间顺序存储的共识消息;共识恢复执行模块250,配置为根据从共识日志中获取到的共识消息,在共识节点中按照共识消息对应的本地时间顺序重新执行共识过程。
在另一示例性实施例中,该装置还包括超时事件时间模块,该超时事件时间模块配置为在共识节点根据获取到的共识消息进行的共识过程中,若检测到超时事件,则将超时事件对应的超时信息记录至共识日志中;
共识消息回放模块230还配置为在共识节点完成故障恢复后,通过调用共识日志还获取共识过程中记录的超时信息,以根据从共识日志中获取到的共识消息和超时信息,在共识节点中重新执行共识过程。
在另一示例性实施例中,该装置还包括区块高度记录模块,该区块高度记录模块配置为在共识节点将共识得到的区块存储至区块链上之后,将区块链上最新区块的区块高度记录到共识日志中。
在另一示例性实施例中,共识消息回放模块230包括:
共识日志调用模块,配置为调用共识日志,以获取共识日志中存储的最新区块高度;共识消息获取模块,配置为在确定最新区块高度为区块链上最新区块的区块高度时,从共识日志中获取共识过程中按照本地时间顺序记录的共识消息。
在另一示例性实施例中,共识消息获取模块包括:
文件查找单元,配置为在共识日志中查找包含有区块链上最新区块的区块高度的目标日志文件以及文件偏移位;数据读取单元,配置为以文件偏移位为起始,读取目标日志文件中记录的数据,以得到共识日志在共识过程中按照本地时间顺序记录的共识消息。
在另一示例性实施例中,共识日志包括二进制日志,二进制日志提供有数据解码接口,数据读取单元包括:
二进制数据读取子单元,配置为从文件偏移位为起始,读取目标日志文件中记录的二进制数据;解码数据获取单元,配置为获取二进制数据经由数据解码接口处理输出的解码数据,将解码数据作为共识过程中按照本地时间顺序记录的共识消息。
在另一示例性实施例中,文件查找单元包括:
目标文件索引号获取子单元,配置为确定记录有区块链上最新区块的区块高度的目标文件索引号;目标日志文件查找子单元,配置为根据目标文件索引号与共识日志对应的初始文件索引号或最新文件索引号之间的对应关系,在共识文件中查找目标文件索引号所标识的目标日志文件;文件偏移位获取子单元,配置为获取区块链上最新区块的区块高度在目标日志文件上的文件偏移位。
在另一示例性实施例中,共识消息回放模块230还包括共识跳转执行单元,该共识跳转执行单元配置为在确定最新区块高度小于区块链上最新区块的区块高度时,执行下一轮区块的共识过程。
在另一示例性实施例中,共识跳转执行单元在执行下一轮区块的共识过程之前,还将区块链上最新区块的区块高度记录到共识日志中。
在另一示例性实施例中,共识日志包括二进制日志,二进制日志提供有数据编码接口;共识消息记录模块210包括:
数据编码接口调用单元,配置为调用二进制日志提供的数据编码接口,以对共识节点获取到的共识消息进行编码处理,得到共识消息对应的二进制数据;二进制数据记录单元,配置为将共识消息对应的二进制数据记录在共识日志中。
在另一示例性实施例中,二进制数据记录单元包括:
普通存储子单元,配置为将共识消息对应的二进制数据存储至共识日志中最新的日志文件中;轮询存储子单元,配置为若检测到最新的日志文件的数据量达到阈值,则将未保存的二进制数据轮询存储至共识日志的下一日志文件中。
需要说明的是,上述实施例所提供的装置与上述实施例所提供的方法属于同一构思,其中各个模块和单元执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。
本申请的实施例还提供了一种电子设备,包括处理器和存储器,其中,存储器上存储有计算机可读指令,该计算机可读指令被处理器执行时实现如前所述的区块链共识处理方法。
图5示出了适于用来实现本申请实施例的电子设备的计算机***的结构示意图。
需要说明的是,图5示出的电子设备的计算机***1600仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图5所示,计算机***1600包括中央处理单元(Central Processing Unit,CPU)1601,其可以根据存储在只读存储器(Read-Only Memory,ROM)1602中的程序或者从储存部分1608加载到随机访问存储器(Random Access Memory,RAM)1603中的程序而执行各种适当的动作和处理,例如执行上述实施例中所述的方法。在RAM 1603中,还存储有***操作所需的各种程序和数据。CPU 1601、ROM 1602以及RAM 1603通过总线1604彼此相连。输入/输出(Input/Output,I/O)接口1605也连接至总线1604。
以下部件连接至I/O接口1605:包括键盘、鼠标等的输入部分1606;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1607;包括硬盘等的储存部分1608;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1609。通信部分1609经由诸如因特网的网络执行通信处理。驱动器1610也根据需要连接至I/O接口1605。可拆卸介质1611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1610上,以便于从其上读出的计算机程序根据需要被安装入储存部分1608。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分1609从网络上被下载和安装,和/或从可拆卸介质1611被安装。在该计算机程序被中央处理单元(CPU)1601执行时,执行本申请的***中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
本申请的另一方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如前所述的区块链共识处理方法。该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的,也可以是单独存在,而未装配入该电子设备中。
本申请的另一方面还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各个实施例中提供的区块链共识处理方法。
上述内容,仅为本申请的较佳示例性实施例,并非用于限制本申请的实施方案,本领域普通技术人员根据本申请的主要构思和精神,可以十分方便地进行相应的变通或修改,故本申请的保护范围应以权利要求书所要求的保护范围为准。
Claims (14)
1.一种区块链共识处理方法,其特征在于,所述方法包括:
将共识节点获取到的共识消息记录至共识日志中,以使所述共识日志按照本地时间顺序存储所述共识消息;
在所述共识节点根据获取到的共识消息进行的共识过程中,若检测到所述共识节点发生故障,则在故障恢复后调用所述共识日志,以获取所述共识日志在所述共识过程中按照本地时间顺序存储的共识消息;
根据从所述共识日志中获取到的共识消息,在所述共识节点中按照共识消息对应的本地时间顺序重新执行所述共识过程。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述共识节点根据获取到的共识消息进行的共识过程中,若检测到超时事件,则将所述超时事件对应的超时信息记录至所述共识日志中;
在所述共识节点完成故障恢复后,通过调用所述共识日志还获取所述共识过程中记录的超时信息,以根据从所述共识日志中获取到的共识消息和超时信息,在所述共识节点中重新执行所述共识过程。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述共识节点将共识得到的区块存储至区块链上之后,将所述区块链上最新区块的区块高度记录到所述共识日志中。
4.根据权利要求1所述的方法,其特征在于,在故障恢复后调用所述共识日志,以获取所述共识日志在所述共识过程中按照本地时间顺序存储的共识消息,包括:
调用所述共识日志,以获取所述共识日志中存储的最新区块高度;
若确定所述最新区块高度为所述区块链上最新区块的区块高度,则从所述共识日志中获取所述共识过程中按照本地时间顺序记录的共识消息。
5.根据权利要求4所述的方法,其特征在于,从所述共识日志中获取所述共识过程中按照本地时间顺序记录的共识消息,包括:
在所述共识日志中查找包含有所述区块链上最新区块的区块高度的目标日志文件以及文件偏移位;
以所述文件偏移位为起始,读取所述目标日志文件中记录的数据,以得到所述共识日志在所述共识过程中按照本地时间顺序记录的共识消息。
6.根据权利要求5所述的方法,其特征在于,所述共识日志包括二进制日志,所述二进制日志提供有数据解码接口;从所述文件偏移位为起始,读取所述目标日志文件中记录的数据,以得到所述共识过程中按照本地时间顺序记录的共识消息,包括:
从所述文件偏移位为起始,读取所述目标日志文件中记录的二进制数据;
获取所述二进制数据经由所述数据解码接口处理输出的解码数据,将所述解码数据作为所述共识过程中按照本地时间顺序记录的共识消息。
7.根据权利要求5所述的方法,其特征在于,所述共识日志中查找以所述区块链上最新区块的区块高度为起点的目标日志文件以及文件偏移位,包括:
确定记录有所述区块链上最新区块的区块高度的目标文件索引号;
根据所述目标文件索引号与所述共识日志对应的初始文件索引号或最新文件索引号之间的对应关系,在所述共识文件中查找所述目标文件索引号所标识的目标日志文件;
获取所述区块链上最新区块的区块高度在所述目标日志文件上的文件偏移位。
8.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若确定所述最新区块高度小于所述区块链上最新区块的区块高度,则执行下一轮区块的共识过程。
9.根据权利要求8所述的方法,其特征在于,在执行下一区块的共识过程之前,所述方法还包括:
将所述区块链上最新区块的区块高度记录到所述共识日志中。
10.根据权利要求1所述的方法,其特征在于,所述共识日志包括二进制日志,所述二进制日志提供有数据编码接口;将共识节点获取到的共识消息记录至共识日志中,包括:
调用所述二进制日志提供的数据编码接口,以对共识节点获取到的共识消息进行编码处理,得到所述共识消息对应的二进制数据;
将所述共识消息对应的二进制数据记录在所述共识日志中。
11.根据权利要求10所述的方法,其特征在于,将所述共识消息对应的二进制数据记录在所述共识日志中,包括:
将所述共识消息对应的二进制数据存储至所述共识日志中最新的日志文件中;
若检测到所述最新的日志文件的数据量达到阈值,则将未保存的二进制数据轮询存储至所述共识日志的下一日志文件中。
12.一种区块链共识处理装置,其特征在于,所述装置包括:
共识消息记录模块,配置为将共识节点获取到的共识消息记录至共识日志中,以使所述共识日志按照本地时间顺序存储所述共识消息;
共识消息回放模块,配置为在所述共识节点根据获取到的共识消息进行的共识过程中,若检测到所述共识节点发生故障,则在故障恢复后调用所述共识日志,以获取所述共识日志在所述共识过程中按照本地时间顺序存储的共识消息;
共识恢复执行模块,配置为根据从所述共识日志中获取到的共识消息,在所述共识节点中按照共识消息对应的本地时间顺序重新执行所述共识过程。
13.一种电子设备,其特征在于,包括:
存储器,存储有计算机可读指令;
处理器,读取存储器存储的计算机可读指令,以执行权利要求1-11中的任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行权利要求1-11中的任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011306346.6A CN112433885B (zh) | 2020-11-19 | 2020-11-19 | 区块链共识处理方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011306346.6A CN112433885B (zh) | 2020-11-19 | 2020-11-19 | 区块链共识处理方法及装置、电子设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112433885A true CN112433885A (zh) | 2021-03-02 |
CN112433885B CN112433885B (zh) | 2021-09-10 |
Family
ID=74692772
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011306346.6A Active CN112433885B (zh) | 2020-11-19 | 2020-11-19 | 区块链共识处理方法及装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112433885B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115378803A (zh) * | 2022-04-13 | 2022-11-22 | 网易(杭州)网络有限公司 | 日志管理方法、装置、区块链节点和存储介质 |
CN115811526A (zh) * | 2023-02-09 | 2023-03-17 | 北京奥星贝斯科技有限公司 | 分布式存储***中的共识方法、计算节点和*** |
CN116938951A (zh) * | 2023-09-18 | 2023-10-24 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) | 区块链共识方法和***、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140101484A1 (en) * | 2010-08-14 | 2014-04-10 | Teradata Corporation | Management of a distributed computing system through replication of write ahead logs |
CN109246194A (zh) * | 2018-08-13 | 2019-01-18 | 佛山市顺德区中山大学研究院 | 基于多领导节点的实用拜占庭容错区块链共识方法及*** |
CN110473100A (zh) * | 2019-08-15 | 2019-11-19 | 深圳前海微众银行股份有限公司 | 一种基于区块链***的交易处理方法及装置 |
CN110572281A (zh) * | 2019-08-23 | 2019-12-13 | 华南理工大学 | 一种基于区块链的可信日志记录方法及*** |
CN111291110A (zh) * | 2018-12-06 | 2020-06-16 | 中国电信股份有限公司 | 基于区块链网络的共识方法和*** |
CN111461887A (zh) * | 2020-04-01 | 2020-07-28 | 杭州溪塔科技有限公司 | 一种区块链的共识处理方法、装置和电子设备 |
CN111522696A (zh) * | 2020-07-03 | 2020-08-11 | 支付宝(杭州)信息技术有限公司 | 区块链共识节点的宕机处理方法、数据持久化方法及硬件 |
CN111522697A (zh) * | 2020-07-03 | 2020-08-11 | 支付宝(杭州)信息技术有限公司 | 区块链共识节点的重启处理方法、共识节点及区块链*** |
-
2020
- 2020-11-19 CN CN202011306346.6A patent/CN112433885B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140101484A1 (en) * | 2010-08-14 | 2014-04-10 | Teradata Corporation | Management of a distributed computing system through replication of write ahead logs |
CN109246194A (zh) * | 2018-08-13 | 2019-01-18 | 佛山市顺德区中山大学研究院 | 基于多领导节点的实用拜占庭容错区块链共识方法及*** |
CN111291110A (zh) * | 2018-12-06 | 2020-06-16 | 中国电信股份有限公司 | 基于区块链网络的共识方法和*** |
CN110473100A (zh) * | 2019-08-15 | 2019-11-19 | 深圳前海微众银行股份有限公司 | 一种基于区块链***的交易处理方法及装置 |
CN110572281A (zh) * | 2019-08-23 | 2019-12-13 | 华南理工大学 | 一种基于区块链的可信日志记录方法及*** |
CN111461887A (zh) * | 2020-04-01 | 2020-07-28 | 杭州溪塔科技有限公司 | 一种区块链的共识处理方法、装置和电子设备 |
CN111522696A (zh) * | 2020-07-03 | 2020-08-11 | 支付宝(杭州)信息技术有限公司 | 区块链共识节点的宕机处理方法、数据持久化方法及硬件 |
CN111522697A (zh) * | 2020-07-03 | 2020-08-11 | 支付宝(杭州)信息技术有限公司 | 区块链共识节点的重启处理方法、共识节点及区块链*** |
Non-Patent Citations (1)
Title |
---|
包振山等: "基于树形拓扑网络的实用拜占庭容错共识算法", 《应用科学学报》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115378803A (zh) * | 2022-04-13 | 2022-11-22 | 网易(杭州)网络有限公司 | 日志管理方法、装置、区块链节点和存储介质 |
CN115378803B (zh) * | 2022-04-13 | 2023-12-12 | 网易(杭州)网络有限公司 | 日志管理方法、装置、区块链节点和存储介质 |
CN115811526A (zh) * | 2023-02-09 | 2023-03-17 | 北京奥星贝斯科技有限公司 | 分布式存储***中的共识方法、计算节点和*** |
CN116938951A (zh) * | 2023-09-18 | 2023-10-24 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) | 区块链共识方法和***、电子设备及存储介质 |
CN116938951B (zh) * | 2023-09-18 | 2024-02-13 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) | 区块链共识方法和***、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112433885B (zh) | 2021-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112433885B (zh) | 区块链共识处理方法及装置、电子设备、存储介质 | |
US11614867B2 (en) | Distributed storage system-based data processing method and storage device | |
CN110300151B (zh) | 数据文件上传方法及*** | |
US9778998B2 (en) | Data restoration method and system | |
CN109614439B (zh) | 数据同步方法、装置、电子设备及存储介质 | |
CN111291079A (zh) | 一种数据的查询方法和装置 | |
CN112437001B (zh) | 保证消息可靠性投递与消费方法、装置 | |
CN114710224A (zh) | 帧同步方法及装置、计算机可读介质、电子设备 | |
CN109597722A (zh) | 数据库备份文件恢复方法、装置及电子设备 | |
CN112202663A (zh) | 消息推送方法、装置、终端及介质 | |
CN111338834A (zh) | 数据存储方法和装置 | |
CN110737543B (zh) | 一种分布式文件***数据恢复的方法、装置及存储介质 | |
CN111198853B (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN110928945B (zh) | 一种针对数据库的数据处理方法及装置,数据处理*** | |
CN113098978B (zh) | 一种数据传输方法、装置及介质 | |
CN110597794A (zh) | 数据处理方法、装置和电子设备 | |
CN110119400B (zh) | 适用于逻辑运算的唯一标识生成方法及装置 | |
CN107704557B (zh) | 操作互斥数据的处理方法、装置、计算机设备和存储介质 | |
CN113051085B (zh) | 服务调用方法、装置、服务器及存储介质 | |
CN112988469B (zh) | 联盟链中的状态备份方法、装置和电子设备 | |
CN115981828B (zh) | 一种业务消息处理方法和装置 | |
CN109901970B (zh) | 一种视联网终端的监控方法和装置 | |
CN115460271B (zh) | 一种基于边缘计算的网络控制方法及装置、存储介质 | |
CN113704254B (zh) | 一种数据库的业务处理方法、装置、电子设备和存储介质 | |
CN113810266B (zh) | 针对消息对象的重试操作方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40040996 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |