CN113157810A - 一种区块同步方法、计算机设备和存储介质 - Google Patents
一种区块同步方法、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN113157810A CN113157810A CN202110476190.4A CN202110476190A CN113157810A CN 113157810 A CN113157810 A CN 113157810A CN 202110476190 A CN202110476190 A CN 202110476190A CN 113157810 A CN113157810 A CN 113157810A
- Authority
- CN
- China
- Prior art keywords
- node
- block
- synchronization
- block chain
- target
- 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
- 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
- G06F16/275—Synchronous replication
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种区块同步方法、计算机设备和存储介质,可确定目标区块链节点的待获取区块;从目标区块链系统中选择至少两个区块链节点作为同步区块链节点;获取同步区块链节点的节点标识添加到同步节点队列中;按照该队列中节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定待获取区块中需要从节点标识指示的同步区块链节点中同步的目标区块,获取该目标区块,由此,可通过队列的方式限定同步区块链节点的同步顺序,使得在同一时间内只从一个同步区块链节点获取目标区块,相较于相关技术,降低了维护庞大的区块列表的需求,有利于节约内存资源。
Description
技术领域
本发明涉及区块链技术领域,具体涉及一种区块同步方法、计算机设备和存储介质。
背景技术
区块链是由一系列的区块相互连接形成的链式结构,在区块链系统中,不同的区块链节点一般会存储相同的区块链,而有些区块链节点因为是新增节点或者因为网络断开等原因,会存在存储的区块链与其他区块链节点中的区块链不一致的问题,这种时候,一般需要从其他区块链节点中同步区块。
相关技术中,缺少区块的区块链节点可以选择区块链节点进行区块同步,并在本地保存区块对应的区块列表,基于区块列表对接收的区块排序,按照顺序执行区块内的交易。这种区块同步方案需要维护区块列表,当该区块列表较大的时候,会消耗较多的内存资源。
发明内容
本发明实施例提供一种区块同步方法、装置、计算机设备和存储介质,可以降低区块同步对内存资源的消耗。
本发明实施例提供一种区块同步方法,该区块同步方法包括:
确定所述目标区块链节点的待获取区块;
从目标区块链系统中选择至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,其中,所述目标区块链系统为所述目标区块链节点所属的区块链系统;
获取所述同步区块链节点的节点标识,将所述同步区块链节点的节点标识添加到同步节点队列中;
按照所述同步节点队列中所述节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定所述待获取区块中需要从所述节点标识指示的同步区块链节点中同步的目标区块,从所述节点标识指示的同步区块链节点获取对应的目标区块。
本发明实施例提供一种区块同步装置,该区块同步装置包括:
同步区块确定单元,用于确定所述目标区块链节点的待获取区块;
同步节点确定单元,用于从目标区块链系统中选择至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,其中,所述目标区块链系统为所述目标区块链节点所属的区块链系统;
队列管理单元,用于获取所述同步区块链节点的节点标识,将所述同步区块链节点的节点标识添加到同步节点队列中;
区块同步单元,用于按照所述同步节点队列中所述节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定所述待获取区块中需要从所述节点标识指示的同步区块链节点中同步的目标区块,从所述节点标识指示的同步区块链节点获取对应的目标区块。
在一个可选的示例中,区块同步单元,用于:
从所述同步节点队列中取出位于队首的节点标识作为当前节点标识;
以所述当前节点标识指示的同步区块链节点为当前同步区块链节点,确定所述待获取区块中,需要从所述当前同步区块链节点中同步的目标区块;
从所述当前同步区块链节点获取所述目标区块;
若所述待获取区块中还存在未从同步区块链节点中获取的区块,将所述当前节点标识写入所述同步节点队列的队尾,返回执行所述从所述同步节点队列中取出位于队首的节点标识作为当前节点标识的步骤,直到所述待获取区块对应的目标区块全部获取完为止。
在一个可选的示例中,区块同步单元,还可以用于:
从所述同步节点队列中读取第一个节点标识作为当前节点标识;
以所述当前节点标识指示的同步区块链节点为当前同步区块链节点,确定所述待获取区块中,需要从所述当前同步区块链节点中同步的目标区块;
从所述当前同步区块链节点获取所述目标区块;
在所述当前同步区块链节点的目标区块获取完成后,若所述当前节点标识不是所述同步节点队列中的最后一个节点标识,且待获取区块中还存在未从同步区块链节点中获取的区块,获取所述当前节点标识之后的节点标识作为新的当前节点标识,并返回执行所述以所述当前节点标识指示的同步区块链节点为当前同步区块链节点,确定所述待获取区块中,需要从所述当前同步区块链节点中同步的目标区块的步骤,直到所述待获取区块对应的目标区块全部获取完为止;
若所述当前节点标识是所述同步节点队列中的最后一个节点标识,且待获取区块中还存在未从同步区块链节点中获取的区块,返回执行所述从所述同步节点队列中读取第一个节点标识作为当前节点标识的步骤,直到所述待获取区块对应的目标区块全部获取完为止。
在一个可选的示例中,区块同步单元,用于:
以所述当前节点标识指示的同步区块链节点为当前同步区块链节点,确定所述当前同步区块链节点的最大区块同步数量,其中,所述最大区块同步数量为:在一次同步过程中,所述目标区块链节点可从所述当前同步区块链节点同步的区块的最大数量;
基于所述最大区块同步数量和所述目标区块链节点的当前区块高度,确定所述待获取区块中,需要从所述当前同步区块链节点中同步的目标区块。
在一个可选的示例中,装置还包括:最大区块同步数量确定单元,用于在区块同步单元从所述同步节点队列中取出位于队首的节点标识作为当前节点标识前,
获取所述同步区块链节点的设备负载信息和设备总资源信息,以及所述区块链系统中区块的区块平均数据量;
基于所述区块平均数据量,以及每个同步区块链节点的所述设备负载信和设备总资源信息,确定每个同步区块链节点的最大区块同步数量;
建立每个同步区块链节点的节点标识和最大区块同步数量的对应关系;
所述区块同步单元,用于基于所述对应关系,获取所述当前节点标识对应的最大区块同步数量作为所述当前同步区块链节点的最大区块同步数量。
在一个可选的示例中,区块同步单元,用于:
基于所述目标区块生成区块同步请求,所述区块同步请求包括所述目标区块中区块的区块同步顺序指示信息;
向所述当前同步区块链节点发送所述区块同步请求,触发所述当前同步区块链节点按照所述区块同步顺序指示信息指示的区块同步顺序,依次向所述目标区块链节点发送对应的区块;
接收所述当前同步区块链节点发送的区块。
在一个可选的示例中,区块同步单元,还用于:
在从所述当前同步区块链节点获取所述目标区块的过程中,若出现区块同步异常情况,停止从所述当前同步区块链节点继续获取所述目标区块;
不执行将所述当前节点标识写入所述同步节点队列的队尾的步骤;
返回执行所述从所述同步节点队列中取出位于队首的节点标识作为当前节点标识的步骤。
在一个可选的示例中,所述目标区块链为轻节点,同步区块确定单元,用于确定目标区块链系统的全节点类型的区块链节点的第一区块高度,以及目标区块链节点的第二区块高度;根据所述第一区块高度以及所述目标区块链节点的第二区块高度,确定所述目标区块链节点的待获取区块头;
同步节点确定单元,用于根据所述待获取区块头,从所述目标区块链系统中选择轻节点类型的至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,其中,所述同步区块链包含所述待获取区块头;
区块同步单元,用于按照所述同步节点队列中所述节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定所述待获取区块头中需要从所述节点标识指示的同步区块链节点中同步的目标区块头,从所述节点标识指示的同步区块链节点获取对应的目标区块头。
在一个可选的示例中,同步节点确定单元,用于:
确定所述目标区块链系统中的候选区块链节点;
获取所述候选区块链节点的设备负载信息和设备总资源信息,基于所述设备负载信息和设备总资源信息评估所述候选区块链节点的区块数据同步能力;
基于所述区块数据同步能力,从所述候选区块链节点中选择至少两个区块链节点作为所述目标区块链节点的同步区块链节点。
本发明实施例还提供一种计算机设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如上所述方法的步骤。
本发明实施例还提供一种存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如上所述方法的步骤。
本发明实施例提供了一种区块同步方法、装置、计算机设备和存储介质,可以确定目标区块链节点的待获取区块;从目标区块链系统中选择至少两个区块链节点,作为目标区块链节点的同步区块链节点,其中,目标区块链系统为目标区块链节点所属的区块链系统;获取同步区块链节点的节点标识,将同步区块链节点的节点标识添加到同步节点队列中;按照同步节点队列中节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定待获取区块中需要从节点标识指示的同步区块链节点中同步的目标区块,从节点标识指示的同步区块链节点获取对应的目标区块,由此,可以通过队列的方式为同步区块链节点设置顺序,按照顺序从同步区块链节点中获取区块,使得在同一时间内只从一个同步区块链节点获取目标区块,所以本申请的区块同步方法相较于相关技术,降低了维护庞大的区块列表的需求,有利于节约内存资源。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本发明实施例提供的分布式系统的示意图;
图1b是本发明实施例提供的一种区块同步方法的流程图;
图2a-2c是本发明实施中采用区块同步方法同步区块的示意图;
图2d-2f是本发明实施中在区块同步过程中发生同步异常的处理方案的示意图;
图3是本发明实施例提供的一种区块同步装置的结构示意图;
图4是本发明实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种区块同步方法、装置、计算机设备和存储介质。具体地,本实施例提供适用于区块同步装置的区块同步方法,该区块同步装置可以集成在计算机设备中。该计算机设备可以为终端等设备,例如可以为手机、平板电脑、笔记本电脑、台式电脑等,也可以为服务器等设备,该服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器,但并不局限于此。
本实施例的区块同步方法,可以由区块链系统中的区块链节点实现。
参考图1a,本发明实施例提供的分布式系统100包括至少两个区块链节点200等;区块链节点之间可以通过网络连接,比如,通过有线或无线网络连接等。
其中,目标区块链节点可以为区块链节点200中的任意需要同步区块的节点。
目标区块链节点,可以用于确定所述目标区块链节点的待获取区块;从目标区块链系统中选择至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,其中,所述目标区块链系统为所述目标区块链节点所属的区块链系统;获取所述同步区块链节点的节点标识,将所述同步区块链节点的节点标识添加到同步节点队列中;按照所述同步节点队列中所述节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定所述待获取区块中需要从所述节点标识指示的同步区块链节点中同步的目标区块,从所述节点标识指示的同步区块链节点获取对应的目标区块。
其中,同步区块链节点可以为任意类型的计算机设备,本实施例对此没有限制。
以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本发明实施例的一个方面提供了一种区块同步方法,该区块同步方法可以是由目标区块链节点自身执行的,如图1b所示,本实施例的区块同步方法的流程可以如下:
101、确定所述目标区块链节点的待获取区块;
其中,待获取区块可以基于区块链节点的区块高度确定。本实施例中的区块高度,指的是区块链节点中存储的区块链中区块的数量。
一个示例中,步骤101可以包括:根据目标区块链系统的区块链节点的第一区块高度,以及目标区块链节点的第二区块高度,确定目标区块链节点的待获取区块;
其中,目标区块链系统为目标区块链节点所属的区块链系统。目标区块链系统所采用的区块链架构(Permissioned blockchain infrastructure)不限,例如可以是Hyperledger Faric架构。
Hyperledger Fabric是一个许可的区块链构架。它提供一个模块化的构架,把架构中的节点、智能合约的执行(Fabric项目中称为"chaincode")以及可配置的共识和成员服务(一个Fabric网络包含同伴节点("Peer nodes")执行chaincode合约,访问账本数据,背书交易)并称为应用程序的接口。
Hyperledger Faric架构中,命令者节点("Orderer nodes")负责确保区块链的一致性并传达被背书的交易给网络中的同伴们;以及MSP(管理服务供应商)服务,主要作为证书权威(Certificate Authority)管理X.509证书用于验证成员身份以及角色。
Hyperledger Faric架构中的节点类型包括PEER节点和ORDER节点等。
其中,PEER节点:在Faric架构中,PEER节点表示一个网络实体,维护账本并运行链码容器来对账本执行读写操作。Peer节点由联盟链组织成员拥有和维护。PEER节点由存储服务(committer)与背书服务(Endorser)组成。
ORDER节点:在Faric架构中,ORDER节点表示排序打包节点,ORDER节点从网络上接收背书服务(Endorser)提交的交易,并把交易按照提交的先后顺序打包成区块,打包完成的区块然后分发给存储服务(committer),使得PEER节点中的存储服务可以基于区块的顺序,将区块连接在PEER节点存储的区块链中。
本实施例中的目标区块链系统的同步区块链节点和目标区块链节点都是可以存储区块链的区块链节点。例如在Faric架构中,同步区块链节点和目标区块链节点是PEER节点。
在实际中,若EER节点为新增区块链节点,或者EER节点内的存储服务由于网络断开,服务宕机,或者其他原因没有及时接收ORDER节点分发的区块。当存储服务重新恢复之后,EER节点会发现自己存储的区块与别的PEER节点存在差距,从而触发区块同步。
例如,一个区块链节点存储的区块链中区块的数量为100,则该区块链节点的区块高度为100。
本实施例中,可选的,步骤“根据目标区块链系统的区块链节点的第一区块高度,以及目标区块链节点的第二区块高度,确定目标区块链节点的待获取区块”,包括:
获取目标区块链节点的第二区块高度,获取目标区块链系统的至少两个区块链节点的第一区块高度;
若存在至少一个第一区块高度与第二区块高度不一致,根据数值最大的第一区块高度,以及该第二区块高度,确定目标区块链节点的待获取区块。
例如,最大的第一区块高度为100,对应Block1(区块1)-Block100(区块100),目标区块链节点的第二区块高度为10对应Block1(区块1)-Block10(区块10),则待获取区块的数量为90,对应区块11-100。
上述获取至少两个第一区块高度,可以避免其他区块链节点也出现区块数量异常时,导致对目标区块链节点是否需要进行区块同步的判断不正确。
一个示例中,第一区块高度的数量可以是一个,该示例中,第一区块高度为目标区块链系统中的完整区块链的区块高度。获取第一区块高度时候,可以先确定一个区块数据正常的区块链节点,然后从该区块链节点中获取第一区块高度。
102、从目标区块链系统中选择至少两个区块链节点,作为目标区块链节点的同步区块链节点;
一个示例中,选择同步区块链节点的时候,可以基于距离进行选择,选择距离较近的区块链节点作为同步区块链节点。
可选的,步骤“从目标区块链系统中选择至少两个区块链节点,作为目标区块链节点的同步区块链节点”,可以包括:
获取目标区块链节点与目标区块链系统的其他区块链节点的节点距离;
从节点距离小于预设节点距离阈值的区块链节点中选择至少两个区块链节点,作为目标区块链节点的同步区块链节点。
其中,选择的时候,可以从节点距离小于预设节点距离阈值的区块链节点中,按照节点距离增加的顺序选择同步区块链节点。
可选的,同步区块链节点的数量可以基于实际需要设置,例如基于待获取区块的数量设置。
另一个示例中,选择同步区块链节点的时候,还可以基于区块链节点的负载来选择负载较轻的节点作为同步区块链节点,以避免区块同步时,同步区块链节点因为负载过大等原因出现区块同步异常,保证区块同步的正常有序进行。
可选的,步骤“从目标区块链系统中选择至少两个区块链节点,作为目标区块链节点的同步区块链节点”,可以包括:
确定目标区块链系统中的候选区块链节点;
获取候选区块链节点的设备负载信息和设备总资源信息,基于设备负载信息和设备总资源信息评估候选区块链节点的区块数据同步能力;
基于区块数据同步能力,从候选区块链节点中选择至少两个区块链接点作为目标区块链节点的同步区块链节点。
可选的,候选区块链节点,可以是目标区块链系统中除了目标区块链节点的其他区块链节点,或者,进一步的,可以是该其他区块链节点中区块数据正常的区块链节点。
其中,设备负载信息是用于描述候选区块链节点的实体设备的负载的信息。
设备总资源信息是用于描述候选区块链节点的实体设备的总资源的信息,该总资源包括但不限于cpu资源、内存资源、磁盘io资源以及网络资源等等。
其中,区块数据同步能力可以用于指示候选区块链节点发送一个区块的速度。
可选的,基于设备负载信息和设备总资源信息评估候选区块链节点的区块数据同步能力,具体可以包括:基于设备负载信息和设备总资源信息确定候选区块链节点当前的可用资源,基于可用资源确定候选区块链节点的区块发送速度。
对应的,基于区块数据同步能力,从候选区块链节点中选择至少两个区块链接点作为目标区块链节点的同步区块链节点时,具体是基于区块发送速度,从候选区块链节点中按照从区块发送速度从高到低的顺序选择至少两个区块链节点作为目标区块链节点的同步区块链节点。
一个示例中,还可以结合距离和区块数据同步能力,选择同步区块链节点。
在该结合的方案中,可选的,候选区块链节点可以是基于前述节点距离选择出的节点距离低于预设节点距离阈值的区块链节点。
或者,可选的,在从候选区块链节点中按照从区块发送速度从高到低的顺序选择至少两个区块链节点后,对于选择出的区块链节点,还基于节点距离进行进一步的筛选,例如,对于基于区块数据同步能力选择出的区块链节点,还去除节点距离不低于预设节点距离阈值的区块链节点,从剩余的区块链节点中选择至少两个同步区块链节点。
103、获取同步区块链节点的节点标识,将同步区块链节点的节点标识添加到同步节点队列中;
其中,节点标识是用于标识区块链节点在区块链系统中的身份,以便于其他区块链节点进行区分的信息。节点标识的具体内容不限,可以是区块链系统为区块链节点分配的ID、名称等信息,也可以是区块链节点的实体设备的设备标识、设备MAC地址、设备名称等等。
可选的,将同步区块链节点的节点标识添加到同步节点队列中时,各个同步区块链节点的节点标识的添加顺序不限。一个示例中,可以是按照节点距离由小到大的顺序添加的,由此,可以先同步距离较近的区块链节点中的区块。一个示例中,还可以是按照区块数据同步能力从高到低的顺序添加的,由此,可以先从负载较轻的节点中同步区块。
在步骤103中,可以在获取节点标识前或后或同时,创建同步节点队列,在获取节点标识后,向同步节点队列写入节点标识。
104、按照同步节点队列中节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定待获取区块中需要从节点标识指示的同步区块链节点中同步的目标区块,从节点标识指示的同步区块链节点获取对应的目标区块。
其中,从节点标识指示的同步区块链节点获取对应的目标区块后,还可以按照目标区块中的交易数据进行交易,将交易结果打包成区块存储在目标区块链节点的区块链中,目标区域的交易数据全部交易成功,则目标区块同步成功。
一个示例中,若目标区块的数量较少,可能同步节点队列中的节点标识还未读取完,目标区块链节点的实际区块高度已经是第一区块高度了,该示例中,无需对同步节点队列中的节点标识循环读取。另一个示例中,若目标区块的数量较少,可能读取到同步节点队列中的最后一个节点标识,并基于该节点标识完成对应的区块同步后,目标区块链节点的实际区块高度还未达到第一区块高度,这种情况下,就需要进行节点标识的循环读取。
可选的,一个示例中,同步节点队列可以为循环队列,步骤“按照同步节点队列中节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定待获取区块中需要从节点标识指示的同步区块链节点中同步的目标区块,从节点标识指示的同步区块链节点获取对应的目标区块”,可以包括:
从同步节点队列中取出位于队首的节点标识作为当前节点标识;
以当前节点标识指示的同步区块链节点为当前同步区块链节点,确定待获取区块中,需要从当前同步区块链节点中同步的目标区块;
从当前同步区块链节点获取目标区块;
若所述待获取区块中还存在未从同步区块链节点中获取的区块,将所述当前节点标识写入所述同步节点队列的队尾,返回执行所述从所述同步节点队列中取出位于队首的节点标识作为当前节点标识的步骤,直到所述待获取区块对应的目标区块全部获取完为止。
其中,待获取区块中还存在未从同步区块链节点中获取的目标区块可以包括:在当前同步区块链节点中的目标区块获取完成后,目标区块链节点的当前区块高度不等于(即小于)第一区块高度。待获取区块对应的目标区块全部获取完,可以理解为:在当前同步区块链节点中的目标区块获取完成后,目标区块链节点的当前区块高度等于第一区块高度。
上述循环队列为目标区块较多的场景下读取节点标识,提供了一种简单、快速而有效的方案,有利于提升同步速度。
本实施例中,可以为同步区块链节点设置最大区块同步数量,该最大区块同步数量为:在一次同步过程中,目标区块链节点可从同步区块链节点同步的区块的最大数量;在实际的同步过程中,目标区块链节点可以基于自己的当前区块高度,以及该最大同步区块数量;确定待获取区块中需要从当前同步区块链节点中同步的目标区块。
可选的,步骤“以所述当前节点标识指示的同步区块链节点为当前同步区块链节点,确定所述待获取区块中,需要从所述当前同步区块链节点中同步的目标区块”,可以包括:
以所述当前节点标识指示的同步区块链节点为当前同步区块链节点,确定所述当前同步区块链节点的最大区块同步数量,其中,所述最大区块同步数量为:在一次同步过程中,所述目标区块链节点可从所述当前同步区块链节点同步的区块的最大数量;
基于所述最大区块同步数量和所述目标区块链节点的当前区块高度,确定所述待获取区块中,需要从所述当前同步区块链节点中同步的目标区块。
其中,确定目标区块时,可以确定目标区块中的起始区块(目标区块中的第一个被获取的区块)和结束区块(目标区块中的最后一个被获取的区块)。其中,目标区块中的起始区块为同步区块链节点的区块中,在目标区块链节点的当前区块高度之后的第一个区块,从起始区块到结束区块总共经历的区块的数量不超过该最大区块同步数量。
一个示例中,最大区块同步数量可以是预先设置好的定值,并且每一个同步区块链节点的最大区块同步数量可以相同。
下面结合考图2a-2c,对区块同步方法进行示例说明。图2a-2c的示例中,同步区块链节点为Peer1-5,都是区块数据正常的区块链节点,第一区块高度(blockNum)都为100,目标区块链节点为Peer6,是新加入的区块链节点,第二区块高度(blockNum)为0。
区块链节点为Peer1-5的节点标识Peer1-Peer5已经写入同步节点队列Nodelist中,最大区块同步数量m设置为5。
则区块同步过程具体为:
Peer6从Nodelist中读取队首的节点标识Peer1,基于节点标识Peer1从节点Peer1上同步(Sync)1-5区块(参见图2a)。
节点标识Peer1被写入Nodelist的队尾,Peer6从Nodelist中读取队首的节点标识Peer2,基于节点标识Peer2从节点Peer2上同步(Sync)6-10区块(参见图2b)。
节点标识Peer2被写入Nodelist的队尾,Peer6从Nodelist中读取队首的节点标识Peer3,基于节点标识Peer3从节点Peer3上同步(Sync)11-15区块。
节点标识Peer3被写入Nodelist的队尾,Peer6从Nodelist中读取队首的节点标识Peer4,基于节点标识Peer4从节点Peer4上同步(Sync)16-20区块(参见图2c)。
节点标识Peer4被写入Nodelist的队尾,以此类推,直到Peer100中的当前区块高度达到100为止。
采用本实施例的方案,在同一时刻,只从一个同步区块链节点上同步n个区块,不会长时间占用同步区块链节点的资源,当需要同步的区块很多时,达到了按照时间顺序从不同的同步区块链节点上同步相同数量的区块的效果,类似于时间片的原理,从时间的角度实现负载均衡。
在另一个示例中,考虑到不同同步区块链节点的区块数据同步能力不同,可以基于各个同步区块链节点的实际性能,设置适应于同步区块链节点的最大区块同步数量,该示例中,各同步区块链节点的最大区块同步数量不一定相同。
可选的,步骤“从所述同步节点队列中取出位于队首的节点标识作为当前节点标识”前,还可以包括:
获取同步区块链节点的设备负载信息和设备总资源信息,以及区块链系统中区块的区块平均数据量;
基于区块平均数据量,以及每个同步区块链节点的设备负载信和设备总资源信息,确定每个同步区块链节点的最大区块同步数量;
建立每个同步区块链节点的节点标识和最大区块同步数量的对应关系;
其中,可以获取一个已写满的区块的数据量作为区块平均数据量,或者对多个已写满的区块的数据量求平均值,得到区块平均数据量。
其中,“基于区块平均数据量,以及每个同步区块链节点的设备负载信和设备总资源信息,确定每个同步区块链节点的最大区块同步数量”,可以包括:
基于区块平均数据量、每个同步区块链节点的设备负载信和设备总资源信息,确定每个同步区块链节点的区块发送速度;
基于同步区块链节点的区块发送速度,设置同步区块链节点的最大区块同步数量,其中,区块发送速度越高,最大区块同步数量越大。
对应的,步骤“确定当前同步区块链节点的最大区块同步数量”,包括:
基于对应关系,获取当前节点标识对应的最大区块同步数量作为当前同步区块链节点的最大区块同步数量。
其中,建立每个同步区块链节点的节点标识和最大区块同步数量的对应关系后,可以将该对应关系存储在目标区块链节点的缓存区域,在目标区块链节点的区块高度达到第一区块高度后,删除该缓存区域中的对应关系。
或者一个示例中,该对应关系可以存储在同步区块链节点的特定存储区域中,在需要选择同步区块链节点时,可以从已存储的对应关系中确定区块数据正常的区块链节点作为同步区块链节点。
例如,还是图2a-c的例子为例,假设Peer1-5的最大区块同步数量分别为5、4、4、5、5。则当前同步区块链节点为Peer2、Peer3的时候,从Peer2和Peer3获取的区块的数量为4。
在一个示例中,还可以通过将每个同步区块链节点的节点标识和最大区块同步数量对应地写入同步节点队列的方式,建立每个同步区块链节点的节点标识和最大区块同步数量的对应关系。该示例中,确定当前同步区块链节点的最大区块同步数量的方式,可以是从同步节点队列中同时读取出当前节点标识和对应的最大区块同步数量。采用该示例,通过一次读取就可以获取前节点标识和对应的最大区块同步数量,可以降低获取当前节点标识和最大区块同步数量所需的时间,有利于提升同步速度。
本实施例中,同步区块链节点可以采用串行顺序同步的方式向目标区块链节点同步区块,即每次同步一个区块的数据,一个区块的数据同步完成之后,再同步下一个区块的数据。
可选的,步骤“从当前同步区块链节点获取目标区块”,可以包括:
基于目标区块生成区块同步请求,区块同步请求包括目标区块中区块的区块同步顺序指示信息;
向当前同步区块链节点发送区块同步请求,触发当前同步区块链节点按照区块同步顺序指示信息指示的区块同步顺序,依次向目标区块链节点发送对应的区块;
接收当前同步区块链节点发送的区块。
其中,区块同步顺序指示信息包括但不限于目标区块链节点的当前区块高度以及当前同步区块链节点的最大区块同步数量。
当前同步区块链节点接收同步顺序指示信息后,可以基于该目标区块链节点的当前区块高度以及当前同步区块链节点的最大区块同步数量确定需要同步的目标区块是哪些,然后按照目标区块在区块链上的先后顺序作为区块同步顺序。
其中,当前同步区块链节点在同一时刻只发送一个区块中的数据给目标区块链节点,只有当该区块的数据同步完成后,才基于区块同步顺序,将下一个区块的数据发送给目标区块链节点。
在一个示例中,在区块同步过程中,当前同步区块链节点可能出现同步异常的情况,此时,需要能够及时停止与该当前同步区块链节点的区块同步,选择下一个同步区块链节点进行区块同步。
可选的,本实施例中,在从当前同步区块链节点获取目标区块的过程中,若出现区块同步异常,停止从当前同步区块链节点继续获取目标区块;不执行将当前节点标识写入同步节点队列的队尾的步骤;返回执行从同步节点队列中取出位于队首的节点标识作为当前节点标识的步骤。
其中,区块同步异常包括但不限于同步超时,或者基于接收的区块中的数据进行的交易不成功等等。
本实施例中,
可选的,停止与该当前同步区块链节点的区块同步的方式包括但不限于断开与当前同步区块链节点的连接。
可以理解的是,在同步异常时,可能出现一个区块未完全同步完成的情况,该情况下,对于该未完成同步的区块,可以从目标区块链节点中删除该未完成同步的区块的数据,返回执行从同步节点队列中取出位于队首的节点标识作为当前节点标识后,当需要确定目标区块链节点的当前区块高度时,该未完成同步的区块不计算在内。
例如,参见图2d-2e,假设同步区块链节点为Peer1-n+1,是区块数据正常的区块链节点,第一区块高度(blockNum)都为100,目标区块链节点为Peer6,是新加入的区块链节点,第二区块高度(blockNum)为0。
区块链节点为Peer1-5的节点标识Peer1-Peer5已经写入同步节点队列Nodelist中,最大区块同步数量m设置为5。
Peer6从Nodelist中先取出队首的节点标识Peer1,基于节点标识Peer1从节点Peer1上同步(Sync)1-5区块(参见图2d),在同步的过程中,假设在同步区块3的过程中发生同步异常,则停止与Peer1节点的区块同步,丢弃该节点标识Peer1(相当于从同步节点队列中移除节点标识Peer1),删除区块3的已同步数据。
Peer6从Nodelist中读取队首的节点标识Peer2,基于自身的当前区块高度2,确定目标区块的起始区块为区块3,结束区块为区块8(=3+5),基于节点标识Peer2从节点Peer2上同步(Sync)3-7区块(参见图2e)。
节点标识Peer2被写入Nodelist的队尾,Peer6从Nodelist中读取队首的节点标识Peer3,基于节点标识Peer3从节点Peer3上同步(Sync)8-12区块。
节点标识Peer3被写入Nodelist的队尾,以此类推,当Peer6从Nodelist中读取队首的节点标识Peern+1,Peer6的当前区块高度为k,则Peer6基于节点标识Peer n+1从节点Peer n+1上同步(Sync)k+1-k+5区块(参见图2f),若K+5不等于100,继续进行区块同步,直到Peer6的当前区块高度为100为止。
参见图2f可知,同步区块链节点Peern也出现了异常,节点标识Peern也被从同步节点队列Nodelist中移除。
本实施例中,同步节点列表也可以不是循环列表,可选的,步骤“按照同步节点队列中节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定待获取区块中需要从节点标识指示的同步区块链节点中同步的目标区块,从节点标识指示的同步区块链节点获取对应的目标区块”,可以包括:
从同步节点队列中读取第一个节点标识作为当前节点标识;
以当前节点标识指示的同步区块链节点为当前同步区块链节点,确定待获取区块中,需要从当前同步区块链节点中同步的目标区块;
从当前同步区块链节点获取目标区块;
在当前同步区块链节点的目标区块获取完成后,若当前节点标识不是同步节点队列中的最后一个节点标识,且待获取区块中还存在未从同步区块链节点中获取的区块,获取当前节点标识之后的节点标识作为新的当前节点标识,并返回执行以当前节点标识指示的同步区块链节点为当前同步区块链节点,确定待获取区块中,需要从当前同步区块链节点中同步的目标区块的步骤,直到所述待获取区块对应的目标区块全部获取完为止;
若当前节点标识是同步节点队列中的最后一个节点标识,且待获取区块中还存在未从同步区块链节点中获取的区块,返回执行从同步节点队列中读取第一个节点标识作为当前节点标识的步骤,直到所述待获取区块对应的目标区块全部获取完为止。
该示例中,确定目标区块,获取目标区块等的方案,可以参考前述示例中的相关描述,在此不再赘述。
可选的,本实施例的目标区块链节点的类型可以是全节点也可以是轻节点,轻节点中可以只存储区块链中区块的区块头,全节点则存储区块链中的区块。
其中,区块头的结构根据区块链的架构不同可以不同,一个示例中区块头共80字节,分为6个部分:version,prevBlockHash,merkleRoot,timedifficultyTarget和nonce。version:大小为4字节,记录了区块头的版本号,用于跟踪软件/协议的更新;prevBlockHash:大小为32字节,记录了该区块的上一个区块的Hash地址;merkleRoot:大小为32字节,记录了该区块中交易的merkle树根的哈希值;time:大小为4字节,记录了该区块的创建时间戳;difficultyTarget:大小为4字节,记录了该区块链工作量证明难度目标;nonce:大小为4字节,记录了用于证明工作量的计算参数。
可选的,若目标区块链为轻节点,步骤“确定所述目标区块链节点的待获取区块”,包括:
确定目标区块链系统的全节点类型的区块链节点的第一区块高度;
根据第一区块高度以及目标区块链节点的第二区块高度,确定目标区块链节点的待获取区块头;
步骤“从目标区块链系统中选择至少两个区块链节点,作为目标区块链节点的同步区块链节点”,可以包括:
根据待获取区块头,从目标区块链系统中选择轻节点类型的至少两个区块链节点,作为目标区块链节点的同步区块链节点,其中,同步区块链存储的区块头中包含待获取区块头;
步骤“按照同步节点队列中节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定待获取区块中需要从节点标识指示的同步区块链节点中同步的目标区块,从节点标识指示的同步区块链节点获取对应的目标区块”,可以包括:
按照同步节点队列中节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定待获取区块头中需要从节点标识指示的同步区块链节点中同步的目标区块头,从节点标识指示的同步区块链节点获取对应的目标区块头。
该示例中,每个同步区块链节点都是区块头数据正常的节点,即每个同步区块链节点都包含完整区块链的区块头。
其中,按照节点标识获取目标区块头的具体步骤与按照节点标识获取目标区块的具体步骤类似,在此不再赘述。
在实际中,若将终端类设备如笔记本电脑、智能手机等作为区块链节点接入区块链系统中,可以设置这些终端的区块链节点类型为轻节点,同步区块数据时,只同步区块头,当需要获取具体的区块本体时,再基于该区块头从全节点中获取,由此可以降低区块链的数据对终端的内存资源等的要求,实现终端等计算、存储能力有限的设备接入区块链系统。
采用本实施例的方案,可以在需要同步的区块数量很多时,避免长时间占用同一个同步区块链节点的资源,避免严重拖累该同步区块链节点正常流程的处理性能,进一步的,在区块链网络存在多个不稳定的同步区块链节点的情况下,可以快速消除同步异常,进入正常的区块同步流程,并且该消除异常的方法简单可靠,相较于相关技术中复杂的异常处理流程,可以降低处理同步异常时发生其他不可预料异常的可能性。
为了更好地实施以上方法,相应的,本发明实施例还提供一种区块同步装置。参考图3,该区块同步装置包括:
同步区块确定单元301,用于确定所述目标区块链节点的待获取区块;
同步节点确定单元302,用于从目标区块链系统中选择至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,其中,所述目标区块链系统为所述目标区块链节点所属的区块链系统;
队列管理单元303,用于获取同步区块链节点的节点标识,将同步区块链节点的节点标识添加到同步节点队列中;
区块同步单元304,用于按照同步节点队列中节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定待获取区块中需要从节点标识指示的同步区块链节点中同步的目标区块,从节点标识指示的同步区块链节点获取对应的目标区块。
在一个可选的示例中,区块同步单元,用于:
从同步节点队列中取出位于队首的节点标识作为当前节点标识;
以当前节点标识指示的同步区块链节点为当前同步区块链节点,确定待获取区块中,需要从当前同步区块链节点中同步的目标区块;
从当前同步区块链节点获取目标区块;
若所述待获取区块中还存在未从同步区块链节点中获取的区块,将所述当前节点标识写入所述同步节点队列的队尾,返回执行所述从所述同步节点队列中取出位于队首的节点标识作为当前节点标识的步骤,直到所述待获取区块对应的目标区块全部获取完为止。
在一个可选的示例中,区块同步单元,还可以用于:
从同步节点队列中读取第一个节点标识作为当前节点标识;
以当前节点标识指示的同步区块链节点为当前同步区块链节点,确定待获取区块中,需要从当前同步区块链节点中同步的目标区块;
从当前同步区块链节点获取目标区块;
在当前同步区块链节点的目标区块获取完成后,若当前节点标识不是同步节点队列中的最后一个节点标识,且待获取区块中还存在未从同步区块链节点中获取的区块,获取当前节点标识之后的节点标识作为新的当前节点标识,并返回执行以当前节点标识指示的同步区块链节点为当前同步区块链节点,确定待获取区块中,需要从当前同步区块链节点中同步的目标区块的步骤,直到所述待获取区块对应的目标区块全部获取完为止;
若当前节点标识是同步节点队列中的最后一个节点标识,且待获取区块中还存在未从同步区块链节点中获取的区块,返回执行从同步节点队列中读取第一个节点标识作为当前节点标识的步骤,直到所述待获取区块对应的目标区块全部获取完为止。
在一个可选的示例中,区块同步单元,用于:
以当前节点标识指示的同步区块链节点为当前同步区块链节点,确定当前同步区块链节点的最大区块同步数量,其中,最大区块同步数量为:在一次同步过程中,目标区块链节点可从当前同步区块链节点同步的区块的最大数量;
基于最大区块同步数量和目标区块链节点的当前区块高度,确定待获取区块中,需要从当前同步区块链节点中同步的目标区块。
在一个可选的示例中,装置还包括:最大区块同步数量确定单元,用于在区块同步单元从同步节点队列中取出位于队首的节点标识作为当前节点标识前,
获取同步区块链节点的设备负载信息和设备总资源信息,以及区块链系统中区块的区块平均数据量;
基于区块平均数据量,以及每个同步区块链节点的设备负载信和设备总资源信息,确定每个同步区块链节点的最大区块同步数量;
建立每个同步区块链节点的节点标识和最大区块同步数量的对应关系;
区块同步单元,用于基于对应关系,获取当前节点标识对应的最大区块同步数量作为当前同步区块链节点的最大区块同步数量。
在一个可选的示例中,区块同步单元,用于:
基于目标区块生成区块同步请求,区块同步请求包括目标区块中区块的区块同步顺序指示信息;
向当前同步区块链节点发送区块同步请求,触发当前同步区块链节点按照区块同步顺序指示信息指示的区块同步顺序,依次向目标区块链节点发送对应的区块;
接收当前同步区块链节点发送的区块。
在一个可选的示例中,区块同步单元,还用于:
在从当前同步区块链节点获取目标区块的过程中,若出现区块同步异常情况,停止从当前同步区块链节点继续获取目标区块;
不执行将当前节点标识写入同步节点队列的队尾的步骤;
返回执行从同步节点队列中取出位于队首的节点标识作为当前节点标识的步骤。
在一个可选的示例中,目标区块链为轻节点,同步区块确定单元,用于确定目标区块链系统的全节点类型的区块链节点的第一区块高度,以及目标区块链节点的第二区块高度;根据第一区块高度以及目标区块链节点的第二区块高度,确定目标区块链节点的待获取区块头;
同步节点确定单元,用于根据待获取区块头,从目标区块链系统中选择轻节点类型的至少两个区块链节点,作为目标区块链节点的同步区块链节点,其中,同步区块链包含待获取区块头;
区块同步单元,用于按照同步节点队列中节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定待获取区块头中需要从节点标识指示的同步区块链节点中同步的目标区块头,从节点标识指示的同步区块链节点获取对应的目标区块头。
在一个可选的示例中,同步节点确定单元,用于:
确定目标区块链系统中的候选区块链节点;
获取候选区块链节点的设备负载信息和设备总资源信息,基于设备负载信息和设备总资源信息评估候选区块链节点的区块数据同步能力;
基于区块数据同步能力,从候选区块链节点中选择至少两个区块链节点作为目标区块链节点的同步区块链节点。
采用本实施例的方案,可以在需要同步的区块数量很多时,避免长时间占用同一个同步区块链节点的资源,避免严重拖累该同步区块链节点正常流程的处理性能,进一步的,在区块链网络存在多个不稳定的同步区块链节点的情况下,可以快速消除同步异常,进入正常的区块同步流程,并且该消除异常的方法简单可靠,相较于相关技术中复杂的异常处理流程,可以降低处理同步异常时发生其他不可预料异常的可能性。
此外,本申请实施例还提供一种计算机设备,该计算机设备可以为终端,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机(PC,PersonalComputer)、个人数字助理(Personal Digital Assistant,PDA)等终端设备。如图4所示,图4为本申请实施例提供的计算机设备的结构示意图。该计算机设备1000包括有一个或者一个以上处理核心的处理器401、有一个或一个以上计算机可读存储介质的存储器402及存储在存储器402上并可在处理器上运行的计算机程序。其中,处理器401与存储器402电性连接。本领域技术人员可以理解,图中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
处理器401是计算机设备1000的控制中心,利用各种接口和线路连接整个计算机设备1000的各个部分,通过运行或加载存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行计算机设备1000的各种功能和处理数据,从而对计算机设备1000进行整体监控。
在本申请实施例中,计算机设备1000中的处理器401会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能:
确定所述目标区块链节点的待获取区块;
从目标区块链系统中选择至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,其中,所述目标区块链系统为所述目标区块链节点所属的区块链系统;
获取所述同步区块链节点的节点标识,将所述同步区块链节点的节点标识添加到同步节点队列中;
按照所述同步节点队列中所述节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定所述待获取区块中需要从所述节点标识指示的同步区块链节点中同步的目标区块,从所述节点标识指示的同步区块链节点获取对应的目标区块。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
可选的,如图4所示,计算机设备1000还包括:触控显示屏403、射频电路404、音频电路405、输入单元406以及电源407。其中,处理器401分别与触控显示屏403、射频电路404、音频电路405、输入单元406以及电源407电性连接。本领域技术人员可以理解,图4中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
触控显示屏403可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏403可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-EmittingDiode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器401,并能接收处理器401发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器401以确定触摸事件的类型,随后处理器401根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏403而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏403也可以作为输入单元406的一部分实现输入功能。
射频电路404可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。
音频电路405可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路405可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路405接收后转换为音频数据,再将音频数据输出处理器401处理后,经射频电路404以发送给比如另一计算机设备,或者将音频数据输出至存储器402以便进一步处理。音频电路405还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。
输入单元406可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
电源407用于给计算机设备1000的各个部件供电。可选的,电源407可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源407还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管图4中未示出,计算机设备1000还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种区块同步方法中的步骤。例如,该计算机程序可以执行如下步骤:
确定所述目标区块链节点的待获取区块;
从目标区块链系统中选择至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,其中,所述目标区块链系统为所述目标区块链节点所属的区块链系统;
获取所述同步区块链节点的节点标识,将所述同步区块链节点的节点标识添加到同步节点队列中;
按照所述同步节点队列中所述节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定所述待获取区块中需要从所述节点标识指示的同步区块链节点中同步的目标区块,从所述节点标识指示的同步区块链节点获取对应的目标区块。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种区块同步方法中的步骤,因此,可以实现本申请实施例所提供的任一种区块同步方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种区块同步方法、装置、存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种区块同步方法,其特征在于,应用于目标区块链节点,所述方法包括:
确定所述目标区块链节点的待获取区块;
从目标区块链系统中选择至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,其中,所述目标区块链系统为所述目标区块链节点所属的区块链系统;
获取所述同步区块链节点的节点标识,将所述同步区块链节点的节点标识添加到同步节点队列中;
按照所述同步节点队列中所述节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定所述待获取区块中需要从所述节点标识指示的同步区块链节点中同步的目标区块,从所述节点标识指示的同步区块链节点获取对应的目标区块。
2.根据权利要求1所述的区块同步方法,其特征在于,所述按照所述同步节点队列中所述节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定所述待获取区块中需要从所述节点标识指示的同步区块链节点中同步的目标区块,从所述节点标识指示的同步区块链节点获取对应的目标区块,包括:
从所述同步节点队列中取出位于队首的节点标识作为当前节点标识;
以所述当前节点标识指示的同步区块链节点为当前同步区块链节点,确定所述待获取区块中,需要从所述当前同步区块链节点中同步的目标区块;
从所述当前同步区块链节点获取所述目标区块;
若所述待获取区块中还存在未从同步区块链节点中获取的区块,将所述当前节点标识写入所述同步节点队列的队尾,返回执行所述从所述同步节点队列中取出位于队首的节点标识作为当前节点标识的步骤,直到所述待获取区块对应的目标区块全部获取完为止。
3.根据权利要求2所述的区块同步方法,其特征在于,所述以所述当前节点标识指示的同步区块链节点为当前同步区块链节点,确定所述待获取区块中,需要从所述当前同步区块链节点中同步的目标区块,包括:
以所述当前节点标识指示的同步区块链节点为当前同步区块链节点,确定所述当前同步区块链节点的最大区块同步数量,其中,所述最大区块同步数量为:在一次同步过程中,所述目标区块链节点可从所述当前同步区块链节点同步的区块的最大数量;
基于所述最大区块同步数量和所述目标区块链节点的当前区块高度,确定所述待获取区块中,需要从所述当前同步区块链节点中同步的目标区块。
4.根据权利要求3所述的区块同步方法,其特征在于,所述从所述同步节点队列中取出位于队首的节点标识作为当前节点标识前,还包括:
获取所述同步区块链节点的设备负载信息和设备总资源信息,以及所述区块链系统中区块的区块平均数据量;
基于所述区块平均数据量,以及每个同步区块链节点的所述设备负载信和设备总资源信息,确定每个同步区块链节点的最大区块同步数量;
建立每个同步区块链节点的节点标识和最大区块同步数量的对应关系;
所述确定所述当前同步区块链节点的最大区块同步数量包括:
基于所述对应关系,获取所述当前节点标识对应的最大区块同步数量作为所述当前同步区块链节点的最大区块同步数量。
5.根据权利要求2所述的区块同步方法,其特征在于,所述从所述当前同步区块链节点获取所述目标区块,包括:
基于所述目标区块生成区块同步请求,所述区块同步请求包括所述目标区块中区块的区块同步顺序指示信息;
向所述当前同步区块链节点发送所述区块同步请求,触发所述当前同步区块链节点按照所述区块同步顺序指示信息指示的区块同步顺序,依次向所述目标区块链节点发送对应的区块;
接收所述当前同步区块链节点发送的区块。
6.根据权利要求2所述的区块同步方法,其特征在于,还包括:
在从所述当前同步区块链节点获取所述目标区块的过程中,若出现区块同步异常情况,停止从所述当前同步区块链节点继续获取所述目标区块;
不执行将所述当前节点标识写入所述同步节点队列的队尾的步骤;
返回执行所述从所述同步节点队列中取出位于队首的节点标识作为当前节点标识的步骤。
7.根据权利要求1-6任一项所述的区块同步方法,其特征在于,所述从所述目标区块链系统中选择至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,包括:
确定所述目标区块链系统中的候选区块链节点;
获取所述候选区块链节点的设备负载信息和设备总资源信息,基于所述设备负载信息和设备总资源信息评估所述候选区块链节点的区块数据同步能力;
基于所述区块数据同步能力,从所述候选区块链节点中选择至少两个区块链节点作为所述目标区块链节点的同步区块链节点。
8.根据权利要求1所述的区块同步方法,其特征在于,所述目标区块链为轻节点,所述确定所述目标区块链节点的待获取区块,包括:
确定目标区块链系统的全节点类型的区块链节点的第一区块高度,以及目标区块链节点的第二区块高度;
根据所述第一区块高度以及所述目标区块链节点的第二区块高度,确定所述目标区块链节点的待获取区块头;
所述从目标区块链系统中选择至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,包括:
根据所述待获取区块头,从所述目标区块链系统中选择轻节点类型的至少两个区块链节点,作为所述目标区块链节点的同步区块链节点,其中,所述同步区块链包含所述待获取区块头;
所述按照所述同步节点队列中所述节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定所述待获取区块中需要从所述节点标识指示的同步区块链节点中同步的目标区块,从所述节点标识指示的同步区块链节点获取对应的目标区块,包括:
按照所述同步节点队列中所述节点标识的顺序,依次读取节点标识,并在每次读取节点标识后,确定所述待获取区块头中需要从所述节点标识指示的同步区块链节点中同步的目标区块头,从所述节点标识指示的同步区块链节点获取对应的目标区块头。
9.一种计算机设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如权利要求1-8任一项所述方法的步骤。
10.一种存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1-8任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110476190.4A CN113157810B (zh) | 2021-04-29 | 2021-04-29 | 一种区块同步方法、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110476190.4A CN113157810B (zh) | 2021-04-29 | 2021-04-29 | 一种区块同步方法、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113157810A true CN113157810A (zh) | 2021-07-23 |
CN113157810B CN113157810B (zh) | 2023-02-03 |
Family
ID=76872457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110476190.4A Active CN113157810B (zh) | 2021-04-29 | 2021-04-29 | 一种区块同步方法、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113157810B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114338714A (zh) * | 2021-12-31 | 2022-04-12 | 支付宝(杭州)信息技术有限公司 | 一种区块同步方法、装置、电子设备和存储介质 |
CN114866567A (zh) * | 2022-05-26 | 2022-08-05 | 成都质数斯达克科技有限公司 | 一种抗容灾的多层次区块链网络区块同步方法和装置 |
CN115174594A (zh) * | 2022-07-07 | 2022-10-11 | 广州炒米信息科技有限公司 | 分布式系统的数据同步方法、装置、设备及介质 |
CN116599643A (zh) * | 2023-05-22 | 2023-08-15 | 湖南首辰健康科技有限公司 | 一种区块链数据同步方法、装置、电子设备和介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108600353A (zh) * | 2018-04-12 | 2018-09-28 | 北京天德科技有限公司 | 一种区块链节点的并行块同步方法 |
US20190197130A1 (en) * | 2017-12-21 | 2019-06-27 | Microsoft Technology Licensing, Llc | Ensuring consistency in distributed incremental content publishing |
CN111475575A (zh) * | 2020-04-09 | 2020-07-31 | 腾讯科技(深圳)有限公司 | 基于区块链的数据同步方法、装置及计算机可读存储介质 |
CN111786812A (zh) * | 2020-05-27 | 2020-10-16 | 金蝶软件(中国)有限公司 | 节点管理方法、装置、计算机设备和存储介质 |
CN112714192A (zh) * | 2021-03-25 | 2021-04-27 | 腾讯科技(深圳)有限公司 | 数据同步方法、装置、计算机可读介质及电子设备 |
-
2021
- 2021-04-29 CN CN202110476190.4A patent/CN113157810B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190197130A1 (en) * | 2017-12-21 | 2019-06-27 | Microsoft Technology Licensing, Llc | Ensuring consistency in distributed incremental content publishing |
CN108600353A (zh) * | 2018-04-12 | 2018-09-28 | 北京天德科技有限公司 | 一种区块链节点的并行块同步方法 |
CN111475575A (zh) * | 2020-04-09 | 2020-07-31 | 腾讯科技(深圳)有限公司 | 基于区块链的数据同步方法、装置及计算机可读存储介质 |
CN111786812A (zh) * | 2020-05-27 | 2020-10-16 | 金蝶软件(中国)有限公司 | 节点管理方法、装置、计算机设备和存储介质 |
CN112714192A (zh) * | 2021-03-25 | 2021-04-27 | 腾讯科技(深圳)有限公司 | 数据同步方法、装置、计算机可读介质及电子设备 |
Non-Patent Citations (2)
Title |
---|
HIRONAO TAKAHASHI ET AL.: "Kernel Based Cache Effect on Blockchain Node Synchronization", 《2020 IEEE 9TH GLOBAL CONFERENCE ON CONSUMER ELECTRONICS (GCCE)》 * |
毛宁等: "基于电商平台的区块链状态同步问题研究", 《现代计算机(专业版)》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114338714A (zh) * | 2021-12-31 | 2022-04-12 | 支付宝(杭州)信息技术有限公司 | 一种区块同步方法、装置、电子设备和存储介质 |
CN114338714B (zh) * | 2021-12-31 | 2024-04-02 | 支付宝(杭州)信息技术有限公司 | 一种区块同步方法、装置、电子设备和存储介质 |
CN114866567A (zh) * | 2022-05-26 | 2022-08-05 | 成都质数斯达克科技有限公司 | 一种抗容灾的多层次区块链网络区块同步方法和装置 |
CN114866567B (zh) * | 2022-05-26 | 2023-06-02 | 成都质数斯达克科技有限公司 | 一种抗容灾的多层次区块链网络区块同步方法和装置 |
CN115174594A (zh) * | 2022-07-07 | 2022-10-11 | 广州炒米信息科技有限公司 | 分布式系统的数据同步方法、装置、设备及介质 |
CN115174594B (zh) * | 2022-07-07 | 2024-03-29 | 广州炒米信息科技有限公司 | 分布式系统的数据同步方法、装置、设备及介质 |
CN116599643A (zh) * | 2023-05-22 | 2023-08-15 | 湖南首辰健康科技有限公司 | 一种区块链数据同步方法、装置、电子设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113157810B (zh) | 2023-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113157810B (zh) | 一种区块同步方法、计算机设备和存储介质 | |
US11902450B2 (en) | Blockchain generation method and system, and related device | |
CN111090687A (zh) | 数据处理方法及装置、系统、计算机可读存储介质 | |
CN113342893B (zh) | 基于区块链的节点同步方法、装置、存储介质及服务器 | |
CN111104425A (zh) | 数据处理方法及装置 | |
CN113395165B (zh) | 共识流程处理方法、装置、存储介质及计算机设备 | |
CN113506100A (zh) | 联盟链数据处理方法、装置、计算机设备及存储介质 | |
CN113890753B (zh) | 数字身份管理方法、装置、系统、计算机设备和存储介质 | |
CN113364874B (zh) | 基于区块链的节点同步方法、装置、存储介质及服务器 | |
CN113342776B (zh) | 基于智能合约的交易信息迁移方法、装置、设备及介质 | |
CN112138397B (zh) | 一种触发器管理方法、装置、计算机设备和存储介质 | |
CN112783860A (zh) | 构造镜像数据库的方法、装置、存储介质及计算机设备 | |
CN113806801B (zh) | 交易信息上链方法、装置、计算机设备及存储介质 | |
CN114844911B (zh) | 数据存储方法、装置、电子设备及计算机可读存储介质 | |
CN118467637A (zh) | 一种数据库同步系统、方法、装置、电子设备及介质 | |
CN113360883A (zh) | 一种智能合约的处理方法、装置、计算机设备及存储介质 | |
CN115622968A (zh) | 一种黑产行为阻断方法、装置、计算机设备及存储介质 | |
CN114168332A (zh) | 任务处理方法、装置、电子设备和存储介质 | |
CN115809269A (zh) | 一种业务数据的查询方法、装置、计算机设备及存储介质 | |
CN114785722A (zh) | 监控数据处理方法、装置及计算机可读存储介质 | |
CN113343292A (zh) | 交易编号处理方法、装置、存储介质及计算机设备 | |
CN117478590A (zh) | 报文处理方法、装置、电子设备及存储介质 | |
CN115378803A (zh) | 日志管理方法、装置、区块链节点和存储介质 | |
CN116233130A (zh) | 基于区块链的注册方法、装置、电子设备和可读存储介质 | |
CN114849241A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |