一种面向许可链的可扩展共识方法

文档序号:36614812发布日期:2024-01-06 23:14阅读:13来源:国知局
一种面向许可链的可扩展共识方法

本发明属于区块链,涉及一种区块链上进行可扩展共识过程的方法,具体涉及一种面向许可链的可扩展共识方法以及一种基于此共识方法的支持节点失效的区块重发起方法。


背景技术:

1、区块链是一种面向互不可信环境的多方共同维护的分布式账本,具有去中心化、不可篡改、历史数据可追溯等特点。主流的区块链采用分层架构,通用基本架构可分为六层,自底向上分别为数据层、执行层、网络层、共识层、管理层和接口层,其中共识层是保证区块链网络中不同节点维持一致的副本数据,共识是分布式系统中最重要的抽象之一,简单来说就是让所有的节点对某件事情达成一致,在区块链中意味着对链式的区块达成一致。

2、共识算法在非许可链和许可链上有所区分,不同于非许可链的网络状况和节点未知,需激励机制推进的情形,在许可链场景下,由于节点已知并且不会人为退出较为可控,通常采用拜占庭容错(bft)或崩溃容错(cft)算法,该类算法的原理是节点间通过多轮信息交互来达成一致,通常会有一个提议者出块,其他从节点对该区块投票,如果多数通过则系统就对该区块达成共识。此外,在许可链场景下还有一种比较有代表性的即是raft共识算法。在raft共识的场景下,一个网络集群代表着一个共识的节点集体,即一主多从,网络集群下的节点分为三种类型,领导者(主节点)、跟随者(从节点)和候选者,集群节点的身份会在三种类型间进行转换。在选主期间(即无领导者作为主节点),跟随者切换为候选者进行参选投票,赢得大多数票的候选者成为领导者,其他成为跟随者。在有主任期下,即正常的领导者和跟随者角色完成共识任务。目前对于raft在许可链中的研究主要分为三类,一是拓展应用场景;二是引入信任机制使得raft能够容忍拜占庭容错;三是重视在许可链中的流程优化与性能提升。然而,目前的研究在raft可扩展性优化上的工作依然欠缺,导致了在数据全复制的许可链场景中,副本过多,传输区块数据量过大的通信开销问题仍然存在,具体表现为单领导者性能瓶颈、系统负载失衡以及丢失区块造成的带宽资源浪费等问题,影响整体性能。

3、因此,为了解决上述问题,提高raft的可扩展性和性能,使其更能适应于许可链场景,有必要提出一种面向许可链的可扩展共识方法。


技术实现思路

1、为了解决现有技术存在的不足,本发明的目的是提供一种面向许可链的可扩展共识方法,所述方法基于一种共识算法draft,实现了对区块共识任务的解耦以及分解后子任务的流程设计,该解耦策略将raft中领导者承担的高负载任务分解为子任务分配到其他节点上,解决raft的领导者瓶颈问题,进而提升了许可链的可扩展性和性能。本发明中所有的流程均在一个网络集群内。

2、本发明以提高许可链吞吐性能为目标,针对现有技术的缺失,提出一种面向许可链的可扩展共识方法。在draft共识流程中,本发明通过对许可链区块共识任务的分析,其实所有节点真正达成共识的是区块顺序,区块数据与区块顺序在逻辑层面是可分离的,因此对区块共识任务进行解耦,将其分解为将其分解为区块数据复制子任务和区块顺序共识子任务,将区块数据复制子任务交由从节点完成,主节点仅负责区块顺序共识子任务,避免单点瓶颈问题,从而提高区块处理速度,提高系统吞吐量。

3、本发明提出了一种面向许可链的可扩展共识方法draft,所述方法具体包括以下步骤:

4、步骤1:区块共识任务解耦,将一个完整的区块分解为唯一标志该区块的dhash和包含元信息和交易序列的区块数据(block data),分别对应区块顺序共识子任务和区块数据复制子任务;

5、步骤2:将区块数据复制子任务交由从节点负责,从节点完成区块复制后通知主节点对该区块进行共识;

6、步骤3:主节点根据区块复制情况发起区块顺序共识子任务,对相应区块日志进行共识排序,最终提交并由各节点执行。

7、其中,

8、步骤1中,区块共识任务解耦为区块顺序共识子任务和区块数据复制子任务;

9、所述区块顺序共识子任务是指主节点接受从节点完成区块数据复制子任务后发送的dhash日志共识请求,收集到一定数量后对一批dhash日志进行共识,维护所有节点dhash日志序列的一致性,达到最终网络中区块信息一致的目的。

10、所述区块数据复制子任务是指从节点作为区块数据源节点接受客户端发送的交易请求,本地打包成区块并复制到其他区块数据接收节点的从节点,最后通知主节点对区块dhash日志进行共识,由此来分担主节点的工作,解决单点瓶颈的问题。

11、所述步骤2进一步包括以下步骤:

12、步骤2-1:从节点接收客户端发送的交易请求,打包成区块后,作为区块数据源节点发送区块数据给同一网络集群中的其他从节点进行复制;

13、本发明中仅考虑一个网络集群内部的共识,若涉及分布式集群则使用其他的协议来保证一致性,上述提到的其他节点是指除该点外的所有其他从节点,本步骤中是一个子任务,原来这个任务是主节点来做的,而本发明在这个任务中这个从节点作为子任务中的主节点,也是区块数据源节点,其他的从节点作为区块数据接收节点使用。

14、步骤2-2:其他从节点作为区块数据接收节点,持久化该区块数据完成复制后回复区块数据源节点;所述持久化是指对收到的区块进行公钥校验和区块检查后,存入本地的区块数据状态表中,表的索引为该区块的dhash,值为区块数据、区块源节点id等相关状态信息,同时存入到本地存储中,表明已经收到该区块的复制请求。

15、步骤2-3:区块数据源节点对响应信息进行统计,确认同一网络集群半数以上节点完成复制后,生成dhash日志共识请求,发送给主节点;所述响应信息是指其他节点复制完成区块数据后回复区块数据源节点的信息。

16、所述步骤3进一步包括以下步骤:

17、步骤3-1:主节点接收到区块源节点发送的共识发起请求后,将区块dhash日志加入本地日志序列,确定区块序列,向同一网络集群内其他从节点发送请求;

18、步骤3-2:其他从节点收到请求后复制区块日志进行持久化,再向主节点回复确认信息,所述持久化是指将这一批区块日志dhash及其序列存入本地存储中,表明已经收到这批区块的共识请求。

19、步骤3-3:主节点收到半数以上的回复后,提交该区块并发起执行请求,其他从节点进行执行,最终区块上链成功。

20、本发明还提出了一种基于draft的支持节点失效的区块重发方法,通过该方法让遗忘区块重新进入共识流程,避免存储和带宽资源的浪费,其方法包括如下步骤:

21、步骤i:网络集群内的所有节点通过定时器对区块定时检查,根据实际情况进行处理;对于确认是遗忘区块的区块启动重发起流程;

22、网络集群中的每个节点都会有个本地区块数据状态表,记录该区块的相关信息,dhash,是否提交之类的内容,重发方法会对每个区块信息设置一个定时器,然后检查这个区块超时后的状态(丢弃,等待,提交)来判断是否重发起。

23、步骤ii:网络集群内的所有节点对于重发起区块进行判断,根据实际情况决定重发起流程由哪个节点,从draft共识的哪个阶段开始执行,最终完成区块重发起任务。

24、针对上述步骤i和ii中的可能出现的情况以及处理方式进行进一步阐述,说明如下:

25、(1)dhash日志和dhash日志序列对应且已被标记为提交,则该区块已完成共识任务,此时取消该定时器。

26、(2)dhash日志和dhash日志序列对应但未被标记为提交,根据raft的规则,该dhash依然有被覆盖的风险,此时节点对该区块重新设置定时器,等待相同的时间后,重新检查该区块dhash日志的提交情况,如果主节点未崩溃,则正常提交,转向处理(1);若此时主节点崩溃,发生换主,如果换主后区块dhash日志被覆盖,则转向处理(3)。

27、(3)dhash日志和dhash日志序列不对应,但从节点本地具有该区块dhash日志(换主),说明大部分节点已经持久化该区块,此时该节点直接向当前的主节点发送一个dhash共识请求,并重新设置定时器,等待该区块被提交。

28、(4)dhash日志未加入dhash日志序列,且本地该区块无dhash日志仅有区块数据。如果该节点是区块源节点,保存该区块的复制情况,然后继续区块分发和后续流程;如果该节点并不是区块源节点,此时节点会先向区块源节点发送心跳包探查该节点是否失效,如果未失效则通知该节点继续改区块的流程,如果该节点失效则启动区块重发起机制:首先向集群中其余节点发送查询信息,收集该区块在集群中的数目,然后向未收到区块数据的节点进行补发,当持久化区块的节点达到半数以上后向当前的主节点发送dhash共识请求,并重新设置定时器,等待该区块被提交。

29、本发明的有益效果包括:本发明实现了一种可扩展共识方法,对区块共识任务分解,通过将区块顺序共识子任务和区块数据复制子任务,将其均衡地分配给主节点和从节点,解决了单点性能瓶颈,提升了可扩展性;本发明实现了节点失效的区块重发方法,通过该方法使得遗忘区块重新进入共识流程,避免存储和带宽资源的浪费。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1