一种分布式系统共识方法与流程

文档序号:20039503发布日期:2020-02-28 11:43阅读:143来源:国知局
一种分布式系统共识方法与流程

本发明涉及分布式系统技术领域,具体涉及一种分布式系统共识方法。



背景技术:

分布式系统(distributedsystem)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。在分布式系统中,共识是及其重要的一个部分。它是指多个服务器在状态达成一致,但在一个分布式系统中,可能会由于各种因素,导致服务器崩溃或变得不可靠,也就不能与其他服务器在状态上达成一致。这样就需要一种共识协议,共识协议是为了确保容错性,也就是即使系统中有一两个服务器宕机,也不会影响其处理过程。为了让容错方式达成一致,不可能要求所有服务器100%都达成一致状态,所以只要超过半数的大多数服务器达成一致就可以了。共识方法能够在分布式系统中,使多个服务器协同工作,并且能够在某些成员宕机时保证系统的稳定性,所以共识方法在构建可靠的大型软件系统中非常重要。在分布式系统中,每个服务器上都有一个状态机、一个按顺序存储命令的日志以及一个一致性模块。而运行在一致性模块中的共识方法就是为了保持分布式日志的一致性,该模块负责将客户端传来的命令依照其顺序加入到日志中,并且与系统中的其他服务器上的其他一致性模块进行通信,保证这些命令的顺序,因此假如系统中有少部分服务器发生宕机,也可以保证分布式系统的稳定性,防止系统陷入瘫痪。

lamportl在“thepart-timeparliament”【acmcomputingsurveys.1998,16(2):133-169.】中提出了一种基于消息传递的分布式共识方法。该方法能够在分布式系统中,根据某个协议完成其一致性。而后,许多改进的方法陆续被提出,目前对于类paxos的方法大致分为两类:强领导者共识方法和弱领导者共识方法。强领导者共识方法的特点是系统中的主要工作都是由共识方法中选出的领导者来完成,并且通过不断更换领导者来保证系统的实时性和稳定性。ongarod,cowlingj等人在“insearchofanunderstandableconsensusalgorithm”【proceedingsoftheatc14,usenixannualtechnicalconference,2014,305-319.】中提出了一种对领导者节点的选举没有限制,用户可以自定义,通过其巧妙的数据广播过程,即基本通讯协议(thebasicprotocol),来保证广播数据的一致性。弱领导者共识算法的设计思路是弱化领导者的权限,将其权限分散。使得每一个副本均可作为一个弱化的领导者,共同处理其他节点的请求工作。并通过其他约束来确保系统的安全性,这些弱化的领导者共同协作来完成共识工作,保证系统的一致性。maoyanhua,junqueirafp等人在“mencius:buildingefficientreplicatedstatemachinesforwans”【procofthe8thusenixsymponoperatingsystemsdesignandimplementation(osdi’08).berkeley,ca:usenixassociation,2008:369-384.】提出了一种解决单领导者共识算法存在的瓶颈问题的共识方法,该方法的所有副本进程组成一个闭环,提前给这些副本进程分配好用以提出题案的空位编号,通过这种方式,所有副本进程都轮流提出自己的提案,这样做能够提高系统吞吐率。

上述文献中所提出的各个共识方法都没有领导权转移的部分,在领导者节点出现故障后只能够重新选举领导者节点,这将影响整个分布式系统的共识工作。可见,这些共识方法在系统的容错性上存在一定的局限性。

为了提高分布式系统中共识方法的容错性,本发明在传统的三个节点角色基础上,添加了候补领导者节点,使得系统在共识过程中,若领导者节点正常工作,则候补领导者节点和其他跟随者节点一样进行日志接受,同领导者节点进行反馈和投票操作。若领导者节点被监测出现故障,则候补领导者节点会接任领导者节点任务,根据候补领导者节点的日志队列的内容同其他节点继续进行共识工作,直至下一任领导者节点选举出来。所提出的方法在系统出现故障后能够提高一定的共识效率。



技术实现要素:

本发明所要解决的问题是:提供一种分布式系统共识方法,通过添加候补领导者角色的节点,在领导者节点出现故障后接受其领导权进行相应共识操作,提高了分布式系统的鲁棒性。

本发明为解决上述问题所提供的技术方案为:一种分布式系统共识方法,节点角色分为跟随者节点,选举者节点,候补领导者节点,领导者节点;领导者节点由选举产生,系统的决定由领导者节点来做;所述节点还包括有日志信息,日志信息由任期号、提交日志下标和可执行指令组成;选举领导节点步骤如下:

1)初始化:设置所有节点为跟随者节点以及其日志信息中的任期号;

2)跟随者节点变为选举者节点;

3)选举者节点根据任期号和提交日志下标进行投票选举操作;

4)根据投票结果选出领导者节点和候补领导者节点;

5)监测领导者节点是否正常工作;

6)如果领导者节点正常工作,进行日志复制;

7)当领导者节点出现故障,判断是否存在候补领导者节点;

8)如果存在候补领导者节点,则进行日志回滚,候补领导者节点变为领导者节点,继续进行日志复制;

9)如果不存在,则由心跳机制触发选举,初始化领导者节点和候补领导者节点,转入步骤2)。

优选的,所述跟随者节点是最普通的节点,只是被动的接收日志和给领导者节点进行反馈,能够进行投票操作;选举者节点是由跟随者节点升级而来的,其首先给自己投一票,再向其他节点争取选票,如果超过半数节点给该选举者节点投票,则该节点升级成为领导者节点;变为领导者节点后则会对其他节点进行共识操作,处理整个系统的数据交换;候补领导者节点则为得票数第二的选举者节点,该节点仅在领导者节点故障后接受其工作。

优选的,所述节点还包括有日志信息,日志信息由任期号、提交日志下标和可执行指令组成;任期是从一次的领导者选举开始直到下一次的领导者选举的这一段时间;在这段时间中,只有一个领导者能够成功选举;提交日志下标将节点中的日志队列分为已提交和未提交两部分,保证各节点已提交的日志完全相同;可执行指令是待发送给客户端的指令。

优选的,所述步骤3)中选举者节点根据任期号和提交日志下标进行投票选举操作;在进行领导者选举时,必须先判断任期号大小,再判断提交日志下标大小,两个值均较大的节点才能当选成为领导者节点。

优选的,步骤5)中监测领导者节点是否正常工作的步骤为:

5-1)各个节点都有心跳检测机制,如果领导者节点正常工作,会不断给其他节点发送心跳信号;

5-2)若不再发送心跳信号,则其他节点的计时器超时,断定此时系统中无领导者节点。

优选的,各个节点都有心跳检测机制;各个节点中都内置计时器,计时器超时则表明节点可以升级为选举者节点;领导者节点有权发送心跳信号重置其他节点的计时器。

优选的,所述步骤8)中如果存在候补领导者节点,则进行日志回滚,候补领导者节点变为领导者节点,继续进行日志复制;日志回滚是根据候补领导者节点的提交日志下标,将其他节点的日志队列回滚到与候补领导者节点相同的状态。

与现有技术相比,本发明的优点是:本发明考虑强领导者共识方法中大部分的工作都交给领导者节点,因此该节点是系统中的绝对核心。但强领导者共识方法并没有对该节点尽心高一些容错措施,导致领导者节点出现故障后,系统会浪费大量时间等待该节点任期不再发送心跳信号以及进行新一轮共识选举工作。因此本发明在跟随者节点,选举者节点和领导者节点的基础上,添加了候补领导者节点。通过添加候补领导者角色,能够在系统出错后,免去一轮共识操作,提高共识效率,提高系统的鲁棒性。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。

图1是本发明各角色转换示意图;

图2是本发明流程示意图;

图3是本发明与raft共识方法对比图;

具体实施方式

以下将配合附图及实施例来详细说明本发明的实施方式,藉此对本发明如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。

种分布式系统共识方法,节点角色包括有跟随者节点,选举者节点,候补领导者节点,领导者节点,所述节点还包括有日志信息,日志信息由任期号、提交日志下标和可执行指令组成。具体的划分步骤如下:

1)初始化:设置所有节点为跟随者节点以及其日志信息中的任期号;

2)跟随者节点变为选举者节点;

3)选举者节点根据任期号和提交日志下标进行投票选举操作;

4)根据投票结果选出领导者节点和候补领导者节点;

5)监测领导者节点是否正常工作;

6)如果领导者节点正常工作,进行日志复制;

7)当领导者节点出现故障,判断是否存在候补领导者节点;

8)如果存在候补领导者节点,则进行日志回滚,候补领导者节点变为领导者节点,继续进行日志复制;

9)如果不存在,则由心跳机制触发选举,初始化领导者节点和候补领导者节点,转入步骤2)。

上述的节点角色包括有跟随者节点,选举者节点,候补领导者节点,领导者节点。跟随者节点是最普通的节点,只是被动的接收日志和给领导者节点反馈,以及进行投票操作。选举者节点是由跟随者节点升级而来的,其首先给自己投一票,再向其他节点争取选票,如果超过半数节点给该选举者节点投票,则该节点升级成为领导者节点。变为领导者节点后则会对其他节点进行共识操作,处理整个系统的数据交换。候补领导者节点则为得票数第二的选举者节点,但该节点没有特殊权限,如果系统正常进行共识则该节点和跟随者节点一样。但是由于领导者节点发生超时后,如果该节点存在,则会由该节点接任领导者节点的任务,根据该节点的日志情况对其他节点进行共识,直至下一任领导者节点选举出来。各节点角色转换如图1所示。

日志信息由任期号、提交日志下标和可执行指令组成。任期是从一次的领导者选举开始直到下一次的领导者选举的这一段时间。在这段时间中,只有一个领导者能够成功选举,并且保证在任期内只有一个领导者节点进行管理系统或是没有领导者选举成功。在每个任期中,都有一个唯一的数字标号,所有的任期编号都是从小到大排列。当选举开始时,任期编号大的选举者节点会获得投票,票数超过半数的节点会当选成为领导者节点。而后领导者节点将任期号随日志一同发送,跟随者节点接收日志后,如果领导者的任期号等于或者大于自己的任期号,则接受共识,将日志存储到队列中并给予领导者节点接受成功的回复,如果接受失败则将失败的回复发送给领导者节点,这条成功或者失败的回复消息中将携带自己的任期号。如果领导者节点发现在回复消息中得到的任期号大于自己的任期号时,则将自己的身份降为跟随者节点,代表任期结束,开始下一轮选举。提交日志下标将节点中的日志队列分为已提交和未提交两部分,保证各节点已提交的日志完全相同。在跟随者节点收到日志后,将日志按顺序存储到队列中,但此时提交日志下标不会更新数值,表示这些日志为未提交的日志,不能发送给客户端。当领导者节点收到超过半数的跟随者节点的应答后,便会更新自己的提交日志下标,并将其广播给跟随者节点。这时跟随者节点会更新提交日志下标,根据下标将未提交的日志变为已提交的日志。可执行指令是待发送给客户端的指令。

上述中的步骤3)中选举者节点根据任期号和提交日志下标进行投票选举操作。在进行领导者选举时,必须先判断任期号大小,再判断提交日志下标大小,两个值均较大的节点才能当选成为领导者节点。

步骤5)中的监测领导者节点是否正常工作是利用方法中的心跳检测机制。各个节点中都内置计时器,计时器会随机出一个时间,如果超时则表明高节点可以升级为选举者节点。而领导者节点有权发送心跳信号重置其他节点的计时器。若其他节点没收到领导者节点发送的心跳信号,则其计时器超时,表明领导者节点已不能进行共识工作,因此会进行判断是否存在候补领导者节点,如果存在则允许候补领导者节点接受领导权,候补领导者节点继任后,根据自身节点的日志队列的日志情况对其他节点进行回滚操作,使其他节点的日志队列与其相同,再继续进行共识工作,直至下一任领导者选举出来。若没有候补领导者,则会进行选举,并且领导者节点和候补领导者节点将其身份降为跟随者,保证系统的领导者和候补领导者是实时更替,任期相同。整个节点的划分示意图如图2所示。

本发明通过模拟实验,与上述文献中的raft方法进行对比,通过控制节点数目的不同,进行一系列的对比实验。对比图如图3所示。

以上仅就本发明的最佳实施例作了说明,但不能理解为是对权利要求的限制。本发明不仅局限于以上实施例,其具体结构允许有变化。凡在本发明独立权利要求的保护范围内所作的各种变化均在本发明保护范围内。

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