一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于共识系统的节点竞选投票方法及装置与流程

2022-05-08 05:36:48 来源:中国专利 TAG:


1.本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种基于共识系统的节点竞选投票方法及装置。


背景技术:

2.在分布式环境下,例如分布式数据库应用,往往需要借助分布式一致性协议,例如共识协议raft等来达成多副本数据的一致性。因此,共识系统可以通过共识协议将业务数据复制到不同的节点设备中,实现多副本数据的一致性,得到多个节点设备的共识数据,例如区块链网络中的共识过程。
3.在共识系统中,通常可以由主节点设备负责对接外部业务请求,对业务请求进行打包,并将打包后的数据复制到从节点设备,实现对数据的共识。在完成对数据的共识之后,所有节点均执行该经过共识的数据。参与共识的节点设备往往部署在多个地理位置不同的地方。而分布式节点设备经常面临网络隔离和进程启停等故障,容易导致部分节点设备短暂地无法与其他节点设备通信,进而共识中断。当网络隔离恢复后,节点设备重新加入共识系统后可能会引起不必要的主节点切换,从而影响对业务请求的处理。
4.因此,希望能有改进的方案,可以避免不必要的主节点切换,提高共识系统中主节点竞选时的合理性和完善性。


技术实现要素:

5.本说明书一个或多个实施例描述了一种基于共识系统的节点竞选投票方法及装置,以避免不必要的主节点切换,提高共识系统中对主节点竞选投票时的合理性和完善性。具体的技术方案如下。
6.第一方面,实施例提供了一种基于共识系统的节点竞选投票方法,所述共识系统包括多个节点设备,多个节点设备中包括处于主节点角色的主节点设备,所述方法通过任意一个第二节点设备执行,包括:接收第一节点设备发送的第一预竞选消息;其中,所述第一预竞选消息用于预备竞选主节点角色,所述第一预竞选消息是所述第一节点设备在确定主节点设备不在工作状态时发送的;将所述第一预竞选消息保存在缓存中;当确定主节点设备仍在工作状态时,保持所述第一预竞选消息在所述缓存中的等待状态;当确定主节点设备不在工作状态时,基于所述缓存中的第一预竞选消息,向对应的第一节点设备发送预投票消息,以使得所述第一节点设备在接收到多于第一数量个预投票消息时向其他节点设备发送第一竞选消息。
7.在一种实施方式中,所述第一预竞选消息中包括第一预竞选任期和第一最晚共识数据;所述第一最晚共识数据是经过多个节点设备共识后的数据,所述第一预竞选任期是
所述第一节点设备竞选的主节点角色的任期;所述将所述第一预竞选消息保存在缓存中的步骤,包括:当确定所述第一预竞选任期和第一最晚共识数据比所述第二节点设备中的对应数据更新时,将所述第一预竞选消息保存在缓存中。
8.在一种实施方式中,该方法还包括:当确定所述第一预竞选任期和第一最晚共识数据不比所述第二节点设备中的对应数据更新时,丢弃所述第一预竞选消息。
9.在一种实施方式中,所述第二节点设备中的对应数据包括:当前任期和第二最晚共识数据;所述当前任期是所述第二节点设备中保存的主节点设备的任期,所述第二最晚共识数据是所述第二节点设备中保存的最晚共识数据;所述第一预竞选任期和第一最晚共识数据比所述第二节点设备中的对应数据更新,包括以下情况:所述第一预竞选任期高于所述当前任期,并且所述第一最晚共识数据不早于所述第二最晚共识数据;所述第一预竞选任期等于所述当前任期,并且所述第一最晚共识数据晚于所述第二最晚共识数据。
10.在一种实施方式中,所述保持所述第一预竞选消息在所述缓存中的等待状态的步骤,包括:在第一时长内保持所述第一预竞选消息在所述缓存中的等待状态;所述第一时长大于预设经验时长;所述方法还包括:当直到所述第一时长结束,仍确定主节点设备在工作状态时,丢弃所述第一预竞选消息。
11.在一种实施方式中,采用以下方式确定主节点设备不在工作状态:判断自身的选举定时器是否超时,如果是,则确定主节点设备不在工作状态;其中,所述选举定时器在接收到主节点设备的消息时会被重置。
12.在一种实施方式中,当所述缓存中存在若干个第一节点设备发送的对应第一预竞选消息时,所述基于所述缓存中的第一预竞选消息,向对应的第一节点设备发送预投票消息的步骤,包括:按照若干个第一预竞选消息的时间戳从早到晚的顺序,依次向若干个第一预竞选消息对应的第一节点设备发送预投票消息;或者,从若干个第一预竞选消息中确定时间戳最早的第一预竞选消息,向所述时间戳最早的第一预竞选消息对应的第一节点设备发送预投票消息;或者,基于所述若干个第一节点设备的优先级,向对应的第一节点设备发送针对第一预竞选消息的预投票消息。
13.在一种实施方式中,该方法还包括:当确定主节点设备不在工作状态时,生成第二预竞选消息;向所述共识系统中的其他节点设备发送所述第二预竞选消息。
14.在一种实施方式中,所述生成第二预竞选消息的步骤,包括:获取自身保存的主节点设备的任期,作为当前任期;
对所述当前任期进行更新,得到第二预竞选任期;获取自身保存的第二最晚共识数据;生成携带所述第二预竞选任期和所述第二最晚共识数据的第二预竞选消息。
15.在一种实施方式中,在发送所述第二预竞选消息之后,还包括:接收其他节点设备针对所述第二预竞选消息发送的预投票消息;当接收的预投票消息的数量多于所述第一数量时,向其他节点设备发送第二竞选消息;接收其他节点设备针对所述第二竞选消息发送的投票消息;当接收的投票消息的数量多于所述第一数量时,将所述第二节点设备自身的角色确定为主节点角色。
16.在一种实施方式中,所述共识系统为区块链网络。
17.第二方面,实施例提供了一种基于共识系统的节点竞选投票装置,所述共识系统包括多个节点设备,多个节点设备中包括处于主节点角色的主节点设备,所述装置部署在任意一个第二节点设备中,包括:第一接收模块,配置为,接收第一节点设备发送的第一预竞选消息;其中,所述第一预竞选消息用于预备竞选主节点角色,所述第一预竞选消息是所述第一节点设备在确定主节点设备不在工作状态时发送的;第一缓存模块,配置为,将所述第一预竞选消息保存在缓存中;第一保持模块,配置为,当确定主节点设备仍在工作状态时,保持所述第一预竞选消息在所述缓存中的等待状态;第一投票模块,配置为,当确定主节点设备不在工作状态时,基于所述缓存中的第一预竞选消息,向对应的第一节点设备发送预投票消息,以使得所述第一节点设备在接收到多于第一数量个预投票消息时向其他节点设备发送第一竞选消息。
18.在一种实施方式中,所述第一预竞选消息中包括第一预竞选任期和第一最晚共识数据;所述第一最晚共识数据是经过多个节点设备共识后的数据,所述第一预竞选任期是所述第一节点设备竞选的主节点角色的任期;所述第一缓存模块,具体配置为:当确定所述第一预竞选任期和第一最晚共识数据比所述第二节点设备中的对应数据更新时,将所述第一预竞选消息保存在缓存中。
19.在一种实施方式中,该装置还包括:第一生成模块,配置为,当确定主节点设备不在工作状态时,生成第二预竞选消息;第一发送模块,配置为,向所述共识系统中的其他节点设备发送所述第二预竞选消息。
20.在一种实施方式中,该装置还包括:第二接收模块,配置为,在发送所述第二预竞选消息之后,接收其他节点设备针对所述第二预竞选消息发送的预投票消息;第二发送模块,配置为,当接收的预投票消息的数量多于所述第一数量时,向其他节点设备发送第二竞选消息;
第三接收模块,配置为,接收其他节点设备针对所述第二竞选消息发送的投票消息;第一确定模块,配置为,当接收的投票消息的数量多于所述第一数量时,将所述第二节点设备自身的角色确定为主节点角色。
21.第三方面,实施例提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面中任一项所述的方法。
22.第四方面,实施例提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面中任一项所述的方法。
23.本说明书实施例提供的方法及装置中,第一节点设备在确定主节点设备不在工作状态时,向其他节点设备发送预竞选消息,当接收到足够多的预投票消息时,再发送竞选消息,开始正式选举,这种预竞选消息机制能够避免直接进行竞选而导致的不必要的主节点切换问题。并且,第一节点设备在确定主节点设备仍在工作状态时,不会直接丢弃预竞选消息,而是等待,当确定主节点设备不在工作状态时再进行投票,提高了共识系统中对主节点竞选投票时的合理性和完善性。
附图说明
24.为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
25.图1-1为本说明书披露的一个实施例的实施场景示意图;图1-2为共识系统中的另一种场景示意图;图2为实施例提供的一种基于共识系统的节点竞选投票方法的流程示意图;图3为实施例提供的另一种基于共识系统的节点竞选投票方法的流程示意图;图4为实施例提供的一种基于共识系统的节点竞选投票装置的示意性框图。
具体实施方式
26.下面结合附图,对本说明书提供的方案进行描述。
27.图1-1为本说明书披露的一个实施例的实施场景示意图。其中,共识系统中包含节点设备1~节点设备5,正常情况下节点设备之间可以彼此通信。节点设备5担任主节点角色(leader),即主节点设备。主节点设备通过周期性发送消息的方式,使得其他节点设备感知到主节点设备处于工作状态。当主节点设备因被网络隔离等原因不能正常工作时,其他节点设备无法收到主节点设备发送的消息,节点设备1~节点设备4会启动不同时长的选举定时器。假设节点设备1的选举定时器首先超时,节点设备1首先感知到主节点设备不存在(即不在工作状态),向节点设备2~节点设备4发送预竞选消息。
28.下面以节点设备2为例,说明节点设备接收到预竞选消息时的处理过程。节点设备2在接收到预竞选消息之后将预竞选消息保存在缓存中,并判断主节点设备是否仍在工作状态,如果判断出主节点设备仍在工作状态,则保持预竞选消息在缓存中的等待状态;如果判断出主节点设备不在工作状态,则针对缓存中的预竞选消息发送预投票消息。在多个节
点设备中,节点设备1的预竞选消息是首先发送给其他节点设备的,节点设备1可以最先得到其他多个节点设备的预投票消息,进而节点设备1可以更早地发起正式的竞选,向其他多个节点设备发送正式的竞选消息,进而当选主节点设备。图1-1中共识系统中的节点设备仅仅是一种举例,在实际应用中,共识系统中的节点设备的数量可以是大于2的任意数值。
29.本实施例中的共识系统可以是提供某种服务的系统,在所提供的服务中,需要使得共识系统中多个节点设备的业务请求副本之间达到一致性,实现数据共识,以便多个节点设备执行共识数据中的业务请求,从而使得所有节点设备执行完全相同的业务请求。在对业务请求的共识过程中,共识系统中的主节点设备在接收到客户端发送的业务请求时,将业务请求作为待共识的数据发送至所有的其他节点设备。其他节点设备根据自身的状态对接收到的数据进行一致性投票。当主节点设备接收到大部分节点设备的一致性投票消息时,将向所有的其他节点设备发出确认达成一致的信息。这样便完成了数据的共识过程。该过程使得多个节点设备中的业务请求是一致的,完全相同的。共识系统也可以接收除客户端之外的其他设备,例如服务器或者其他平台的业务请求。
30.多个节点设备在对数据达成一致性之后,也就是得到经过共识的共识数据之后,可以利用自身的状态机执行共识数据中的业务请求,并将执行结果记录在业务数据库中。
31.在一种应用场景中,共识系统可以是区块链网络,或其他需要进行数据共识的系统。业务请求可以是交易,例如用于在不同账户之间转账的交易。业务请求也可以是其他需要在共识系统中同步执行的业务请求,例如可以是用于更新图数据库中节点之间关联关系的请求,其中,多个节点设备中同步存储有图数据库,而图数据库可以用于存储多个节点以及节点之间的关联关系,图数据库中的节点可以代表用户或商户等。
32.为了更好地执行业务请求,在不同节点设备之间对业务请求进行共识,是非常重要的环节。共识系统可以利用共识协议将业务请求复制到不同的节点设备中。例如,可以利用raft这种共识协议。在共识环节中,主节点设备起到了至关重要的作用。本实施例主要讨论共识系统中针对主节点的选举和投票环节。下面以raft协议为例对主节点的选举进行说明。
33.在共识协议raft中,节点设备存在主节点角色(leader)、从节点角色(follower)和候选节点角色(candidate)三种角色,也是三种状态。在每一种状态下,节点设备执行该状态对应的运行程序。主节点设备通过选举产生。主节点设备的每次选举都会更新任期(term)。每一任期的开始都是一次主节点选举。主节点设备会发送心跳消息或其他消息,当从节点设备接收到主节点设备的消息时,会将自身的选举定时器重置。
34.图1-2为共识系统中的另一种场景示意图。假设图1-2中作为从节点的节点设备1因自身故障或网络故障等原因被网络隔离,节点设备1因没有收到主节点设备的消息而致使选举定时器超时,节点设备会将自身的任期加1,然后广播竞选(vote)消息,请求大家选自己为主节点。当节点设备的网络隔离未恢复时,竞选消息无法发送出去。在节点设备1处于网络隔离期间,会存在多种情况。
35.一种情况是,在网络隔离期间,主节点设备(节点设备5)和其他从节点设备(节点设备2~节点设备4)继续执行共识过程,共识数据比节点设备1的共识数据更新。
36.一种情况是,在网络隔离期间,主节点设备和其他从节点设备发生了选举,主节点设备发生了更换,任期更新了。
37.一种情况是,在网络隔离期间,主节点设备和其他从节点设备没有发生选举,也没有继续执行共识过程。
38.当节点设备1解除网络隔离之后,节点设备1的竞选消息能够成功发送给其他节点设备。对于前两种情况,由于节点设备1的任期和共识数据并不比其他节点设备的更新,因此其他节点设备拒绝节点设备1的竞选,不会向节点设备1发送投票消息。如果在这个过程中主节点设备仍在工作状态,那么节点设备1会接收到主节点设备的消息,并退回到从节点状态,不再进行竞选。
39.但是,对于最后一种情况,节点设备1的任期更新了,共识数据与其他节点设备的共识数据的共识高度相同,并不会更旧,因此其他节点设备认可节点设备1的竞选,向节点设备1发送投票消息,从而使得节点设备1成为了主节点设备,导致了不必要的主节点切换。在主节点切换过程中,节点设备无法处理业务请求,也造成对业务请求处理的延误。
40.为了避免不必要的主节点切换问题,本实施例提供了一种节点竞选投票方法,包括以下步骤:步骤s210,第一节点设备,在确定主节点设备不在工作状态时,向其他节点设备发送第一预竞选消息,第一预竞选消息用于预备竞选主节点角色。步骤s220,任意一个第二节点设备接收第一节点设备发送的第一预竞选消息,将第一预竞选消息保存在缓存中。步骤s230,当确定主节点设备仍在工作状态时,第二节点设备保持第一预竞选消息在缓存中的等待状态。当确定主节点设备不在工作状态时,第二节点设备基于缓存中的第一预竞选消息,向对应的第一节点设备发送预投票消息。步骤s240,第一节点设备在接收到多于第一数量个预投票消息时向其他节点设备发送第一竞选消息。
41.在本实施例中,当第一节点设备确定主节点设备不在工作状态时,向其他节点设备发送预竞选消息,而非竞选消息,当接收到足够数量的节点设备的预投票消息时,再发送正式的竞选消息。而第二节点设备,在接收到其他节点设备的预竞选消息时,会将其保存在缓存中,当确定主节点设备不在工作状态时再针对预竞选消息进行投票,从而避免了当主节点设备还在工作状态便认可竞选,从而导致不必要的主节点切换问题。本实施例通过引入预竞选机制来解决节点短暂隔离后重新加入共识网络而引起不必要切主的问题,以及针对业务请求的共识中断问题。
42.同时,在另一种实施场景中,例如图1-1所示场景,主节点设备因故障等原因发生了网络隔离,不在工作状态了。假设节点设备1未收到主节点设备的消息,并且其选举定时器首先超时(不同节点设备的选举定时器时长随机确定),因此节点设备1先于其他从节点设备,首先向其他节点设备发送预竞选消息。除节点设备1之外的其他节点设备,例如节点设备2,在接收到节点设备1的预竞选消息时,由于自身的选举定时器尚未超时等原因,节点设备2此时并不认为主节点设备发生了故障,如果在这种情况下节点设备2直接丢弃节点设备1的预竞选消息,并且其他的节点设备同样也可能会丢弃节点设备1的预竞选消息,这样会导致节点设备1无法成功竞选为主节点设备,也就发生了先发起竞选的节点设备反而无法当选主节点设备的问题。
43.在本实施例中,第二节点设备接收到第一预竞选消息时,当确定主节点设备仍在工作状态时,并不会直接丢弃第一预竞选消息,而是保持第一预竞选消息在自身缓存中的等待状态,当确定主节点设备不在工作状态时,针对第一预竞选消息发送预投票消息,从而能够避免先发起竞选的节点设备无法当选主节点的问题。
44.上述内容结合raft协议进行了说明,但是本实施例的改进并不限于针对raft进行,只要是符合本实施例实施场景的协议,均能够应用本实施例的改进。下面结合图2再对本实施例进行详细说明。
45.图2为实施例提供的一种基于共识系统的节点竞选投票方法的流程示意图。该共识系统包括多个节点设备,节点设备可以通过任何具有计算、处理能力的装置、设备、平台、设备集群等来实现。多个节点设备中包括处于主节点角色的主节点设备,还可以包括处于从节点角色的从节点设备,以及处于候选节点角色的候选节点设备。每一种角色也称为一种状态,在不同状态下,节点设备运行该状态的对应程序。候选节点角色,是准备竞选主节点角色的角色。本实施例将结合图1-1中的共识系统进行说明。为了更清楚地描述本实施例的实施过程,下面将节点设备1代表第一节点设备,将节点设备2代表第二节点设备,节点设备5为主节点设备。其中,节点设备1和节点设备2是共识系统中的任意一个节点设备。
46.在步骤s210中,节点设备1在确定主节点设备不在工作状态时,向其他节点设备发送第一预竞选消息pre-vote1。其他节点设备包括共识系统中除节点设备1之外的节点设备,例如包括图1-1中的节点设备2~节点设备4。节点设备1可以通过广播的方式在共识系统中发送第一预竞选消息pre-vote1。
47.其中,第一预竞选消息pre-vote1用于预备竞选主节点角色,第一预竞选消息是节点设备1在确定主节点设备不在工作状态时发送的。第一预竞选消息不同于竞选消息,竞选消息用于正式竞选主节点角色。当节点设备1接收到针对第一预竞选消息的足够多的投票消息时,并不会将自身确定为主节点设备,仅是用于预先确认有多少节点设备能够支持自身当选主节点设备。
48.在一种实施方式中,第一预竞选消息pre-vote1中可以包括第一预竞选任期term1和第一最晚共识数据index1。第一预竞选任期term1是节点设备1竞选的主节点角色的任期。每个节点设备都可以保存有当前主节点设备的任期,该任期可以称为当前任期。节点设备1所竞选的主节点角色的任期要比当前任期更新。第一预竞选任期term1可以采用数字表示。第一最晚共识数据index1是经过多个节点设备共识后的数据,每个节点设备中都保存有多个共识数据。第一最晚共识数据是节点设备1中多个共识数据中最晚的共识数据,也是最新的共识数据。第一最晚共识数据可以采用共识数据的标识表示,例如可以采用共识数据的序号(index)作为其标识,并可以通过其序号表示共识数据的顺序或新旧。
49.节点设备1可以采用以下方式确定主节点设备不在工作状态,判断自身的选举定时器是否超时,如果是,则确定主节点设备不在工作状态。其中,选举定时器在接收到主节点设备的消息时会被重置,也就是,节点设备1中的选举定时器,会在节点设备1接收到主节点设备的消息时被节点设备1重置。节点设备1在接收到主节点设备发送的消息时,可以确认主节点设备仍在工作状态,因而会将选举定时器重置为0。
50.在确定主节点设备不在工作状态时,可以生成第一预竞选消息pre-vote1,将第一预竞选消息pre-vote1发送至共识系统中的其他节点设备。在生成第一预竞选消息pre-vote1时,节点设备1可以采用以下步骤1a~步骤4a执行。
51.步骤1a,获取自身保存的主节点设备的任期,作为当前任期。
52.步骤2a,对当前任期进行更新,得到第一预竞选任期term1。对当前任期进行更新,具体可以对当前任期增加第一预设数值,得到第一预竞选任期term1。例如,第一预设数值
可以是1、2、3等整数。例如,当前任期为10,第一预竞选任期可以为11。
53.步骤3a,获取自身保存的第一最晚共识数据index1。例如,当节点设备中的共识数据采用逐渐增大的方式确定序号时,可以将序号最大的共识数据作为第一最晚共识数据index1。步骤3a可以在步骤1a之前或之后执行。
54.步骤4a,生成携带第一预竞选消息pre-vote1和第一最晚共识数据index1的第一预竞选消息pre-vote1。
55.在步骤s220中,节点设备2接收节点设备1发送的第一预竞选消息pre-vote1,将第一预竞选消息保存在缓存中。本实施例仅以节点设备2为例,说明任意一个节点设备在接收到其他节点设备发送的预竞选消息时的处理方式,即将预竞选消息保存在缓存中。
56.当第一预竞选消息pre-vote1中包括第一预竞选任期term1和第一最晚共识数据index1时,节点设备2在将第一预竞选消息pre-vote1保存在缓存中之前,还可以判断第一预竞选任期term1和第一最晚共识数据index1是否比节点设备2自身的对应数据更新。
57.当确定第一预竞选任期term1和第一最晚共识数据index1比节点设备2中的对应数据更新时,节点设备2将第一预竞选消息pre-vote1保存在缓存中。
58.当确定第一预竞选任期term1和第一最晚共识数据index1不比节点设备2中的对应数据更新时,丢弃第一预竞选消息pre-vote1。
59.其中,节点设备2中的对应数据可以包括:当前任期和第二最晚共识数据index2。该当前任期是节点设备2中保存的主节点设备的任期,第二最晚共识数据index2是节点设备2中保存的最晚共识数据,也是经过多个节点设备共识之后的数据。第二最晚共识数据index2是节点设备2中多个共识数据中最晚的共识数据,也是最新的共识数据。第二最晚共识数据index2可以采用共识数据的标识表示,例如可以采用共识数据的序号作为其标识,并可以通过其序号表示共识数据的顺序或新旧。
60.上述第一预竞选任期term1和第一最晚共识数据index1比节点设备2中的对应数据更新,包括以下情况:一种情况是,第一预竞选任期term1高于当前任期,并且第一最晚共识数据index1不早于第二最晚共识数据index2,其中第一最晚共识数据index1可以等于第二最晚共识数据index2,也可以晚于第二最晚共识数据index2;一种情况是,第一预竞选任期term1等于当前任期,并且第一最晚共识数据index1晚于第二最晚共识数据index2。
61.当第一最晚共识数据index1等于第二最晚共识数据index2时,说明两数据共识高度一致;当第一最晚共识数据index1晚于第二最晚共识数据index2时,说明前者比后者更新,共识高度更高。
62.通常,为了保证业务请求的执行顺序正确无误,会设定新的任期要高于原有任期,当新的任期低于原有任期时,说明竞选主节点的设备可能是落后节点,其他节点设备不能认可落后节点当选主节点设备。因此,第一预竞选任期term1应高于或等于当前任期。
63.在步骤s230中,当确定主节点设备仍在工作状态时,节点设备2保持第一预竞选消息pre-vote1在缓存中的等待状态;当确定主节点设备不在工作状态时,节点设备2基于缓存中的第一预竞选消息pre-vote1,向对应的节点设备1发送预投票消息。例如,预投票消息可以是携带“同意”信息的消息。在发送预投票消息之后,节点设备1可以丢弃缓存中的第一
预竞选消息pre-vote1,以便节省缓存空间。
64.节点设备2可以采用以下方式确定主节点设备不在工作状态:判断自身的选举定时器是否超时,如果是,则确定主节点设备不在工作状态。当节点设备2确定自身的选举定时器未超时时,确定主节点设备仍在工作状态。
65.其中,选举定时器在接收到主节点设备的消息时会被重置。也就是,节点设备2中的选举定时器,会在节点设备2接收到主节点设备的消息时被节点设备2重置。节点设备2在接收到主节点设备发送的消息时,可以确认主节点设备仍在工作状态,因而会将选举定时器重置为0。主节点设备的消息,包括主节点设备发送的心跳消息和携带共识数据的消息,还包括其他任何消息,只要是主节点设备发送的消息,都能说明主节点设备仍处于工作状态。
66.在本实施例中,将预竞选消息保存在节点设备的缓存中,能够确保先发起选举的节点设备当选主节点。例如,主节点设备每隔10ms向从节点设备发送一次心跳消息,从节点设备的选举定时器在100ms~2s的区间内随机取值。当主节点设备发生网络隔离时,假设节点设备1的选举定时器时长为100ms,时长最短,所以最先超时。节点设备2的选举定时器时长为2s。当节点设备2接收到节点设备1的第一预竞选消息pre-vote1时,由于节点设备1的选举定时器尚未超时,因此并不认为主节点设备发生网络隔离了。节点设备1将第一预竞选消息pre-vote1保持在缓存中,当选举定时器超时时,便可以向节点设备2投票。
67.节点设备2保持第一预竞选消息pre-vote1在自身缓存中的等待状态,可以是保持第一预竞选消息pre-vote1在自身缓存中的存储状态,将第一预竞选消息pre-vote1存储在缓存中一定时长。在一种实施方式中,可以在第一时长内保持第一预竞选消息pre-vote1在自身缓存中的等待状态。在第一时长内,可以按照预设周期,周期性判断主节点设备是否仍在工作状态。如果直到第一时长结束,仍确定主节点设备在工作状态时,则丢弃第一预竞选消息pre-vote1。
68.其中,第一时长大于预设经验时长,预设经验时长可以是正常节点感知到主节点设备发生网络隔离的时长,也可以是远大于任意的节点设备恢复网络隔离的时长,或者是大于预设的第二数量个预设周期的时长。这样,当节点设备2 在第二数量个周期内判断出主节点设备仍在工作状态,则可以丢弃第一预竞选消息pre-vote1。节点设备2可以开启等待定时器,并设定该等待定时器的时长为第一时长。
69.例如,主节点设备每隔10ms向从节点设备发送一次心跳消息,从节点设备的选举定时器在100ms~2s的区间内随机取值。第一时长可以取值为大于2s的时长,这样节点设备能够有充足的时间确定主节点设备是否真正不在工作状态。
70.设置缓存中第一预竞选消息pre-vote1的等待时长,是为了避免第一预竞选消息长时间存在缓存中,占用缓存空间的情况出现。例如,假设主节点设备并未被网络隔离,而节点设备1因故障等原因被网络隔离(参见图1-2中的情况),当节点设备1解除网络隔离后,向其他节点设备发送第一预竞选消息pre-vote1。在这种情况中,节点设备2将第一预竞选消息pre-vote1保存在缓存中第一时长,当第一时长结束之后,确定主节点设备仍在工作状态,则可以丢弃第一预竞选消息pre-vote1,不会对节点设备1发送投票消息,也及时地清理了缓存。
71.在一种应用场景中,当主节点设备被网络隔离后,多个从节点设备的选举定时器
会先后超时,从而先后发出预竞选消息。
72.仍以节点设备2为例,在步骤s230中,当节点设备2的缓存中存在若干个第一节点设备(例如包括节点设备1、节点设备3和节点设备4)发送的对应第一预竞选消息pre-vote1时,节点设备1可以采用多种实施方式,基于缓存中的若干个第一预竞选消息pre-vote1,向对应的第一节点设备发送预投票消息。
73.在一种实施方式中,节点设备2按照若干个第一预竞选消息的时间戳从早到晚的顺序,依次向若干个第一预竞选消息对应的第一节点设备发送预投票消息。在发送预投票消息时,可以间隔一定时长。例如,节点设备2先后接收到节点设备1、节点设备3和节点设备4分别发送的预竞选消息,可以先向节点设备1发送预投票消息,间隔一定时长之后向节点设备3发送预投票消息,再间隔一定时长之后向节点设备4发送预投票消息。由于预投票消息并不会直接导致主节点设备的当选,仅能表达一种预备认可,因此并不会导致主节点竞选的混乱。反而,向多个节点设备发送预投票消息可以确保有节点设备当选主节点,避免没有节点设备当选主节点的情况。
74.在一种实施方式中,节点设备2可以从若干个第一预竞选消息pre-vote1中确定时间戳最早的第一预竞选消息,向时间戳最早的第一预竞选消息对应的第一节点设备(例如节点设备1)发送预投票消息。
75.在一种实施方式中,节点设备2基于若干个第一节点设备的优先级,向对应的第一节点设备发送针对第一预竞选消息pre-vote1的预投票消息。该优先级可以是地理位置上的优先级,也可以是计算能力方面的优先级等。节点设备2可以基于优先级从高到低的顺序,选择对应的第一节点设备,向其发送预投票消息。
76.例如,多个节点设备在地理上分布在不同的区域,在竞选主节点设备中,可以优先支持与自身处于同一地理区域的节点设备作为主节点设备。或者,优先支持具有更高计算能力的节点设备作为主节点设备。
77.在步骤s240中,第一节点设备,以节点设备1为例,在接收到多于第一数量个预投票消息时向其他节点设备发送第一竞选消息vote1。
78.其中,第一数量可以是预先设定的,也可以是根据共识系统中的节点设备的数量确定的。例如,在raft协议中,第一数量可以设置为共识系统中节点设备总数量的一半,或者设置为大于该一半的数值。在raft协议中,超过一半的节点设备能够参与共识,共识系统就能够正常运行。
79.一个预投票消息是一个节点设备发送的,n个预投票消息是n个节点设备发送的。当n大于第一数量时,代表有多于第一数量个节点设备发送了预投票消息,同意节点设备1的竞选。当有足够多的节点设备认可节点设备1的竞选时,可以开始进行正式的主节点竞选,也能够确保不会造成不必要的主节点切换。
80.节点设备1在生成第一竞选消息vote1时,可以获取自身保存的主节点设备的任期,作为当前任期,对当前任期进行更新,得到第一预竞选任期,获取自身保存的第一最晚共识数据,生成携带第一预竞选任期和第一最晚共识数据的第一竞选消息vote。也就是,正式的竞选消息中的任期,采用当前任期确定。当前任期也可以称为业务上的任期。
81.下面再回到步骤s210中,节点设备1的选举定时器超时时,生成第一预竞选消息pre-vote1,向其他节点设备发送第一预竞选消息pre-vote1。当节点设备1的选举定时器再
次超时时,可以继续向其他节点设备发送第一预竞选消息pre-vote1,并不改变第一预竞选消息pre-vote1中携带的第一预竞选任期term1。
82.在步骤s240中,节点设备1可能接收到少于或等于第一数量个预投票消息,也可能一个预投票消息也没有接收到。在这种情况下,如果节点设备没有接收到主节点设备的消息,包括原主节点设备和新选举的主节点设备的消息,则节点设备1的选举定时器会再次超时。
83.在本说明书的另一实施例中,对于第二节点设备来说,在步骤s230中确定主节点设备不在工作状态时,还可以继续执行图3所示的流程示意图。图3为实施例提供的另一种基于共识系统的节点竞选投票方法的流程示意图,其中具体包括以下步骤s310~s360。仍以节点设备2代表第二节点设备进行说明。
84.步骤s310,当确定主节点设备不在工作状态时,节点设备2生成第二预竞选消息pre-vote2。节点设备2可以采用以下步骤1b~4b生成第二预竞选消息pre-vote2:步骤1b,获取自身保存的主节点设备的任期,作为当前任期。
85.步骤2b,对当前任期进行更新,得到第二预竞选任期term2。对当前任期进行更新,具体可以对当前任期增加第一预设数值,得到第二预竞选任期term2。例如,第一预设数值可以是大于0的整数。
86.步骤3b,获取自身保存的第二最晚共识数据index2。例如,当节点设备中的共识数据采用逐渐增大的方式确定序号时,可以将序号最大的共识数据作为第二最晚共识数据index2。步骤3b可以在步骤1b之前或之后执行。
87.步骤4b,生成携带第二预竞选任期term2和第二最晚共识数据index2的第二预竞选消息pre-vote2。
88.步骤s320,节点设备2向共识系统中的其他节点设备发送第二预竞选消息pre-vote2。其他节点设备是共识系统中除节点设备2之外的节点设备,例如图1-1中的节点设备1、节点设备3和节点设备4。
89.步骤s330,在发送第二预竞选消息pre-vote2之后,节点设备2还可以接收其他节点设备针对第二预竞选消息pre-vote2发送的预投票消息。其他节点设备在接收到第二预竞选消息pre-vote2之后的处理流程,与图2中节点设备2接收到第一预竞选消息pre-vote1之后的处理流程类似,此处不再赘述。
90.步骤s340,当接收的预投票消息的数量多于第一数量时,节点设备2向其他节点设备发送第二竞选消息vote2。节点设备2生成第二竞选消息vote2的过程,与节点设备1生成第一竞选消息vote1的过程类似,此处不再赘述。
91.步骤s350,节点设备2接收其他节点设备针对第二竞选消息vote2发送的投票消息。该投票消息可以是包含“同意”信息的消息。
92.步骤s360,当接收的投票消息的数量多于第一数量时,将节点设备2自身的角色确定为主节点角色。
93.再回顾一下以上步骤s330~s360。节点设备2可能不会接收到其他节点设备针对第二预竞选消息pre-vote2发送的预投票消息,也可能接收的预投票消息的数量不多于第一数量,因此步骤s330~s360是在条件满足时才会被执行,需要满足的条件包括:接收的预投票消息的数量多于第一数量,接收的投票消息的数量多于第一数量等。
94.再回顾步骤s310,节点设备2的选举定时器超时时,生成第二预竞选消息pre-vote2,向其他节点设备发送第二预竞选消息pre-vote2。当节点设备2的选举定时器再次超时时,可以继续向其他节点设备发送第二预竞选消息pre-vote2,并不改变第二预竞选消息pre-vote2中携带的第二预竞选任期term2。
95.本说明书中,第一节点设备、第一预竞选消息、第一预竞选任期、第一最晚共识数据、第一竞选消息等词语中的“第一”,以及文中相应的“第二”等词语,仅仅是为了区分和描述方便,而不具有任何限定意义。
96.上述内容对本说明书的特定实施例进行了描述,其他实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行,并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要按照示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的,或者可能是有利的。
97.图4为实施例提供的一种基于共识系统的节点竞选投票装置的示意性框图。该共识系统包括多个节点设备,节点设备可以通过任何具有计算、处理能力的装置、设备、平台、设备集群等来实现。多个节点设备中包括处于主节点角色的主节点设备。该装置实施例与图2和图3所示方法实施例相对应。装置400部署在任意一个第二节点设备中,该装置400包括:第一接收模块410,配置为,接收第一节点设备发送的第一预竞选消息;其中,所述第一预竞选消息用于预备竞选主节点角色,所述第一预竞选消息是所述第一节点设备在确定主节点设备不在工作状态时发送的;第一缓存模块420,配置为,将所述第一预竞选消息保存在缓存中;第一保持模块430,配置为,当确定主节点设备仍在工作状态时,保持所述第一预竞选消息在所述缓存中的等待状态;第一投票模块440,配置为,当确定主节点设备不在工作状态时,基于所述缓存中的第一预竞选消息,向对应的第一节点设备发送预投票消息,以使得所述第一节点设备在接收到多于第一数量个预投票消息时向其他节点设备发送第一竞选消息。
98.在一种实施方式中,所述第一预竞选消息中包括第一预竞选任期和第一最晚共识数据;所述第一最晚共识数据是经过多个节点设备共识后的数据,所述第一预竞选任期是所述第一节点设备竞选的主节点角色的任期;所述第一缓存模块420,具体配置为:当确定所述第一预竞选任期和第一最晚共识数据比所述第二节点设备中的对应数据更新时,将所述第一预竞选消息保存在缓存中。
99.在一种实施方式中,装置400还包括:第一丢弃模块(图中未示出),配置为,当确定所述第一预竞选任期和第一最晚共识数据不比所述第二节点设备中的对应数据更新时,丢弃所述第一预竞选消息。
100.在一种实施方式中,所述第二节点设备中的对应数据包括:当前任期和第二最晚共识数据;所述当前任期是所述第二节点设备中保存的主节点设备的任期,所述第二最晚共识数据是所述第二节点设备中保存的最晚共识数据;所述第一预竞选任期和第一最晚共识数据比所述第二节点设备中的对应数据更
新,包括以下情况:所述第一预竞选任期高于所述当前任期,并且所述第一最晚共识数据不早于所述第二最晚共识数据;所述第一预竞选任期等于所述当前任期,并且所述第一最晚共识数据晚于所述第二最晚共识数据。
101.在一种实施方式中,所述第一保持模块430具体配置为:在第一时长内保持所述第一预竞选消息在所述缓存中的等待状态;所述第一时长大于预设经验时长;所述装置400还包括:第二丢弃模块(图中未示出),配置为,当直到所述第一时长结束,仍确定主节点设备在工作状态时,丢弃所述第一预竞选消息。
102.在一种实施方式中,装置400还包括:第一判断模块(图中未示出),配置为采用以下操作确定主节点设备不在工作状态:判断自身的选举定时器是否超时,如果是,则确定主节点设备不在工作状态;其中,所述选举定时器在接收到主节点设备的消息时会被重置。
103.在一种实施方式中,第一投票模块440具体配置为,当所述缓存中存在若干个第一节点设备发送的对应第一预竞选消息时,按照若干个第一预竞选消息的时间戳从早到晚的顺序,依次向若干个第一预竞选消息对应的第一节点设备发送预投票消息;或者,第一投票模块440具体配置为,当所述缓存中存在若干个第一节点设备发送的对应第一预竞选消息时,从若干个第一预竞选消息中确定时间戳最早的第一预竞选消息,向所述时间戳最早的第一预竞选消息对应的第一节点设备发送预投票消息;或者,第一投票模块440具体配置为,当所述缓存中存在若干个第一节点设备发送的对应第一预竞选消息时,基于所述若干个第一节点设备的优先级,向对应的第一节点设备发送针对第一预竞选消息的预投票消息。
104.在一种实施方式中,装置400还包括:第一生成模块450,配置为,当确定主节点设备不在工作状态时,生成第二预竞选消息;第一发送模块460,配置为,向所述共识系统中的其他节点设备发送所述第二预竞选消息。
105.在一种实施方式中,所述第一生成模块450包括:第一获取子模块(图中未示出),配置为,获取自身保存的主节点设备的任期,作为当前任期;第一更新子模块(图中未示出),配置为,对所述当前任期进行更新,得到第二预竞选任期;第二获取子模块(图中未示出),配置为,获取自身保存的第二最晚共识数据;第一生成子模块(图中未示出),配置为,生成携带所述第二预竞选任期和所述第二最晚共识数据的第二预竞选消息。
106.在一种实施方式中,装置400还包括:第二接收模块470,配置为,在发送所述第二预竞选消息之后,接收其他节点设备
针对所述第二预竞选消息发送的预投票消息;第二发送模块480,配置为,当接收的预投票消息的数量多于所述第一数量时,向其他节点设备发送第二竞选消息;第三接收模块490,配置为,接收其他节点设备针对所述第二竞选消息发送的投票消息;第一确定模块411,配置为,当接收的投票消息的数量多于所述第一数量时,将所述第二节点设备自身的角色确定为主节点角色。
107.上述装置实施例与方法实施例相对应,具体说明可以参见方法实施例部分的描述,此处不再赘述。装置实施例是基于对应的方法实施例得到,与对应的方法实施例具有同样的技术效果,具体说明可参见对应的方法实施例。
108.本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行图1-1、图1-2、图2和图3任一项所述的方法。
109.本说明书实施例还提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现图1-1、图1-2、图2和图3任一项所述的方法。
110.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于存储介质和计算设备实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
111.本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
112.以上所述的具体实施方式,对本发明实施例的目的、技术方案和有益效果进行了进一步的详细说明。所应理解的是,以上所述仅为本发明实施例的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献