CN114281542A - 一种区块链节点的区块数据同步方法及装置 - Google Patents
一种区块链节点的区块数据同步方法及装置 Download PDFInfo
- Publication number
- CN114281542A CN114281542A CN202111612876.8A CN202111612876A CN114281542A CN 114281542 A CN114281542 A CN 114281542A CN 202111612876 A CN202111612876 A CN 202111612876A CN 114281542 A CN114281542 A CN 114281542A
- Authority
- CN
- China
- Prior art keywords
- node
- request
- block
- synchronization
- synchronized
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种区块链节点的区块数据同步方法及装置,包括:待同步节点在区块数据同步前,通过熟知节点向各区块链节点发送探测请求;探测请求用于获取区块链节点的状态信息;待同步节点基于各区块链节点反馈的响应请求,确定首轮同步节点和节点轮换次数N;其中,首轮同步节点数量越多,节点轮换次数越少;待同步节点基于第i轮节点轮换中各第i轮同步节点的区块同步情况,确定第i+1轮同步节点,直至N轮区块同步结束;i大于等于0。以此提升区块数据同步的效率,避免长时间增加同步节点负载,降低同步节点对区块共识的影响,同时可以多次选择负载较低的区块链节点,增加确定各区块链节点负载情况的实时性,提升区块数据同步的效率。
Description
技术领域
本发明涉及金融科技(Fintech)领域,尤其涉及一种区块链节点的区块数据同步方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术(例如:区块链、云计算或大数据)应用在金融领域,传统金融业正在逐步向金融科技转变,大数据技术也不例外,但由于金融、支付行业的安全性、实时性要求,也对大数据技术中区块数据同步提出了更高的要求。
在区块链系统中,不同区块链节点对应的区块高度应该一致,但在某一些场景中会存在区块高度不一致的区块链节点(如区块链系统中加入新增区块链节点、区块链节点延迟等)。
为了使区块高度不一致的区块链节点的区块高度一致,现有技术中一般是由区块高度不一致的区块链节点向同步节点(即区块高度一致的区块链节点)获取区块数据,进行区块数据同步,从而实现各区块链节点的区块高度一致。
但现有技术中对于同步节点的选择,一般是通过随机选取的方式,无法确定同步节点的负载情况,存在选择的同步节点负载较高的情况,影响区块数据同步的效率;且在区块数据同步的过程中,不进行区块链节点更换,因为区块数据同步时,会增加同步节点负载,导致长时间增加同步节点负载,影响同步节点的共识,影响区块链系统的共识效率。
发明内容
本发明实施例提供一种区块链节点的区块数据同步方法及装置,用于实现。
第一方面,本发明实施例提供一种区块链节点的区块数据同步方法,包括:
待同步节点在区块数据同步前,通过熟知节点向各区块链节点发送探测请求;所述探测请求用于获取区块链节点的状态信息;
所述待同步节点基于各区块链节点反馈的响应请求,确定首轮同步节点和节点轮换次数N;其中,首轮同步节点数量越多,节点轮换次数越少;
所述待同步节点基于第i轮节点轮换中各第i轮同步节点的区块同步情况,确定第i+1轮同步节点,直至N轮区块同步结束;i大于等于0。
上述技术方案中,通过各区块链节点反馈的响应请求确定同步节点,以防止选择的同步节点负载较高,即选择负载较低的区块链节点作为同步节点,进而提升区块数据同步的效率;通过节点轮换实现更换进行区块数据同步的同步节点,以此避免长时间增加同步节点负载,降低同步节点对区块共识的影响,同时可以多次选择负载较低的区块链节点,增加确定各区块链节点负载情况的实时性,提升区块数据同步的效率。
可选的,通过熟知节点向各区块链节点发送探测请求,包括:
所述待同步节点构建探测请求,并将所述探测请求发送至所述待同步节点的熟知节点;
针对任一熟知节点,所述熟知节点确定第一记录中未记录所述探测请求;所述第一记录用于记录已处理的探测请求;所述熟知节点基于第二记录,向尚未传播所述探测请求的所述熟知节点的熟知节点发送所述探测请求;所述第二记录用于记录已传播探测请求的区块链节点;所述熟知节点更新所述第一记录和所述第二记录并确定响应请求。
上述技术方案中,第一记录用于记录已处理的探测请求,第二记录用于记录已传播探测请求的区块链节点,针对待同步节点的任一熟知节点,该熟知节点在得到探测请求之后,访问第一记录和第二记录,以此避免重复处理相同的探测请求,避免向已传播探测请求的区块链节点重复传播探测请求,降低各区块链节点的传播重复性,避免浪费计算资源。
可选的,所述待同步节点构建探测请求,包括:
所述待同步节点根据探测序号、传播列表和所述待同步节点的通信地址生成探测请求;所述探测序号用于指示节点轮换的次序;所述传播列表用于记录已发送所述探测请求的区块链节点。
上述技术方案中,探测序号用于指示节点轮换的次序,以此实现每次节点轮换再次获取区块链节点反馈的响应请求,重新确定同步节点,以此避免长时间增加同步节点负载,降低同步节点对区块共识的影响,提升区块数据同步的效率;传播列表用于记录已发送所述探测请求的区块链节点,避免重复向已传播的区块链节点重复传播探测请求,避免浪费计算资源;通过待同步节点的通信地址可以使区块链节点可以直接向待同步节点进行反馈,提升反馈响应请求的效率,提升待同步节点确定同步节点的效率,进而增加数据同步的效率。
可选的,所述响应请求包括:区块链节点的通信地址、负载指数、响应请求的构造时间、最大区块高以及所述探测请求的探测序号;
所述待同步节点基于各区块链节点反馈的响应请求,确定首轮同步节点,包括:
所述待同步节点从各区块链节点反馈的响应请求中,确定出负载指数满足第一设定条件且请求传播时长满足第二设定条件的响应请求;请求传播时长是根据请求的构造时间和请求的接收时间确定的;
所述待同步节点将满足所述第一设定条件和满足第二设定条件的响应请求对应的区块链节点确定为首轮同步节点。
上述技术方案中,通过负载指数选择负载较小的区块链节点作为同步节点;通过请求传播时长选择数据传输速度较快的区块链节点作为同步节点,以此提升区块数据同步效率。
可选的,所述待同步节点基于第i轮节点轮换中各第i轮同步节点的区块同步情况,确定第i+1轮同步节点,包括:
所述待同步节点向未作为第i轮同步节点的区块链节点发送询问请求;
针对任一第i轮同步节点,所述待同步节点确定所述第i轮同步节点进行同步的第i轮区块数据,并接收所述第i轮同步节点发送的第i轮区块数据及所述第i轮同步节点在第i轮区块数据同步结束时发送的携带状态信息的反馈请求;
所述待同步节点根据各询问请求和各反馈请求,确定第i+1轮同步节点。
上述技术方案中,通过向未作为第i轮同步节点的区块链节点发送询问请求以及区块数据同步结束时第i轮同步节点发送的状态信息确定第i+1轮同步节点,以此实现重新确定同步节点,以此避免长时间增加同步节点负载,降低同步节点对区块共识的影响,提升区块数据同步的效率;
可选的,所述待同步节点确定所述第i轮同步节点进行同步的第i轮区块数据,包括:
所述待同步节点根据响应请求中最大区块高和节点轮换次数确定每次节点轮换的待同步区块数据的个数;所述节点轮换次数与首轮同步节点的数量成反比;
所述待同步节点根据每次节点轮换的待同步区块数据的个数和所述第i轮同步节点的数量确定第i轮同步节点进行同步的第i轮区块数据。
上述技术方案中,节点轮换次数与首轮同步节点的数量成反比,也就是说,若首轮同步节点的数量较少,则表征区块链系统的整体资源较紧张,符合第一设定条件和第二设定条件的区块链节点较少,此时适应性的增大节点轮换次数,以此保证区块链系统中各区块链节点的负载均衡,避免长时间增加同步节点负载,降低同步节点对区块共识的影响。
可选的,所述待同步节点根据各询问请求和各反馈请求,确定第i+1轮同步节点,包括:
所述待同步节点接收未作为第i轮同步节点的区块链节点根据所述询问请求反馈的响应请求;
所述待同步节点从根据所述询问请求反馈的响应请求和所述第i轮同步节点的反馈请求中,确定请求传播时长满足第三设定条件的响应请求和/或反馈请求;
所述待同步节点根据负载指数从满足第三设定条件的响应请求和/或反馈请求中确定第i+1轮同步节点。
上述技术方案中,通过负载指数选择负载较小的区块链节点作为同步节点;通过请求传播时长选择数据传输速度较快的区块链节点作为同步节点,以此提升区块数据同步效率;通过不同的设定条件以提升确定同步节点的灵活性。
第二方面,本发明实施例提供一种区块链节点的区块数据同步装置,包括:
发送模块,用于在区块数据同步前,通过熟知节点向各区块链节点发送探测请求;所述探测请求用于获取区块链节点的状态信息;
处理模块,用于基于各区块链节点反馈的响应请求,确定首轮同步节点和节点轮换次数N;其中,首轮同步节点数量越多,节点轮换次数越少;
基于第i轮节点轮换中各第i轮同步节点的区块同步情况,确定第i+1轮同步节点,直至N轮区块同步结束;i大于等于0。
可选的,所述发送模块具体用于:
构建探测请求,并将所述探测请求发送至所述待同步节点的熟知节点。
可选的,所述发送模块具体用于:
根据探测序号、传播列表和所述待同步节点的通信地址生成探测请求;所述探测序号用于指示节点轮换的次序;所述传播列表用于记录已发送所述探测请求的区块链节点。
可选的,所述响应请求包括:区块链节点的通信地址、负载指数、响应请求的构造时间、最大区块高以及所述探测请求的探测序号;
所述处理模块具体用于:
从各区块链节点反馈的响应请求中,确定出负载指数满足第一设定条件且请求传播时长满足第二设定条件的响应请求;请求传播时长是根据请求的构造时间和请求的接收时间确定的;
将满足所述第一设定条件和满足第二设定条件的响应请求对应的区块链节点确定为首轮同步节点。
可选的,所述处理模块具体用于:
向未作为第i轮同步节点的区块链节点发送询问请求;
针对任一第i轮同步节点,确定所述第i轮同步节点进行同步的第i轮区块数据,并接收所述第i轮同步节点发送的第i轮区块数据及所述第i轮同步节点在第i轮区块数据同步结束时发送的携带状态信息的反馈请求;
根据各询问请求和各反馈请求,确定第i+1轮同步节点。
可选的,所述处理模块具体用于:
根据响应请求中最大区块高和节点轮换次数确定每次节点轮换的待同步区块数据的个数;所述节点轮换次数与首轮同步节点的数量成反比;
根据每次节点轮换的待同步区块数据的个数和所述第i轮同步节点的数量确定第i轮同步节点进行同步的第i轮区块数据。
可选的,所述处理模块具体用于:
接收未作为第i轮同步节点的区块链节点根据所述询问请求反馈的响应请求;
从根据所述询问请求反馈的响应请求和所述第i轮同步节点的反馈请求中,确定请求传播时长满足第三设定条件的响应请求和/或反馈请求;
根据负载指数从满足第三设定条件的响应请求和/或反馈请求中确定第i+1轮同步节点。
第三方面,本发明实施例还提供一种计算机设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块链节点的区块数据同步。
第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述区块链节点的区块数据同步。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种系统架构示意图;
图2为本发明实施例提供的一种区块链节点的区块数据同步方法的流程示意图;
图3为本发明实施例提供的一种探测请求传播的示意图;
图4为本发明实施例提供的一种探测请求传播的示意图;
图5为本发明实施例提供的一种区块链节点的区块数据同步装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在区块链系统中,不同区块链节点对应的区块高度应该一致,但在某一些场景中会存在区块高度不一致的区块链节点(如区块链系统中加入新增区块链节点、区块链节点延迟等)。
为了使区块高度不一致的区块链节点的区块高度一致,现有技术中一般是由区块高度不一致的区块链节点向同步节点(即区块高度一致的区块链节点)获取区块数据,进行区块数据同步,从而实现各区块链节点的区块高度一致。
以新增区块链节点A为例,先确定同步节点B的最大区块高度,然后将最大区块高度进行分片,例如最大区块高度为100,分成10个分片,即1-10、11-20、……、91-100,然后根据分片在多个同步节点中获取区块高度对应的区块数据,以此实现新增区块链节点A的区块数据同步。
但是,现有技术中对于同步节点的选择,一般是通过随机选取的方式,无法确定同步节点的负载情况,存在选择的同步节点负载较高的情况,影响区块数据同步的效率;例如,区块链节点B的负载较高,但被选择为同步节点,从而在进行新增区块链节点A的区块数据同步时,增加了区块链节点B的负载,由于共识算法和相关交易打包验证算法的复杂性,区块链节点在负责执行共识和交易打包期间负载会迅速增加,进而使区块链节点B的负载情况“雪上加霜”,降低了区块链节点B在区块链系统中的共识效率。
另外,在区块数据同步的过程中,不进行同步节点更换;例如,现有技术中最大区块高度一般是成千上万,假设区块链系统中的最大区块高度为10000,即使将待同步区块数据分为10个分片,每个分片也需要1000个待同步区块数据,也就是说,新增区块链节点需要在一个同步节点中获取1000个待同步区块数据,无疑会长时间增加同步节点的负载;没有根据区块链系统的全局负载作为依据,无法均衡区块链系统负载,导致影响同步节点的共识,影响区块链系统的共识效率。
因此,现亟需一种区块链节点的区块数据同步方法,实现根据区块链节点的负责情况选择同步节点,避免长时间增加同步节点负载,降低同步节点对区块共识的影响,提升区块数据同步的效率。
图1示例性的示出了本发明实施例所适用的一种系统架构,该系统架构包括区块链系统100。
其中,区块链系统100包括普通节点和骨干节点;骨干节点一般为参与区块链系统创建的区块链节点,骨干节点之间一般直接连接或者间接连接;例如,骨干节点1与骨干节点2直接连接,骨干节点2和骨干节点4间接连接。
普通节点一般为区块链系统创建后加入的区块链节点,加入时与多个区块链节点直接连接,与其他节点间接连接;例如,普通节点4与骨干节点1和骨干节点4直接连接,普通节点4与其他区块链节点(如骨干节点2、骨干节点3、普通节点1等)间接连接。
本发明实施例中所述的待同步节点可以是任一普通节点或任一骨干节点。
需要说明的是,上述图1所示的结构仅是一种示例,仅示例性示出4个骨干节点和4个普通节点,但本发明实施例对骨干节点和普通节点的数量不做限定。
基于上述描述,图2示例性的示出了本发明实施例提供的一种区块链节点的区块数据同步方法的流程示意图,该流程可由区块链节点的区块数据同步装置执行。
如图2所示,该流程具体包括:
步骤210,待同步节点在区块数据同步前,通过熟知节点向各区块链节点发送探测请求。
本发明实施例中,探测请求是由待同步节点构建的,用于获取区块链节点的状态信息。
步骤220,所述待同步节点基于各区块链节点反馈的响应请求,确定首轮同步节点和节点轮换次数N。
本发明实施例中,待同步节点基于各响应请求,通过设定条件确定首轮同步节点,且首轮同步节点数量越多,节点轮换次数越少。
步骤230,所述待同步节点基于第i轮节点轮换中各第i轮同步节点的区块同步情况,确定第i+1轮同步节点,直至N轮区块同步结束。
本发明实施例中,i大于等于0;当i=0时为首轮,也就是说,第0轮同步节点为首轮同步节点。
在步骤210中,待同步节点根据预设数据结构创建探测请求,包括指示节点轮换的次序以及待同步节点的唯一标识。
具体的,待同步节点根据探测序号、传播列表和待同步节点的通信地址生成探测请求;其中,探测序号用于指示节点轮换的次序;传播列表用于记录已发送所述探测请求的区块链节点。
表1为本发明实施例示例性示出的一种探测请求;如下述表1所示。
表1
其中,Index字段表征节点轮换的次序;具体的,每一届节点轮换时,向区块链节点发起当前次序的探测请求,以获取实时的各区块链节点的状态信息,进而为确定同步节点提供依据。例如,确定首轮同步节点时的探测请求的Index字段值为0;在根据首轮同步节点进行区块数据同步后,进行第1轮节点轮换,则第1轮节点轮换的同步节点的探测请求的Index字段值为1。即第i届节点轮换的探测序号将在第i-1届节点轮换的探测序号基础上自增,自增数为1;同样的,自增数也可以为2,在此对自增数不进行限定。
SourceAdd字段表征待同步节点的通信地址,如通信地址为P2P连接信息;其格式为IP地址+英文冒号+端口。以使区块链系统中各区块链节点在接收到探测请求后,通过该通信地址向待同步节点反馈响应请求;且SourceAdd字段和Index字段用于作为探测请求的唯一标识。
HistoryAdds字段记录已发送探测请求的区块链节点。以待同步节点为区块链系统中的新增节点为例,假设探测请求由新增节点A发出,经区块链节点B转发,最终到达区块链节点C;则新增节点A发出的探测请求中,HistoryAdds存储的列表为{A的网络通信地址};区块链节点B发出的探测请求中,HistoryAdds存储的列表为{A的网络通信地址,B的网络通信地址};若区块链节点C对该探测请求进行传播,则区块链节点C发出的探测请求中,HistoryAdds存储的列表为{A的网络通信地址,B的网络通信地址,C的网络通信地址},以此类推,在此不做赘述。
针对确定首轮同步节点时,待同步节点创建探测请求后,待同步节点通过熟知节点进行传播;其中,熟知节点为具有直接连接关系的区块链节点。
具体的,待同步节点构建探测请求,并将探测请求发送至所述待同步节点的熟知节点;针对任一熟知节点,熟知节点确定第一记录中未记录探测请求;第一记录用于记录已处理的探测请求;熟知节点基于第二记录,向尚未传播探测请求的所述熟知节点的熟知节点发送探测请求;第二记录用于记录已传播探测请求的区块链节点;熟知节点更新第一记录和所述第二记录并确定响应请求。
基于上述图1进行举例,待同步节点为普通节点4,构建普通节点4的探测请求I(Index=0;SourceAdd=普通节点4的通信地址;HistoryAdds={普通节点4的通信地址});普通节点4获取熟知节点列表,普通节点4熟知节点列表L是在普通节点4加入区块链系统时创建的;如熟知节点列表L的信息为:{骨干节点1的P2P通信端口,骨干节点4的P2P通信端口}。
普通节点4遍历普通节点4熟知节点列表,将探测请求a1发送至熟知节点列表L1中的各区块链节点,即将探测请求a1通过骨干节点1的P2P通信端口发送至骨干节点1,通过骨干节点4的P2P通信端口发送至骨干节点4。
为了更好的阐述上述技术方案,图3为本发明实施例示例性示出的一种探测请求传播的示意图,如图3所示。
待同步节点获取待同步节点的熟知节点列表L1;在熟知节点列表L1中按顺序取出某一熟知节点,并对其赋值为目标节点X1(即待传播的区块链节点,如X1=骨干节点1的IP地址:骨干节点1的P2P通信端口)。
待同步节点确定目标节点X1是否为空,若是,则表征已将探测请求传播至熟知节点列表L1中的各区块链节点中,结束流程;否则创建探测请求I1,以待同步节点为上述图1的普通节点4为例,探测请求I1中的Index=0,SourceAdd=普通节点4的IP地址:普通节点4的P2P通信端口,HistoryAdds={普通节点4的IP地址:普通节点4的P2P通信端口}。最后将探测请求I1发送至目标节点X1。
待同步节点的熟知节点在接收到探测请求之后,将自身的通信地址记录在探测请求的传播列表中,实现对探测请求进行更新,并基于探测请求构建对应的响应请求。
其中,响应请求包括:区块链节点的通信地址、负载指数、响应请求的构造时间、最大区块高以及所述探测请求的探测序号。
表2为本发明实施例示例性示出的一种响应请求;如下述表2所示。
表2
其中,Index字段表征节点轮换的次序,与探测请求的Index字段值相对应。
ResponseAdd字段表征创建响应请求的区块链节点的通信地址。用于作为发出响应请求的唯一标识,其格式为:IP地址+英文冒号+端口;Index字段和ResponseAdd字段作为响应请求的唯一标识。
Busy字段表征负载指数,用于度量区块链节点当前的负载情况,计算方式为:Busy=(Cup使用率*100+内存使用率*100)/2。
CreateTime字段表征响应请求的构造时间。
CurrentHigh字段表征区块链节点中的最大区块高度,即区块链节点确认并同步到本地账本中区块的个数。
本发明实施例中,各区块链节点根据自身的第一记录避免重复处理相同的探测请求;以上述图1举例来说,假设探测请求(Index探测序号为i)从新增节点S1(普通节点4)发出,被区块链节点S2(骨干节点1)和区块链节点S3(骨干节点3)接收。
假设区块链节点S2负载较小,处理探测请求数据较快;区块链节点S3负载较大,处理探测请求数据较慢。也就是说,区块链节点S3会先收到新增节点S1发送的探测请求I1;在区块链节点S2处理探测请求I1结束后,区块链节点S3会后收到区块链节点S2发送的探测请求I2。
区块链节点S3在处理探测请求I1时,访问第一记录,确定第一记录未存在与探测请求I1相同的Index字段值和SourceAdd字段值,则处理探测请求I1,并将探测请求I1记录到第一记录中,如记录在Map_Index中(Map_Index={<S1的IP地址:S1的P2P通信端口,i>});区块链节点S3在处理探测请求I2时,访问第一记录,确定第一记录存在与探测请求I2相同的Index字段值和SourceAdd字段值(即探测请求I1),因此区块链节点S3不对探测请求I2进行处理,以此避免重复处理相同的探测请求。
本发明实施例中,任一区块链节点接收到探测请求后,将探测请求中的HistoryAdds字段值记录到自身的第二记录中,并根据第二记录更新探测请求,再将更新后的探测请求进行传播。
进一步地,区块链节点对自身的熟知节点在进行传播,以此将探测请求传播至区块链系统中各区块链节点。
为了更好的阐述上述技术方案,基于上述图3,图4为本发明实施例示例性示出的一种探测请求传播的示意图,如图4所示。
待同步节点的熟知节点X1访问自身的第二记录,确定出记录在第二记录的区块链节点。
熟知节点X1获取熟知节点X1的熟知节点列表L2,并将熟知节点列表L2中记录在第二记录的区块链节点剔除,得到熟知节点列表L`2。
在熟知节点列表L`2中按顺序取出某一熟知节点,并对其赋值为目标节点X2(如图1所示,X1为骨干节点1,X2为骨干节点2)。
熟知节点X1确定目标节点X2是否为空,若是,则表征已将探测请求传播至熟知节点列表L`2中的各区块链节点中,结束流程;否则更新探测请求I1,得到探测请求I2;探测请求I2中的Index=0,SourceAdd=普通节点4的IP地址:普通节点4的P2P通信端口,HistoryAdds={普通节点4的IP地址:普通节点4的P2P通信端口,骨干节点1的IP地址:骨干节点1的P2P通信端口}。最后将探测请求I2发送至目标节点X2;其中,更新探测请求时不更改探测请求的Index字段值和SourceAdd字段值。
本发明实施例中,各区块链节点根据自身的第二记录避免向重复的区块链节点进行传送探测请求;以上述图1举例来说,假设探测请求(Index探测序号为i)从新增节点S1(普通节点4)发出,被区块链节点S2(骨干节点1)和区块链节点S3(骨干节点3)接收。假设探测请求(Index探测序号为i)从新增节点S1(普通节点4)发出,被区块链节点S2(骨干节点1)和区块链节点S3(骨干节点3)接收。
假设区块链节点S2负载较小,处理探测请求数据较快;区块链节点S3负载较大,处理探测请求数据较慢。也就是说,区块链节点S3会先收到新增节点S1发送的探测请求I1;在区块链节点S2处理探测请求I1结束后,区块链节点S3会后收到区块链节点S2发送的探测请求I2。
区块链节点S3在接收探测请求I1和/或探测请求I2时,将探测请求I1和/或探测请求I2的HistoryAdds字段值记录值自身的第二记录(如第二记录为Map_Adds)中,此时区块链节点S3的Map_Adds={<S1的IP地址:S1的P2P通信端口,i>,<S2的IP地址:S2的P2P通信端口,i>};并更新探测请求,得到探测请求I3。
区块链节点S3在传播探测请求I3之前,访问自身的Map_Adds,由于新增节点S1和区块链节点S2都被记录在区块链节点S3的Map_Adds中。此时,区块链节点S3不会将SourceAdd字段值和Index字段值一致的探测请求发送给新增节点S1和区块链节点S2,以此避免探测请求在区块链节点中重复传播。
本发明实施例中,任一区块链节点针对探测请求的处理和探测请求的传播两个流程为异步执行,以此提高区块数据同步的并行度。
在步骤220中,待同步节点根据各响应请求的负载指数确定选中响应请求,并根据选中响应请求确定选中响应请求对应的同步节点。
具体的,待同步节点从各区块链节点反馈的响应请求中,确定出负载指数满足第一设定条件且请求传播时长满足第二设定条件的响应请求;请求传播时长是根据请求的构造时间和请求的接收时间确定的;将满足第一设定条件和满足第二设定条件的响应请求对应的区块链节点确定为首轮同步节点。
进一步地,待同步节点在接收各区块链节点反馈的响应请求后,确定各响应请求的负载指数,并记录接收各响应请求对应的接收时间;将各响应请求对应的接收时间与各响应请求的构造时间作差,得到各响应请求对应的请求传播时长。
在一种可实施的方式中,待同步节点可以预设等待时长,仅记录预设等待时长内的响应请求;例如,预设等待时长命名为Wait_Time,初始值为-1,若在一个或多个预设等待时长内,未接收到响应请求,则获取响应请求流程结束。
进一步进行举例,在获取响应请求流程结束时,获取的响应请求集合命名为RespList,针对RespList中的任一响应请求R,计算响应请求R的请求传播时间T=Rt-Ct;其中,Rt为响应请求R的接收时间,Ct为响应请求R的构造时间,也就是创建响应请求R的时长。
在本发明实施例中,第一设定条件为响应请求的负载指数不大于第一阈值;其中,第一阈值是根据经验预设的值,如70%、80%等,在此不做限定。
第二设定条件为响应请求的请求传播时长不大于第二阈值;其中,第二阈值是根据满足第一设定条件的响应请求的请求传播时长确定的,例如将满足第一设定条件的响应请求的请求传播时长的平均值作为第二阈值;或者根据经验预设的值作为第二阈值,在此不做限定。
举例来说,待同步节点共接收10个响应请求,分别为R1、R2、……、R9;将R1、R2、……、R9作为全量响应请求集合,命名为RespList_All;先确定出满足第一设定条件(如负载指数不大于70%)的响应请求,分别为R3、R5、R6、R7;确定响应请求R3、R5、R6和R7的请求传播时长的平均时长为Ta,将Ta*3/2作为第二阈值,在响应请求R3、R5、R6和R7中确定出满足第二设定条件(请求传播时长不大于Ta*3/2)的响应请求,分别为R3、R5、R7,将R3、R5、R7作为选中响应请求集合,命名为RespList_Select;将非选中响应请求(R1、R2、R4、R6、R8、R9)作为非选中响应请求集合,命名为RespList_Delete。
也就是说,将负载指数大于70%的响应请求以及请求传播时长大于Ta*3/2的响应请求记录到非选中响应请求集合。
在本发明实施例中,待同步节点将选中响应请求对应的区块链节点确定为首轮同步节点,根据各响应请求的数量和选中响应请求的数量确定节点轮换次数,其中,节点轮换次数与首轮同步节点的数量成反比;基于上述实例进行举例,选中响应请求(R3、R5、R7)的数量为3,各响应请求(R1、R2、……、R9)的数量为9,则节点轮换次数为9/3=3。
在得到节点轮换次数之后,确定需要从同步节点进行同步的区块数据;具体的,待同步节点根据响应请求中最大区块高和节点轮换次数确定每次节点轮换的待同步区块数据的个数;根据每次节点轮换的待同步区块数据的个数和第i轮同步节点的数量确定第i轮同步节点进行同步的第i轮区块数据。
本发明实施例中,每次节点轮换的待同步区块数据的个数=最大区块高/(节点轮换次数N+1);基于上述示例进行举例,假设响应请求中最大区块高为4000,节点轮换次数为3,则每次节点轮换的4000/4=1000;也就是说,第0次节点轮换时,待同步节点所需要同步的区块数据为区块高1至1000;第1次节点轮换时,待同步节点所需要同步的区块数据为区块高1001至2000;第2次节点轮换时,待同步节点所需要同步的区块数据为区块高2001至3000;第3次节点轮换时,待同步节点所需要同步的区块数据为区块高3001至4000。
针对任一次节点轮换中,基于待同步节点所需要同步的区块数据确定待同步节点从各同步节点进行同步的区块数据;具体的,针对任一第i轮同步节点,待同步节点确定第i轮同步节点进行同步的第i轮区块数据;例如,在第0次节点轮换时,各同步节点包括n1和n2,也就是首轮同步节点为n1和n2,则确定待同步节点从首轮同步节点n1进行同步的区块数据为区块高1至500;确定待同步节点从首轮同步节点n2进行同步的区块数据为区块高501至1000。
在步骤230中,在第i轮区块数据同步完成后,确定第i+1轮同步节点,从而完成第i+1轮区块数据同步,以此类推,直至N轮区块同步结束。
具体的,待同步节点向未作为第i轮同步节点的区块链节点发送询问请求;接收第i轮同步节点发送的第i轮区块数据及第i轮同步节点在第i轮区块数据同步结束时发送的携带状态信息的反馈请求;根据各询问请求和各反馈请求,确定第i+1轮同步节点。
进一步地,待同步节点接收未作为第i轮同步节点的区块链节点根据询问请求反馈的响应请求;待同步节点从根据询问请求反馈的响应请求和第i轮同步节点的反馈请求中,确定请求传播时长满足第三设定条件的响应请求和/或反馈请求;负载指数从满足第三设定条件的响应请求和/或反馈请求中确定第i+1轮同步节点。
其中,第三设定条件为请求传播时长不大于第三阈值,第三阈值为响应请求和反馈请求的请求传播时长的中位数,也可以是根据经验预设的值,在此不做限定。
举例来说,在第i轮节点轮换的区块数据同步完成后,第i轮同步节点会通过待同步节点的通信地址发送第i+1轮响应请求,以实时反映当前的状态信息;对于非第i轮同步节点,由待同步节点通过对应的通信地址将询问请求发送至各非第i轮同步节点,不再需要通过熟知节点传播,以使各非第i轮同步节点返回第i+1轮反馈请求,其中,反馈请求与响应请求的数据结构一致。
然后根据第三设定条件从第i+1轮响应请求和第i+1轮反馈请求中确定满足第三设定条件的响应请求和/或反馈请求,将满足第三设定条件的响应请求和/或反馈请求作为第i+1轮选中响应请求。
按照负载指数从小到大的顺序,从各第i+1轮选中响应请求中确定出首轮同步节点数量的第i+1轮选中响应请求,并将首轮同步节点数量的第i+1轮选中响应请求对应的区块链节点确定为第i+1轮同步节点。
本发明实施例中,同步区块数据之前,先以网络链路质量和节点负载情况度量区块链系统的负载情况;然后根据区块链系统的负载情况确定节点轮换,并保证每次节点轮换时都度量区块链系统的负载情况,选择网络良好,负载较优的节点作为同步节点,进而进行区块数据同步。避免了区块数据同步对区块链系统共识造成的影响,且提高了区块数据同步的效率,同时避免了长时间占用一个区块链节点,提高了区块数据同步的灵活性。
基于相同的技术构思,图5示例性的示出了本发明实施例提供的一种区块链节点的区块数据同步装置的结构示意图,该装置可以执行区块链节点的区块数据同步方法的流程。
如图5所示,该装置具体包括:
发送模块510,用于在区块数据同步前,通过熟知节点向各区块链节点发送探测请求;所述探测请求用于获取区块链节点的状态信息;
处理模块520,用于基于各区块链节点反馈的响应请求,确定首轮同步节点和节点轮换次数N;其中,首轮同步节点数量越多,节点轮换次数越少;
基于第i轮节点轮换中各第i轮同步节点的区块同步情况,确定第i+1轮同步节点,直至N轮区块同步结束;i大于等于0。
可选的,所述发送模块510具体用于:
构建探测请求,并将所述探测请求发送至所述待同步节点的熟知节点。
可选的,所述发送模块510具体用于:
根据探测序号、传播列表和所述待同步节点的通信地址生成探测请求;所述探测序号用于指示节点轮换的次序;所述传播列表用于记录已发送所述探测请求的区块链节点。
可选的,所述响应请求包括:区块链节点的通信地址、负载指数、响应请求的构造时间、最大区块高以及所述探测请求的探测序号;
所述处理模块520具体用于:
从各区块链节点反馈的响应请求中,确定出负载指数满足第一设定条件且请求传播时长满足第二设定条件的响应请求;请求传播时长是根据请求的构造时间和请求的接收时间确定的;
将满足所述第一设定条件和满足第二设定条件的响应请求对应的区块链节点确定为首轮同步节点。
可选的,所述处理模块520具体用于:
向未作为第i轮同步节点的区块链节点发送询问请求;
针对任一第i轮同步节点,确定所述第i轮同步节点进行同步的第i轮区块数据,并接收所述第i轮同步节点发送的第i轮区块数据及所述第i轮同步节点在第i轮区块数据同步结束时发送的携带状态信息的反馈请求;
根据各询问请求和各反馈请求,确定第i+1轮同步节点。
可选的,所述处理模块520具体用于:
根据响应请求中最大区块高和节点轮换次数确定每次节点轮换的待同步区块数据的个数;所述节点轮换次数与首轮同步节点的数量成反比;
根据每次节点轮换的待同步区块数据的个数和所述第i轮同步节点的数量确定第i轮同步节点进行同步的第i轮区块数据。
可选的,所述处理模块520具体用于:
接收未作为第i轮同步节点的区块链节点根据所述询问请求反馈的响应请求;
从根据所述询问请求反馈的响应请求和所述第i轮同步节点的反馈请求中,确定请求传播时长满足第三设定条件的响应请求和/或反馈请求;
根据负载指数从满足第三设定条件的响应请求和/或反馈请求中确定第i+1轮同步节点。
基于相同的技术构思,本发明实施例还提供一种计算机设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块链节点的区块数据同步。
基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述区块链节点的区块数据同步。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种区块链节点的区块数据同步方法,其特征在于,包括:
待同步节点在区块数据同步前,通过熟知节点向各区块链节点发送探测请求;所述探测请求用于获取区块链节点的状态信息;
所述待同步节点基于各区块链节点反馈的响应请求,确定首轮同步节点和节点轮换次数N;其中,首轮同步节点数量越多,节点轮换次数越少;
所述待同步节点基于第i轮节点轮换中各第i轮同步节点的区块同步情况,确定第i+1轮同步节点,直至N轮区块同步结束;i大于等于0。
2.如权利要求1所述的方法,其特征在于,如权利要求1所述的方法,其特征在于,通过熟知节点向各区块链节点发送探测请求,包括:
所述待同步节点构建探测请求,并将所述探测请求发送至所述待同步节点的熟知节点;
针对任一熟知节点,所述熟知节点确定第一记录中未记录所述探测请求;所述第一记录用于记录已处理的探测请求;所述熟知节点基于第二记录,向尚未传播所述探测请求的所述熟知节点的熟知节点发送所述探测请求;所述第二记录用于记录已传播探测请求的区块链节点;所述熟知节点更新所述第一记录和所述第二记录并确定响应请求。
3.如权利要求2所述的方法,其特征在于,所述待同步节点构建探测请求,包括:
所述待同步节点根据探测序号、传播列表和所述待同步节点的通信地址生成探测请求;所述探测序号用于指示节点轮换的次序;所述传播列表用于记录已发送所述探测请求的区块链节点。
4.如权利要求1所述的方法,其特征在于,所述响应请求包括:区块链节点的通信地址、负载指数、响应请求的构造时间、最大区块高以及所述探测请求的探测序号;
所述待同步节点基于各区块链节点反馈的响应请求,确定首轮同步节点,包括:
所述待同步节点从各区块链节点反馈的响应请求中,确定出负载指数满足第一设定条件且请求传播时长满足第二设定条件的响应请求;请求传播时长是根据请求的构造时间和请求的接收时间确定的;
所述待同步节点将满足所述第一设定条件和满足第二设定条件的响应请求对应的区块链节点确定为首轮同步节点。
5.如权利要求1至4任一项所述的方法,其特征在于,所述待同步节点基于第i轮节点轮换中各第i轮同步节点的区块同步情况,确定第i+1轮同步节点,包括:
所述待同步节点向未作为第i轮同步节点的区块链节点发送询问请求;
针对任一第i轮同步节点,所述待同步节点确定所述第i轮同步节点进行同步的第i轮区块数据,并接收所述第i轮同步节点发送的第i轮区块数据及所述第i轮同步节点在第i轮区块数据同步结束时发送的携带状态信息的反馈请求;
所述待同步节点根据各询问请求和各反馈请求,确定第i+1轮同步节点。
6.如权利要求5所述的方法,其特征在于,所述待同步节点确定所述第i轮同步节点进行同步的第i轮区块数据,包括:
所述待同步节点根据响应请求中最大区块高和节点轮换次数确定每次节点轮换的待同步区块数据的个数;所述节点轮换次数与首轮同步节点的数量成反比;
所述待同步节点根据每次节点轮换的待同步区块数据的个数和所述第i轮同步节点的数量确定第i轮同步节点进行同步的第i轮区块数据。
7.如权利要求5所述的方法,其特征在于,所述待同步节点根据各询问请求和各反馈请求,确定第i+1轮同步节点,包括:
所述待同步节点接收未作为第i轮同步节点的区块链节点根据所述询问请求反馈的响应请求;
所述待同步节点从根据所述询问请求反馈的响应请求和所述第i轮同步节点的反馈请求中,确定请求传播时长满足第三设定条件的响应请求和/或反馈请求;
所述待同步节点根据负载指数从满足第三设定条件的响应请求和/或反馈请求中确定第i+1轮同步节点。
8.一种区块链节点的区块数据同步装置,其特征在于,包括:
发送模块,用于在区块数据同步前,通过熟知节点向各区块链节点发送探测请求;所述探测请求用于获取区块链节点的状态信息;
处理模块,用于基于各区块链节点反馈的响应请求,确定首轮同步节点和节点轮换次数N;其中,首轮同步节点数量越多,节点轮换次数越少;
基于第i轮节点轮换中各第i轮同步节点的区块同步情况,确定第i+1轮同步节点,直至N轮区块同步结束;i大于等于0。
9.一种计算机设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111612876.8A CN114281542A (zh) | 2021-12-27 | 2021-12-27 | 一种区块链节点的区块数据同步方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111612876.8A CN114281542A (zh) | 2021-12-27 | 2021-12-27 | 一种区块链节点的区块数据同步方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114281542A true CN114281542A (zh) | 2022-04-05 |
Family
ID=80876297
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111612876.8A Pending CN114281542A (zh) | 2021-12-27 | 2021-12-27 | 一种区块链节点的区块数据同步方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114281542A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115086350A (zh) * | 2022-06-13 | 2022-09-20 | 杭州复杂美科技有限公司 | 一种区块链节点数据同步方法、设备及存储介质 |
-
2021
- 2021-12-27 CN CN202111612876.8A patent/CN114281542A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115086350A (zh) * | 2022-06-13 | 2022-09-20 | 杭州复杂美科技有限公司 | 一种区块链节点数据同步方法、设备及存储介质 |
CN115086350B (zh) * | 2022-06-13 | 2024-01-19 | 亿度科创(深圳)有限公司 | 一种区块链节点数据同步方法、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112968967B (zh) | 区块同步方法及装置 | |
CN109146447B (zh) | 区块链透明分片方法、装置及系统 | |
CN108737534B (zh) | 一种基于区块链的数据传输方法、装置、区块链系统 | |
CN110915188A (zh) | 用于区块链网络中的高效传播的概率中继 | |
CN111460504B (zh) | 业务处理方法、装置、节点设备及存储介质 | |
CN105096122B (zh) | 一种分片式交易匹配方法和装置 | |
CN110083745B (zh) | 数据查询方法、设备和存储介质 | |
CN106453460B (zh) | 一种文件分发方法、装置和系统 | |
CN111061735B (zh) | 一种基于单链区块链的扩容方法及装置 | |
CN109413202B (zh) | 区块链交易信息的排序系统及方法 | |
CN115328579B (zh) | 神经网络训练的调度方法、系统及计算机可读存储介质 | |
WO2022012576A1 (zh) | 路径规划方法、装置、路径规划设备及存储介质 | |
CN114281542A (zh) | 一种区块链节点的区块数据同步方法及装置 | |
CN111008249B (zh) | 平行链区块同步方法、设备和存储介质 | |
CN109087209B (zh) | 社区动态调整方法、装置及服务器 | |
CN111611321A (zh) | 一种数据存储方法、装置及区块链系统 | |
CN110490734B (zh) | 交易组构建、广播方法和系统、设备及存储介质 | |
CN110601978A (zh) | 流量分发控制方法和装置 | |
CN109739684A (zh) | 基于向量时钟的分布式键值数据库的副本修复方法与装置 | |
CN111935242A (zh) | 数据传输方法、装置、服务器以及存储介质 | |
CN113179329B (zh) | 服务发布方法及装置、服务器、存储介质 | |
CN104331494A (zh) | 一种更新数据的方法及系统 | |
CN113300851A (zh) | 基于dht的区块链消息广播方法、电子设备及存储介质 | |
CN110286854B (zh) | 群成员管理和群消息处理的方法、装置、设备及存储介质 | |
CN116663639A (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 |