一种基于PBFT算法的集群异常恢复方法与流程

文档序号:33012407发布日期:2023-01-20 14:00阅读:30来源:国知局
一种基于PBFT算法的集群异常恢复方法与流程
一种基于pbft算法的集群异常恢复方法
1.本技术是申请日为2019年12月24日,申请号为201911349305.2,发明名称为“一种基于pbft算法的集群异常恢复方法”的专利申请的分案申请。
技术领域
2.本发明涉及pbft算法,尤其涉及一种基于pbft算法的集群异常恢复方法。


背景技术:

3.pbft是practical byzantine fault tolerance的缩写,即:实用拜占庭容错算法。该算法是由miguel castro和barbara liskov在1999年提出来的,它在原始拜占庭容错算法的基础上,解决了其理论可行而实际效率低下的问题,真正实现了分布式异步共识系统中的拜占庭攻击问题,大力推动了拜占庭容错算法在实际系统中的应用。为了能够容忍f个拜占庭节点的存在,pbft要求全网至少要有3f+1个节点。
4.pbft实际上是一种能解决拜占庭问题的状态机副本算法,即每个节点都是系统保证服务状态一致的状态机,全网状态机的状态服务的一致性使得状态机实现了一致化操作。pbft算法有两大协议:
5.(1)三阶段共识协议,保证了主节点打包的区块通过三阶段共识完成打包结果的一致性确认,并保证应对拜占庭攻击的系统活性。
6.(2)视图变更协议,保证了在主节点作恶情况下,系统可以通过该协议选举出新任的主节点进行共识,且不破坏其原有的共识状态。
7.同时,为了保证了各节点经过确认的一致性状态得以持久化,并且内存中的垃圾容量保持在一定限制内,pbft还设计了一套检查点机制。
8.但是,目前的pbft算法在应用到实际场景中,还存在如下问题:当集群节点需要宕机重启或者集群网络发生严重的瘫痪、分区后,pbft算法本身不能够及时地完成集群的自恢复,因此需要设计一种用于恢复集群异常的方法。


技术实现要素:

9.针对现有技术的不足,本发明提出了一种基于pbft算法的集群异常恢复方法,在出现集群重启或者集群网络瘫痪的情况下,可以快速地进行集群的恢复。
10.本技术实施例的第一方面提供了一种基于pbft算法的集群异常恢复方法方法,包括:
11.(1)集群因为重启或者网络故障等原因进入异常状态,集群所有节点成为异常节点;
12.(2)每个异常节点向全网所有节点发送视图变更请求,然后在规定时间内等待其他节点的视图变更请求并进行计数,如果在规定时间内无法收到2f+1个包含相同视图值的视图变更请求,则视图变更超时;所述的视图变更请求中包含本节点的id、本节点的目标视图值;
13.(3)视图变更请求超时的异常节点立即进入待恢复状态,成为待恢复节点;
14.(4)所述的待恢复节点向全网所有节点发送恢复请求,所述的恢复请求中包含本节点的id、本节点的目标视图值;
15.(5)所述的待恢复节点在规定时间内等待其他节点的恢复请求并进行计数,如果在规定时间内收到了2f+1个包含相同视图值的恢复请求,则进入步骤(6)进行新视图确认;
16.(6)以目标视图值构建新视图,所有在规定时间内收到2f+1个包含相同视图值的恢复请求的待恢复节点进入新视图并根据新视图的视图值确定新的主节点,其余为从节点;新视图中的主节点首先通过pbft算法中的视图变更恢复方法完成异常恢复并根据收到的2f+1个恢复请求构造出新视图启动消息进行全网广播;新视图中的从节点在规定时间内等待主节点的新视图启动消息;
17.(7)所述的新视图中的从节点如果在规定时间内收到了主节点的新视图启动消息,则进入步骤(8)完成视图变更;如果不能在规定时间内收到了主节点的新视图启动消息,则将自身的目标视图值加1,重新进入步骤(4);
18.(8)所述的新视图中的从节点通过pbft算法中的视图变更恢复方法完成异常恢复,更新自身的视图值为目标视图值;直至所有异常节点恢复整个集群恢复正常工作。
19.进一步地,所述步骤(2),包括:
20.如果在规定时间内收到2f+1个包含相同视图值的视图变更请求,则通过pbft算法中的视图变更恢复方法完成恢复。
21.进一步地,所述步骤(5),包括:
22.如果在规定时间内收到了超过f+1个包含的视图值大于本节点目标视图值的恢复请求,则选择其中最小的视图值作为待恢复节点的目标视图值重新进入步骤(4)。
23.进一步地,所述步骤(5),包括:
24.如果在规定时间内不能收到2f+1个包含相同视图值的恢复请求,则返回到步骤(4),重新发送一次恢复请求,其中,目标视图值不变。
25.进一步地,所述步骤(2)中的视图变更请求与所述步骤(4)中的恢复请求中还包含节点的数字签名信息。
26.进一步地,所述步骤(2)和步骤(5)中的计数规则是一个节点id只能计数一票,如果收到多次来自同一个节点的恢复请求,也只能对该节点计数一票。
27.进一步地,所述步骤(6)中的新视图启动消息中会包含2f+1个节点的聚合签名。
28.进一步地,所述步骤(6)中,确定新的主节点依照轮询的方式确定下一个主节点,轮询时,视图值每次递增1,主节点id依次轮流变化。
29.与现有技术相比,本技术实施例具有以下优点:
30.本技术实施例,在pbft算法的基础上,新增了集群异常恢复流程。在实际的pbft部署网络中,经常会出现集群重启或者集群网络瘫痪的状况,在该情况下,正常节点会进行异常状态并首先尝试pbft的视图变更方法,由于网络瘫痪需要一定时间才能恢复,因此视图变更往往会超时导致不能完成。本发明方法通过让此时节点进入到异常恢复流程,不断发送异常恢复消息,直至网络恢复时有超过2f+1个节点共同发送包含相同视图值的恢复消息,此时即可通过选举出一个新节点的方式完成集群的异常恢复。本发明提出的基于pbft算法的集群异常恢复方法改进了经典pbft算法中集群瘫痪后无法恢复的问题,大大提升了
集群异常后的恢复效率,提升了pbft算法的可用性。
附图说明
31.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
32.图1是本技术实施例提供的一种集群异常恢复的流程示意图;
具体实施方式
33.下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
34.本发明提出了一种基于pbft算法的集群异常恢复方法。在一个由3f+1个节点组成的集群网络中,pbft算法同时只能容忍最多f个节点出现异常,但是在实际的部署网络中,常常会因为网络延迟、网络断开或者节点重启等原因导致整个集群进入异常状态。进入异常的节点首先会尝试发起视图变更请求,然而在集群网络恢复之前,视图变更请求最终会超时,导致集群无法自主恢复。通过让此时异常节点会进入待恢复状态发起恢复请求,直到集群网络恢复之后,超过2f+1个待恢复节点能选择出一个一致的视图值,确定新的主节点,等待主节点的新视图启动消息,即可完成集群的异常恢复。该方法解决了pbft算法中集群故障后无法自主恢复的问题,大大提升了pbft算法的可用性。
35.本方法的具体的实施流程如下:
36.(1)集群因为重启或者网络故障等原因进入异常状态,集群所有节点成为异常节点;
37.(2)每个异常节点向全网所有节点发送视图变更请求,然后在规定时间内等待其他节点的视图变更请求并进行计数,如果在规定时间内收到2f+1个包含相同视图值的视图变更请求,则通过pbft算法中的视图变更恢复方法完成恢复;但在在集群网络恢复之前,在规定时间内无法收到2f+1个包含相同视图值的视图变更请求,使视图变更超时;所述的视图变更请求中包含本节点的id、本节点的目标视图值等。
38.(3)视图变更请求超时的异常节点立即进入待恢复状态,成为待恢复节点;
39.(4)所述的待恢复节点向全网所有节点发送恢复请求,所述的恢复请求中包含本节点的id、本节点的目标视图值等;
40.(5)所述的待恢复节点在规定时间内等待其他节点的恢复请求并进行计数,如果在规定时间内收到了2f+1个包含相同视图值的恢复请求,则进入步骤(6)进行新视图确认;如果在规定时间内收到了超过f+1个包含的视图值大于本节点目标视图值的恢复请求,则选择其中最小的视图值作为待恢复节点的目标视图值重新进入步骤(4);如果由于集群重启或者集群网络瘫痪等原因在规定时间内不能收到2f+1个包含相同视图值的恢复请求,则返回到步骤(4),重新发送一次恢复请求,其中的目标视图值不变;
41.(6)以目标视图值构建新视图,所有在规定时间内收到2f+1个包含相同视图值的
恢复请求的待恢复节点进入新视图并根据新视图的视图值确定新的主节点,其余为从节点。新视图中的主节点和从节点的异常恢复流程如图1所示,其中,新视图中的主节点首先通过pbft算法中的视图变更恢复方法完成异常恢复并根据收到的2f+1个恢复请求构造出新视图启动消息进行全网广播;新视图中的从节点在规定时间内等待主节点的新视图启动消息;
42.(7)所述的新视图中的从节点如果在规定时间内收到了主节点的新视图启动消息,则进入步骤(8)完成视图变更;如果不能在规定时间内收到了主节点的新视图启动消息,则将自身的目标视图值加1,重新进入步骤(4);
43.(8)所述的新视图中的从节点通过pbft算法中的视图变更恢复方法完成异常恢复,更新自身的视图值为目标视图值;直至所有异常节点恢复整个集群恢复正常工作。
44.另外,作为优选方案,所述步骤(2)中的视图变更请求与所述步骤(4)中的恢复请求中都还包含节点的数字签名信息。
45.所述步骤(2)和步骤(5)中的计数规则是一个节点id只能计数一票,如果收到多次来自同一个节点的恢复请求,也只能对该节点计数一票。避免重复计票。
46.所述步骤(6)中的新视图启动消息中会包含2f+1个节点的聚合签名。相比于简单地将2f+1个节点的签名累加到一起,聚合签名可以大大减少需要传输的消息体大小。
47.所述步骤(6)中,确定新的主节点依照轮询的方式确定下一个主节点,其中,主节点id为view mod n,view为视图值,n为节点数;轮询时,视图值每次递增1,主节点id依次轮流变化。
48.本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1