1.本发明属于分布式系统领域,具体涉及一种基于优先级的共识方法和分布式系统。
背景技术:2.在一个分布式系统中,如何保证集群中所有节点中的数据完全相同并且能够对某个提案(proposal)达成一致,是分布式系统正常工作的核心问题,而共识算法就是用来保证分布式系统一致性的方法。目前,raft是比较常用的一种共识算法。raft集群包含多个作为节点的服务器,在任何给定时间,每个服务器都处于以下三种状态之一:领导者(leader)、跟随者(follower)或候选者(candidate),这几个状态之间可以相互转换。raft算法将一致性问题分解为两个子问题,领导者选举和状态复制,具体使用一种心跳机制来触发领导者选举。
3.分析raft算法的选举流程可以发现,raft算法在其领导者选举步骤使用了一种随机选择候选者节点加投票选举的机制,导致了选举结果的随机性,而对一个强领导性的算法来说,领导者节点的性能和稳定性,直接决定了整个集群的运行速度和安全。
4.具体的,raft算法领导者节点竞争阶段使用的随机超时机制随着集群中节点数目的增加,会出现多个节点同时超时成为候选者节点的情况(前一个候选者未完成投票过程而出现新的节点超时成为候选者),这样就会将集群中其他节点的选票进行瓜分,导致任一候选者都无法收到超过半数以上节点的同意投票,选举过程陷入僵局,raft算法在此通过继续等待下一个超时的方式来打破这种局面以保证算法的活性,但是也会带来额外的等待时间,即多一次的超时等待时间,如果集群中节点数量过多,这种情况出现的频率也会随之增加,额外的等待时间可能会是更多个选举超时时长,从而影响集群的运行效率。
技术实现要素:5.本发明实施例的目的在于提供一种基于优先级的共识方法和分布式系统,以实现提升分布式系统运行时的安全性、稳定性、活性和运行效率的目的。具体技术方案如下:
6.第一方面,本发明实施例提供了一种基于优先级的共识方法,应用于分布式系统中,所述方法包括:
7.每个节点在达到节点状态信息中各项属性对应的更新条件后,更新自身的节点状态信息;其中,更新后的节点状态信息含有表征节点性能和安全性的多项属性的指标值;
8.在预设触发条件下,每个跟随者节点根据自身更新后的节点状态信息,计算对应的节点优先级;
9.每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,以使得所述分布式系统中有跟随者节点在其更新后的节点选举超时时长到达时,启动领导者节点选举流程;其中,所述节点优先级和节点选举超时时长范围的映射关系中,节点优先级越高,对应的节点选举超时时
长范围中节点选举超时时长越短。
10.在本发明的一个实施例中,所述更新后的节点状态信息,包括:
11.节点的吞吐量、节点成为领导者节点次数、跟随者节点收到写入业务请求次数、跟随者节点的心跳报文时延变化和节点的共识时延。
12.在本发明的一个实施例中,所述跟随者节点的心跳报文时延变化的确定过程包括:
13.针对任一跟随者节点,该跟随者节点计算当前次获得的与领导者节点间的心跳报文时延,与上一次获得的与领导者节点间的心跳报文时延之间的差值,得到该跟随者节点的心跳报文时延变化。
14.在本发明的一个实施例中,所述节点状态信息中各项属性对应的更新条件,包括:
15.针对所述节点的吞吐量,对应的更新条件为领导者节点完成写入操作;
16.针对所述节点成为领导者节点次数,对应的更新条件为节点身份转变为领导者节点;
17.针对所述跟随者节点收到写入业务请求次数,对应的更新条件为跟随者节点收到写入业务请求;
18.针对所述跟随者节点的心跳报文时延变化,对应的更新条件为跟随者节点收到来自领导者节点的心跳报文;
19.针对所述节点的共识时延,对应的更新条件为领导者节点完成写入操作。
20.在本发明的一个实施例中,针对所述分布式系统的第一次领导者选举,所述预设触发条件为所述分布式系统的启动;针对所述分布式系统在第一次之后的各次领导者选举,所述预设触发条件为跟随者节点接收到当前次中领导者节点发送的请求报文。
21.在本发明的一个实施例中,所述每个跟随者节点根据自身更新后的节点状态信息,计算对应的节点优先级,包括:
22.针对每个跟随者节点,该跟随者节点在所述分布式系统预先设置的属性得分关系中,确定该跟随者节点的更新后的节点状态信息中各项属性的得分值;其中,所述属性得分关系含有更新后的节点状态信息中各项属性在不同数值范围下对应的得分值;
23.基于所述各项属性的得分值的求和,得到该跟随者节点更新后的节点状态信息总分;
24.利用该跟随者节点更新后的节点状态信息总分,在所述分布式系统预先设置的节点优先级划分关系中,确定该跟随者节点的节点优先级;其中,所述节点优先级划分关系含有更新后的节点状态信息总分在不同数值范围下对应的节点优先级。
25.在本发明的一个实施例中,所述每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,包括:
26.每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,确定自身更新后的节点选举超时时长范围;
27.每个跟随者节点在所述自身更新后的节点选举超时时长范围内,随机确定一个数值,作为自身更新后的节点选举超时时长。
28.在本发明的一个实施例中,若所述分布式系统中有领导者节点,当所述分布式系
统中有跟随者节点在其更新后的节点选举超时时长到达时,所述方法还包括:
29.领导者节点下台转变为跟随者节点,转变后的跟随者节点根据之前确定的更新后的节点状态信息,计算对应的节点优先级并更新自身的节点选举超时时长,以参与领导者节点选举流程。
30.第二方面,本发明实施例提供了一种分布式系统,至少包括多个跟随者节点,其中:
31.每个节点,用于在达到节点状态信息中各项属性对应的更新条件后,更新自身的节点状态信息;其中,更新后的节点状态信息含有表征节点性能和安全性的多项属性的指标值;
32.每个跟随者节点,用于在预设触发条件下,根据自身更新后的节点状态信息,计算对应的节点优先级;根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,以使得所述分布式系统中有跟随者节点在其更新后的节点选举超时时长到达时,启动领导者节点选举流程;其中,所述节点优先级和节点选举超时时长范围的映射关系中,节点优先级越高,对应的节点选举超时时长范围中节点选举超时时长越短。
33.在本发明的一个实施例中,所述更新后的节点状态信息,包括:
34.节点的吞吐量、节点成为领导者节点次数、跟随者节点收到写入业务请求次数、跟随者节点的心跳报文时延变化和节点的共识时延。
35.本发明的有益效果:
36.本发明实施例所提供的基于优先级的共识方法提供了一种新的优先级选举超时机制,每个节点能够实时更新自身的节点状态信息;在预设触发条件下,每个跟随者节点根据自身更新后的节点状态信息计算对应的节点优先级,然后根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长。本发明实施例通过为节点添加并计算出更多的节点状态信息,根据节点状态信息为所有跟随者节点划分不同的优先级,通过设置映射关系中节点优先级越高对应的节点选举超时时长范围中节点选举超时时长越短,使得优先级更高的跟随者节点在选举过程中能够更快到达超时状态以启动领导者节点选举流程,同时也能有效避免随机超时时长引发的选票瓜分问题,因此能够提升系统的安全性、稳定性、活性、运行效率等系统性能,同时相比于现有技术还能够减小系统的通信开销。
附图说明
37.图1为本发明实施例所提供的基于优先级的共识方法的一种流程示意图;
38.图2为本发明实施例所提供的基于优先级的共识方法的另一种流程示意图;
39.图3为本发明实施例所提供的分布式系统的结构示意图。
具体实施方式
40.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他
实施例,都属于本发明保护的范围。
41.raft算法为了保证集群中只能有一个领导者节点,采用一种简单的随机选举超时时间的机制来确保只有一个节点到达超时状态,超时时间从一个固定的区间(例如150-300毫秒)中随机选择。以此来将节点的超时时长分散开,率先到达超时状态的节点身份转变为候选者,任期自增,同时向集群内节点发送投票请求,收到超过半数以上同意投票后身份转换为领导者节点并向其他服务器发送心跳报文。这种机制可以在节点数量较少时简单快捷地解决选票瓜分问题。
42.但是随机就意味着不可预测,所以选举产生的节点很可能是集群中的任一节点,在一个集群中,各个节点的性能和稳定程度会有一定差异,因此领导者节点应该是集群中最优的节点,可以考虑通过修改选举机制来选出符合要求的节点作为领导者节点。
43.现有技术中,张胜在《基于raft算法的分布式系统数据一致性研究》中提出了一种基于节点优先级的领导者选举方案,根据集群中各节点间的优先级顺序,优先选举出集群中优先级最高且满足领导者选举安全性规则的节点成为领导者节点以使选举的结果更加合理。
44.具体的:每个节点需要维护一个被称为资格表的新的数据结构,里边记录了其它节点的资格信息,资格表中的内容是按照既定的优先级表排序的。在实际应用中,优先级表就是集群维护人员提供的节点优先级顺序,它指出了不同节点成为领导者的优先级,约定编号较小的节点其优先级更高。在优先级选举过程的投票阶段,资格表是节点投票的参考依据,优先级选举方案约定节点只会给本地资格表中优先级最高的唯一节点投赞成票,其它一律投否定票。
45.上述基于节点优先级的领导者选举方案分为预投票和投票两个阶段,预投票过程又分为资格确认和资格写入两个子阶段。资格确认阶段就是节点确认自己在本轮领导者选举过程中是否有资格被选举为领导者节点的过程,其通过的条件是在集群中满足超过半数的节点同意自己成为领导者节点。如果自己有资格成为领导者节点,在进入资格写入阶段后,需要主动向其它节点发起资格写入请求,并响应来自其它节点的资格写入请求,否则在资格写入阶段将放弃发起资格写入请求,仅对其它节点的资格写入请求进行响应。
46.通过资格确认的节点在资格写入阶段,需要将自己的资格信息写入自身维护的资格表中,同时将该资格信息广播到集群中,收到该信息的节点在正式投票阶段给出赞成票之前,无条件将此信息写入自己维护的资格表中并响应写入结果。然后资格写入请求者需要根据响应的结果来判断自己资格写入是否成功,判定的依据就是自己的资格信息在集群中的副本数量是否已经超过半数。
47.通过资格写入的节点待预投票阶段过去后,会进入到投票阶段,并准备发起投票,期间也要响应其它节点的投票请求。如果节点在资格确认阶段就已经确定失去资格(小于半数的节点同意自己成为领导者节点),那么资格写入阶段将弃权不做资格信息的写入及广播操作,仅仅是响应其它节点的资格写入请求。如果节点是在资格写入阶段失败,那么进入投票阶段以后,同样也不会发起投票请求,仅仅是对其他节点的投票请求进行响应。
48.投票阶段和原领导者选举方案的投票过程基本一致,只是进行投票的节点在投票过程中会参考自身维护的资格表来决定是否给被投票者投赞成票,而资格表里边的内容就是资格写入阶段所收到的来自其它节点的资格信息。
49.但是上述方案并未给出具体、详细的优先级策略,同时还引入了额外的两次资格确认和资格写入的rpc请求,因而增加了系统的通信开销。
50.为了提升分布式系统运行时的安全性、稳定性、活性、运行效率,并减小分布式系统的通信开销,本发明实施例提供了一种基于优先级的共识方法和分布式系统。
51.第一方面,本发明实施例提供了一种基于优先级的共识方法,应用于分布式系统中,包括以下步骤:
52.s1,每个节点在达到节点状态信息中各项属性对应的更新条件后,更新自身的节点状态信息。
53.本发明实施例的分布式系统中,至少包括多个跟随者节点,当然,在第一次选举之后,分布式系统中还会存在一个领导者节点。本发明实施例中,分布式系统中存在的所有节点均会进行s1步骤的处理。
54.本发明实施例中,更新后的节点状态信息含有表征节点性能和安全性的多项属性的指标值,用于衡量节点的计算能力、计算效率以及安全性等。
55.比如,可选的一种实施方式中,更新后的节点状态信息,包括:
56.节点的吞吐量、节点成为领导者节点次数、跟随者节点收到写入业务请求次数、跟随者节点的心跳报文时延变化和节点的共识时延。
57.相比于现有技术,本发明实施例在节点服务器原有的状态信息中增加上述各项属性,以在后续根据更新后的节点状态信息计算跟随者节点对应的节点优先级。
58.其中,节点的吞吐量表示单位时间内成功传送数据的数量。raft算法并未考虑系统在正常运行过程中出现的负载偏移问题,故本发明实施例对节点的吞吐量进行实时测算以解决该问题。
59.节点成为领导者节点次数表示该节点截止当前时刻累计担当领导者节点的总次数。为了解决系统的中心化问题,在不考虑节点性能差别的情况下,旨在保证每个节点都有成为领导者节点的机会,本发明实施例对于节点优先级的计算需要考量节点担任过领导者节点的次数。
60.跟随者节点收到写入业务请求次数主要是用来统计跟随者节点需要对收到的写入业务请求进行转发的次数。raft算法的日志条目只从领导者节点发送给其他的服务器,当客户端的写入业务请求发送给跟随者节点时,会经由跟随者节点转发给领导者节点,当存在大量的写入业务请求都是直接发送到跟随者节点时,跟随者节点将请求再次转发给领导者节点的通信开销不容忽视,因此本发明实施例在更新后的节点状态信息中添加了跟随者节点收到写入业务请求次数。
61.本发明实施例考虑到在实际生产环境中,集群内各个节点的分布具有多样性,各节点和领导者节点间的时延也各不相同,一个相对位置远离集群中心的领导者节点与集群中大多数节点间的时延会高于更靠近中心的位置节点与其他节点间时延,为了保障集群的性能不受单个节点性能的影响,领导者节点的选择应该考虑其与集群内其他节点间的时延。具体考虑有跟随者节点的心跳报文时延变化和共识时延。
62.其中,跟随者节点的心跳报文时延变化的确定过程包括:
63.针对任一跟随者节点,该跟随者节点计算当前次获得的与领导者节点间的心跳报文时延,与上一次获得的与领导者节点间的心跳报文时延之间的差值,得到该跟随者节点
的心跳报文时延变化。
64.其中,跟随者节点与领导者节点间的心跳报文时延是通过测量心跳报文传输耗时来计算得到的,其中,领导者节点发送的请求报文中可以加入发送报文的时间戳,那么,当跟随者节点收到请求报文后,可以根据发送报文的时间戳和接收到请求报文的时间,计算收到时间和发送时间的间隔作为跟随者节点与领导者节点间的心跳报文时延。
65.之所以选用跟随者节点的心跳报文时延变化作为最终加入到更新后的节点状态信息中的属性,是考虑到集群中节点间的时延往往受到多种因素的影响而不尽相同,节点间时延的稳定性直接影响了系统的性能。因此,利用跟随者节点与领导者节点间的心跳报文时延计算节点间网络时延变化以反映节点间的连接稳定性。
66.节点的共识时延是直接反映存储系统性能的技术指标,表示分布式系统处理一次写入业务请求的总耗时,包括领导者节点将日志复制到集群内所有节点上的耗时。
67.在本发明实施例中,节点状态信息的不同项属性,对应的更新时机并不相同。
68.可选的一种实施方式中,节点状态信息中各项属性对应的更新条件,包括:
69.(1)针对节点的吞吐量,对应的更新条件为领导者节点完成写入操作。
70.具体的,领导者节点每次完成写入操作后均会更新自身的“节点的吞吐量”以实现节点状态信息的更新。但针对跟随者节点,由于其并不进行写入操作,因此并不进行该项属性的更新,会维持原先的数值。其中,针对每个节点,节点的吞吐量是不断保存更新后的数据,并不进行清零操作。
71.(2)针对节点成为领导者节点次数,对应的更新条件为节点身份转变为领导者节点。
72.具体的,一个跟随者节点只有在转变为领导者节点后,才会更新自身的“节点成为领导者节点次数”,即进行数值加一操作,否则维持原先的数值。同样的,针对每个节点,节点成为领导者节点次数是不断保存更新后的数据,并不进行清零操作。
73.(3)针对跟随者节点收到写入业务请求次数,对应的更新条件为跟随者节点收到写入业务请求。
74.具体的,当一个跟随者节点收到写入业务请求后,会更新自身的“跟随者节点收到写入业务请求次数”,即进行数值加一操作。当跟随者节点转变为领导者节点后,该项属性的数值会清零。而领导者节点并不进行该项属性的更新,会维持原先的0数值。
75.(4)针对跟随者节点的心跳报文时延变化,对应的更新条件为跟随者节点收到来自领导者节点的心跳报文。
76.具体的,当跟随者节点收到来自领导者节点的心跳报文后,会更新自身的“跟随者节点的心跳报文时延变化”,并不断保存更新后的数据。领导者节点并不进行该项属性的更新,会维持原先的数值,比如,若其之前没有担任过跟随者节点,该项数值仍为0;若其之前担任过跟随者节点,则会继承之前作为跟随者节点时最新更新的数值。领导者节点只有在其转变为跟随者节点并收到来自新的领导者节点的心跳报文后才会进行该项属性的更新。
77.(5)针对节点的共识时延,对应的更新条件为领导者节点完成写入操作。
78.具体的,领导者节点每次完成写入操作后均会更新自身的“共识时延”。但针对跟随者节点,由于其并不进行写入操作,因此并不进行该项属性的更新,会维持原先的数值。其中,针对每个节点,节点的共识时延,是不断保存更新后的数据,并不进行清零操作。
79.可以理解的是,针对本发明实施例中的每个节点,按照s1步骤的处理方式,实际上是在不同时机下更新节点状态信息中不同的属性值,实现了自身节点状态信息实时更新的目的。
80.s2,在预设触发条件下,每个跟随者节点根据自身更新后的节点状态信息,计算对应的节点优先级。
81.可选的一种实施方式中,针对分布式系统的第一次领导者选举,预设触发条件为分布式系统的启动。
82.具体的,当分布式系统启动后,所有节点均为跟随者节点,默认各节点更新后的节点状态信息均为初始值0,利用本发明实施例的节点优先级计算策略可以计算出所有节点均为同样的一个节点优先级。关于本发明实施例的节点优先级计算策略在后文中具体说明。
83.可选的另一种实施方式中,针对分布式系统在第一次之后的各次领导者选举,预设触发条件为跟随者节点接收到当前次中领导者节点发送的请求报文。
84.在该种实施方式中,分布式系统包括一个领导者节点和多个跟随者节点。
85.本领域技术人员已知的是,raft算法在完成第一轮选举进入正常运行状态后,节点间的交互通过append entries协议完成,领导者节点定期向跟随者节点发送append entries rpc请求报文(在本发明实施例中简称为请求报文),该请求报文一方面是作为心跳信息,告知跟随者节点自己的状态信息,巩固领导者节点的身份状态,同时也可以利用跟随者节点反馈的append entries rpc响应报文掌握跟随者节点的工作情况;另一方面是发送待复制的日志数据给集群内的跟随者节点。
86.在该种实施方式中,每个跟随者节点在接收到当前领导者节点发送的请求报文后,根据自身更新后的节点状态信息,利用本发明实施例的节点优先级计算策略计算对应的节点优先级。
87.为了在选举阶段选出性能更优、通信更快、稳定性更高的节点,本发明实施例提供了一种新的优先级选举超时机制,在预设触发条件下,通过对跟随者节点更新后的节点状态信息进行评估,利用本发明实施例的节点优先级计算策略计算出对应的节点优先级,根据节点优先级计算节点选举超时时长,并在节点状态信息变化时同步更新。
88.具体的,本发明实施例中预先划分有多个不同等级的节点优先级,可以用一定的字符区分表示,如采用阿拉伯数字、汉字或者其余字符符号。以阿拉伯数字为例,节点优先级可以用1、2、3等表示,节点优先级对应的数值越小表示优先级越高。在预设触发条件下,每个跟随者节点根据自身更新后的节点状态信息,通过考虑其中各项属性对节点优先级的影响,实时计算出跟随者节点的节点优先级。
89.可选的一种实施方式中,每个跟随者节点根据自身更新后的节点状态信息,计算对应的节点优先级,包括:
90.s21,针对每个跟随者节点,该跟随者节点在分布式系统预先设置的属性得分关系中,确定该跟随者节点的更新后的节点状态信息中各项属性的得分值。
91.本发明实施例预先利用大量样本数据,通过实验构建有一个适用于分布式系统的属性得分关系。其中,属性得分关系含有更新后的节点状态信息中各项属性在不同数值范围下对应的得分值。属性得分关系可以为一个表格等形式。以更新后的节点状态信息中的
一个属性-节点的共识时延为例说明,本发明实施例可以利用实验数据预先确定一个范围较大的节点的共识时延数值区间,并将其划分为多个小区间,相邻的两个小区间内,在前小区间的数值上限和在后小区间的数值下限接续设置,并为每个小区间设置对应的得分值,不同小区间的得分值不同。其余属性同节点的共识时延类似,在此不做详细说明。
92.具体的,针对节点的吞吐量,数值越高,说明节点传输数据量的能力越强,那么就更适合作为领导者节点。而针对跟随者节点收到写入业务请求次数,本领域技术人员可以理解的是,跟随者节点如果收到写入业务请求是无法处理的,需要转发给领导者节点,领导者节点收到写入业务请求可以直接进行处理。跟随者节点转发写入业务请求会耗时,本发明实施例统计跟随者节点收到写入业务请求次数是为了统计跟随者节点需要将写入业务请求进行转发的次数,需要转发次数越多的节点,更适合成为领导者节点,这样可以节省转发耗时。
93.可见,节点的吞吐量和跟随者节点收到写入业务请求次数这两项属性为节点优先级计算中的正相关因素,因此针对这两项属性,本发明实施例设置为属性数值越大,对应的得分值越高。
94.针对节点成为领导者节点次数,本领域技术人员可以理解的是,当一个节点担任的领导者节点次数越多,则该系统的中心化程度增加,影响系统的安全性,因此该节点更不适合再次担任领导者节点。针对跟随者节点的心跳报文时延变化和节点的共识时延,可以理解的是,如果一个跟随者节点的心跳报文时延变化越大或者节点的共识时延越大,说明其稳定性和处理效率越差,因此也更不适合再次担任领导者节点。
95.可见,节点成为领导者节点次数、跟随者节点的心跳报文时延变化和节点的共识时延这三项属性为节点优先级计算中的负相关因素,因此针对这三项属性,本发明实施例设置为属性数值越大,对应的得分值越低。
96.关于属性得分关系中各项属性的不同数值范围和对应的得分值,在后文中以具体示例说明。
97.s22,基于各项属性的得分值的求和,得到该跟随者节点更新后的节点状态信息总分。
98.可选的一种实施方式中,可以直接将各项属性的得分值相加,得到该跟随者节点更新后的节点状态信息总分,以实现简便快速计算的目的。
99.可选的另一种实施方式中,可以预先利用大量实验数据和实际经验,确定更新后的节点状态信息中各项属性对节点优先级的影响程度大小,为各项属性的得分值配置对应的权重系数,利用对应的权重系数实现各项属性的得分值的加权求和,以在后续得到更符合实际需求、准确度更高的节点优先级确定结果。
100.s23,利用该跟随者节点更新后的节点状态信息总分,在分布式系统预先设置的节点优先级划分关系中,确定该跟随者节点的节点优先级。
101.本发明实施例预先利用大量样本数据,通过实验构建有一个适用于分布式系统的节点优先级划分关系。其中,节点优先级划分关系含有更新后的节点状态信息总分在不同数值范围下对应的节点优先级。节点优先级划分关系中划分有多个节点优先级,每个节点优先级对应于一个更新后的节点状态信息总分的数值范围。针对相邻的两个更新后的节点状态信息总分的数值范围所对应的小区间,在前小区间的数值上限和在后小区间的数值下
限接续设置。更新后的节点状态信息总分对应小区间的数值越大,节点优先级越高。同样的,节点优先级划分关系也可以为一个表格等形式。
102.可以理解的是,本发明实施例中,节点优先级计算策略中既包含正相关因素又包含负相关因素,比如节点优先级随着更新后的节点状态信息中节点的吞吐量和跟随者节点收到写入业务请求次数的数值增加而增加,而随着节点成为领导者节点次数、跟随者节点的心跳报文时延变化和节点的共识时延的数值的增加而下降,因此能够保障所有跟随者节点的节点优先级是动态变化的,适应性和灵活性更强。
103.s3,每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,以使得分布式系统中有跟随者节点在其更新后的节点选举超时时长到达时,启动领导者节点选举流程。
104.本发明实施例预先利用大量样本数据,通过实验构建有一个适用于分布式系统的节点优先级和节点选举超时时长的映射关系,其中,节点优先级和节点选举超时时长范围的映射关系中,节点优先级越高,对应的节点选举超时时长范围中节点选举超时时长越短。
105.具体的,节点优先级和节点选举超时时长范围的映射关系中节点优先级与节点优先级划分关系中的节点优先级是对应的。节点优先级和节点选举超时时长范围的映射关系中,每个节点优先级对应有一个节点选举超时时长范围,可以预先将一个预设节点选举超时时长范围,如150-300ms等,按照节点优先级的数目划分为多个超时时长小区间,同样的,相邻的两个超时时长小区间内,在前超时时长小区间的数值上限和在后超时时长小区间的数值下限接续设置。针对优先级越高的节点优先级,对应的超时时长小区间的数值越小。
106.每个跟随者节点可以利用s2确定的节点优先级在节点优先级和节点选举超时时长范围的映射关系中确定出对应的节点选举超时时长范围,继而更新自身的节点选举超时时长。可以理解的是,在该种设置下,优先级更高的跟随者节点能够因其拥有更短的节点选举超时时长而有更大几率成为候选者节点继而有望成为领导者节点。
107.可选的一种实施方式中,每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,包括:
108.每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,确定自身更新后的节点选举超时时长范围。
109.每个跟随者节点在自身更新后的节点选举超时时长范围内,按照预定对应关系确定一个数值,作为自身更新后的节点选举超时时长。
110.在该种实施方式可以是,针对一个跟随者节点,当确定自身更新后的节点选举超时时长范围后,按照预定对应关系选出该更新后的节点选举超时时长范围内对应的一个节点选举超时时长。预定对应关系可以与该跟随者节点针对节点选举超时时长的更新次数相关;比如,当前是该跟随者节点的第n次更新,则可以确定自身更新后的节点选举超时时长范围内的数值个数m,将n利用预设的归一化方法映射为[1,m]之间的一个数值h,则在自身更新后的节点选举超时时长范围内选出第h个数值,作为自身更新后的节点选举超时时长。对可选的一种归一化方法举例说明,比如自身更新后的节点选举超时时长范围为150-200ms,m=50,当n=1000时,可以计算n/m的余数得到h,继而得到更新后的节点选举超时时长。当然,预定对应关系也可以与当前时间相关,比如将当前时间进行一定的数值变换,对应为一个数值编号,在该跟随者节点自身更新后的节点选举超时时长范围内选取对应数值
编号的数值等,这都是合理的。
[0111]
可选的另一种实施方式中,每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,包括:
[0112]
每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,确定自身更新后的节点选举超时时长范围。
[0113]
每个跟随者节点在自身更新后的节点选举超时时长范围内,随机确定一个数值,作为自身更新后的节点选举超时时长。
[0114]
在该种实施方式中,即使两个跟随者节点确定出的节点选举超时时长范围相同,由于各自均从该相同的节点选举超时时长范围内随机选取一个数值作为自身更新后的节点选举超时时长,因此,能够保证最短节点选举超时时长较低的重复概率,从而保证分布式系统中出现最先达到其更新后的节点选举超时时长的跟随者节点的唯一性和快速性。
[0115]
同时,在该种实施方式中,只有最高优先级的一部分跟随者节点的更新后的节点选举超时时长较为接近,相当于在间接减少参与选举的节点的同时,还筛选出了性能和稳定性更优的节点,通过设置合适的优先级计算规则,理论上集群可以在一轮领导者选举过程中选出性能和稳定性更优的领导者节点。
[0116]
需要说明的是,若分布式系统中有领导者节点,当分布式系统中有跟随者节点在其更新后的节点选举超时时长到达时,方法还包括:
[0117]
领导者节点下台转变为跟随者节点,转变后的跟随者节点根据之前确定的更新后的节点状态信息,计算对应的节点优先级并更新自身的节点选举超时时长,以参与领导者节点选举流程。
[0118]
也就是说,领导者节点会实时更新自身的节点状态信息,但只有在下台转变为跟随者节点后,才会按照跟随者节点的处理方式执行本发明实施例的步骤s2~s3。具体不再详细说明。
[0119]
本发明实施例所提供的基于优先级的共识方法提供了一种新的优先级选举超时机制,每个节点能够实时更新自身的节点状态信息;在预设触发条件下,每个跟随者节点根据自身更新后的节点状态信息计算对应的节点优先级,然后根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长。本发明实施例通过为节点添加并计算出更多的节点状态信息,根据节点状态信息为所有跟随者节点划分不同的优先级,通过设置映射关系中节点优先级越高对应的节点选举超时时长范围中节点选举超时时长越短,使得优先级更高的跟随者节点在选举过程中能够更快到达超时状态以启动领导者节点选举流程,同时也能有效避免随机超时时长引发的选票瓜分问题,因此能够提升系统的安全性、稳定性、活性、运行效率等系统性能,同时相比于现有技术还能够减小系统的通信开销。
[0120]
以下,请参考图2理解本发明实施例的基于优先级的共识方法的完整过程。需要说明的是,图2是以分布式系统在第一次之后的领导者选举为例说明。关于分布式系统的第一次领导者选举,请结合图2和下文相关内容理解。
[0121]
本发明实施例中,节点优先级由高至低标识为1、2、3。对不同优先级的节点分配不同等级的随机选举超时时长范围,可以将150-300ms的节点选举超时时长范围划分为3个子区间,分别对应三个节点优先级,具体的:节点优先级1的节点使用150-200ms的选举超时时
长范围;节点优先级2的节点使用200-250ms的选举超时时长范围;节点优先级3的节点使用250-300ms的选举超时时长范围。当然,本发明实施例中可以根据需要划分其余数目的节点优先级;也可以根据需要选择除150-300ms的节点选举超时时长范围之外的其余数值范围,这都是合理的。
[0122]
具体的,在分布式系统启动后,根据本发明实施例的节点优先级计算策略确定出所有节点的节点优先级均为初始的节点优先级2,按照预先设置的节点优先级和节点选举超时时长范围的映射关系中节点优先级2对应的一个节点选举超时时长范围,每个节点随机从中选择一个数值作为自身更新后的节点选举超时时长,即为每个节点分配最低优先级对应的随机选举超时时长。然后,按照现有raft算法,如果一个跟随者节点率先达到其随机选举超时时长,会转变为候选者节点发起选举以选出领导者节点。
[0123]
当选出第一任领导者节点后,领导者节点的领导者次数统计加一,领导者节点收到写入业务处理请求并处理完成后,其吞吐量、共识时延、成为领导者节点次数和传播时延稳定性(即跟随者节点的心跳报文时延变化)也随之增长,在这期间内,各节点实时更新自身的节点状态信息,并且各跟随者节点等待接收领导者节点发送的请求报文,在跟随者节点收到领导者节点发送的请求报文后,根据更新后的节点状态信息计算节点优先级,然后利用节点优先级更新自身的节点选举超时时长,最后重置选举定时器。当有一个跟随者节点的更新后的节点选举超时时长最先到达,也就是出现选举超时,此时,当前的领导者节点下台,出现选举超时的该跟随者节点成为候选者节点并在集群中广播投票请求触发新一轮的选举,当该候选者节点收到同意选票的数量超过分布式系统中节点总数的半数时,该候选者节点成为新的领导者节点。
[0124]
在上述过程中,各跟随者节点因其收到写入请求次数和传播时延稳定性等节点状态信息属性的差异从而具有不同的节点优先级,并据此配置有不同级别的随机选举超时时长,高优先级的节点由于为其分配了更快的随机选举超时时长而更易成为候选者节点。
[0125]
以下以第一次领导者节点选举之后,当领导者节点因故宕机,触发的一次选举过程为例说明。假设各跟随者节点更新后的节点状态信息如表1所示。
[0126]
表1各跟随者节点更新后的节点状态信息
[0127][0128]
其中,分布式系统包括5个节点s1~s5,当前领导者节点s1因故宕机转变为跟随者节点后,将其节点优先级置为最低等级3,则五个节点当前全部为跟随者节点。节点的吞吐量、节点成为领导者节点次数、跟随者节点收到写入业务请求次数、跟随者节点的心跳报文时延变化和节点的共识时延在表1中分别以tps、leadercount、requestcount、jitter和dealtime对应表示。
[0129]
表2和表3分别为本发明实施例中作为正相关因素的两项属性的属性得分关系,以
及作为负相关因素的三项属性的属性得分关系。表4为本发明实施例中的节点优先级和节点选举超时时长范围的映射关系。
[0130]
表2正相关因素的属性得分关系
[0131][0132]
表3负相关因素的属性得分关系
[0133][0134]
表4节点优先级和节点选举超时时长范围的映射关系
[0135][0136]
本发明实施例可以直接将各项属性的得分值求和,得到跟随者节点更新后的节点状态信息总分。
[0137]
其余跟随者节点s2~s5根据表1~表4,按照本发明实施例的节点优先级计算策略分别确定出各自实时的节点优先级。确定出的五个跟随者节点的节点优先级如表5所示。
[0138]
表5各跟随者节点对应的节点优先级
[0139][0140]
其中,节点优先级以priority表示。
[0141]
之后,各跟随者节点按照预先设置的节点优先级和节点选举超时时长范围的映射关系中,确定自身节点优先级对应的一个节点选举超时时长范围,随机从中选择一个数值作为自身更新后的节点选举超时时长。经过计算,跟随者节点s2的节点优先级为1,根据节点优先级和节点选举超时时长范围的映射关系,其分配的随机选举超时时长少于节点优先级为2的跟随者节点s3、s4、s5。因此跟随者节点s2最先到达选举超时并转换为候选者身份,同时发送request vote rpc报文发起投票请求,获得半数以上同意选票后转变为领导者状态。
[0142]
实际应用过程中可以根据本发明实施例的节点优先级计算策略的构思,结合场景需求设计表1~表4的具体数值以进行优先级计算,从而确定各跟随者节点更新后的节点选
举超时时长。
[0143]
可见,本发明实施例提供的优先级选举超时机制,通过在节点的节点状态信息中增加节点的吞吐量、节点成为领导者节点次数、跟随者节点收到写入业务请求次数、跟随者节点的心跳报文时延变化和节点的共识时延,实现加入多种策略的优先级影响因素来实时计算节点对应的节点优先级的目的。本发明实施例所提供的优先级的随机选举超时机制,修改了raft算法的随机选举超时机制,对不同优先级别的节点分配不同等级的随机选举超时时长,为优先级高的节点分配更短的超时时长,为优先级低的节点分配较长的超时时长,因此高等级节点因其更短的随机时长而有更大几率成为候选者节点,因而能够解决现有技术中存在的随机选举超时机制问题。同时,本发明实施例的节点优先级计算策略中既包含正相关因素又包含负相关因素,因而能够保障所有跟随者节点的节点优先级是动态变化的,从而根据动态变化的节点优先级来动态进行领导者选举,适应性和灵活性更强。可见,本发明实施例能有效避免随机超时时长引发的选票瓜分问题,因此能够提升系统的安全性、稳定性、活性、运行效率等系统性能,同时相比于现有技术还能够减小系统的通信开销。
[0144]
第二方面,相应于上述方法实施例,如图3所示,本发明实施例还提供了一种分布式系统,至少包括多个跟随者节点,其中:
[0145]
每个节点,用于在达到节点状态信息中各项属性对应的更新条件后,更新自身的节点状态信息;其中,更新后的节点状态信息含有表征节点性能和安全性的多项属性的指标值;
[0146]
每个跟随者节点,用于在预设触发条件下,根据自身更新后的节点状态信息,计算对应的节点优先级;根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,以使得分布式系统中有跟随者节点在其更新后的节点选举超时时长到达时,启动领导者节点选举流程;其中,节点优先级和节点选举超时时长范围的映射关系中,节点优先级越高,对应的节点选举超时时长范围中节点选举超时时长越短。
[0147]
图3中以虚线框示意领导者节点和其与各跟随者节点的通信关系,表示该分布式系统中领导者节点不一定必要存在。
[0148]
可选的,更新后的节点状态信息,包括:
[0149]
节点的吞吐量、节点成为领导者节点次数、跟随者节点收到写入业务请求次数、跟随者节点的心跳报文时延变化和节点的共识时延。
[0150]
可选的,跟随者节点的心跳报文时延变化的确定过程包括:
[0151]
针对任一跟随者节点,该跟随者节点计算当前次获得的与领导者节点间的心跳报文时延,与上一次获得的与领导者节点间的心跳报文时延之间的差值,得到该跟随者节点的心跳报文时延变化。
[0152]
可选的,节点状态信息中各项属性对应的更新条件,包括:
[0153]
针对节点的吞吐量,对应的更新条件为领导者节点完成写入操作;
[0154]
针对节点成为领导者节点次数,对应的更新条件为节点身份转变为领导者节点;
[0155]
针对跟随者节点收到写入业务请求次数,对应的更新条件为跟随者节点收到写入业务请求;
[0156]
针对跟随者节点的心跳报文时延变化,对应的更新条件为跟随者节点收到来自领
导者节点的心跳报文;
[0157]
针对节点的共识时延,对应的更新条件为领导者节点完成写入操作。
[0158]
可选的,针对分布式系统的第一次领导者选举,预设触发条件为分布式系统的启动;针对分布式系统在第一次之后的各次领导者选举,预设触发条件为跟随者节点接收到当前次中领导者节点发送的请求报文。
[0159]
可选的,每个跟随者节点在根据自身更新后的节点状态信息,计算对应的节点优先级时,具体用于:
[0160]
在分布式系统预先设置的属性得分关系中,确定该跟随者节点的更新后的节点状态信息中各项属性的得分值;其中,属性得分关系含有更新后的节点状态信息中各项属性在不同数值范围下对应的得分值;
[0161]
基于各项属性的得分值的求和,得到该跟随者节点更新后的节点状态信息总分;
[0162]
利用该跟随者节点更新后的节点状态信息总分,在分布式系统预先设置的节点优先级划分关系中,确定该跟随者节点的节点优先级;其中,节点优先级划分关系含有更新后的节点状态信息总分在不同数值范围下对应的节点优先级。
[0163]
可选的,每个跟随者节点在根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长时,具体用于:
[0164]
根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,确定自身更新后的节点选举超时时长范围;
[0165]
在自身更新后的节点选举超时时长范围内,随机确定一个数值,作为自身更新后的节点选举超时时长。
[0166]
可选的,若分布式系统中有领导者节点,当分布式系统中有跟随者节点在其更新后的节点选举超时时长到达时,领导者节点还用于,下台转变为跟随者节点,转变后的跟随者节点根据之前确定的更新后的节点状态信息,计算对应的节点优先级并更新自身的节点选举超时时长,以参与领导者节点选举流程。
[0167]
具体内容请参见第一方面所描述的内容,在此不做赘述。
[0168]
本发明实施例提供的分布式系统,通过为节点添加并计算出更多的节点状态信息,根据节点状态信息为所有跟随者节点划分不同的优先级,通过设置映射关系中节点优先级越高对应的节点选举超时时长范围中节点选举超时时长越短,使得优先级更高的跟随者节点在选举过程中能够更快到达超时状态以重新启动领导者节点选举流程,同时也能有效避免随机超时时长引发的选票瓜分问题,因此能够提升系统的安全性、稳定性、活性、运行效率等系统性能,同时相比于现有技术还能够减小系统的通信开销。
[0169]
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。此外,本领域的技术人员可以将本说明书中描述的不同实施例或示例进行接合和组合。本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以
描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0170]
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
技术特征:1.一种基于优先级的共识方法,其特征在于,应用于分布式系统中,所述方法包括:每个节点在达到节点状态信息中各项属性对应的更新条件后,更新自身的节点状态信息;其中,更新后的节点状态信息含有表征节点性能和安全性的多项属性的指标值;在预设触发条件下,每个跟随者节点根据自身更新后的节点状态信息,计算对应的节点优先级;每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,以使得所述分布式系统中有跟随者节点在其更新后的节点选举超时时长到达时,启动领导者节点选举流程;其中,所述节点优先级和节点选举超时时长范围的映射关系中,节点优先级越高,对应的节点选举超时时长范围中节点选举超时时长越短。2.根据权利要求1所述的基于优先级的共识方法,其特征在于,所述更新后的节点状态信息,包括:节点的吞吐量、节点成为领导者节点次数、跟随者节点收到写入业务请求次数、跟随者节点的心跳报文时延变化和节点的共识时延。3.根据权利要求2所述的基于优先级的共识方法,其特征在于,所述跟随者节点的心跳报文时延变化的确定过程包括:针对任一跟随者节点,该跟随者节点计算当前次获得的与领导者节点间的心跳报文时延,与上一次获得的与领导者节点间的心跳报文时延之间的差值,得到该跟随者节点的心跳报文时延变化。4.根据权利要求2所述的基于优先级的共识方法,其特征在于,所述节点状态信息中各项属性对应的更新条件,包括:针对所述节点的吞吐量,对应的更新条件为领导者节点完成写入操作;针对所述节点成为领导者节点次数,对应的更新条件为节点身份转变为领导者节点;针对所述跟随者节点收到写入业务请求次数,对应的更新条件为跟随者节点收到写入业务请求;针对所述跟随者节点的心跳报文时延变化,对应的更新条件为跟随者节点收到来自领导者节点的心跳报文;针对所述节点的共识时延,对应的更新条件为领导者节点完成写入操作。5.根据权利要求1所述的基于优先级的共识方法,其特征在于,针对所述分布式系统的第一次领导者选举,所述预设触发条件为所述分布式系统的启动;针对所述分布式系统在第一次之后的各次领导者选举,所述预设触发条件为跟随者节点接收到当前次中领导者节点发送的请求报文。6.根据权利要求2所述的基于优先级的共识方法,其特征在于,所述每个跟随者节点根据自身更新后的节点状态信息,计算对应的节点优先级,包括:针对每个跟随者节点,该跟随者节点在所述分布式系统预先设置的属性得分关系中,确定该跟随者节点的更新后的节点状态信息中各项属性的得分值;其中,所述属性得分关系含有更新后的节点状态信息中各项属性在不同数值范围下对应的得分值;基于所述各项属性的得分值的求和,得到该跟随者节点更新后的节点状态信息总分;利用该跟随者节点更新后的节点状态信息总分,在所述分布式系统预先设置的节点优
先级划分关系中,确定该跟随者节点的节点优先级;其中,所述节点优先级划分关系含有更新后的节点状态信息总分在不同数值范围下对应的节点优先级。7.根据权利要求1或6所述的基于优先级的共识方法,其特征在于,所述每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,包括:每个跟随者节点根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,确定自身更新后的节点选举超时时长范围;每个跟随者节点在所述自身更新后的节点选举超时时长范围内,随机确定一个数值,作为自身更新后的节点选举超时时长。8.根据权利要求1所述的基于优先级的共识方法,其特征在于,若所述分布式系统中有领导者节点,当所述分布式系统中有跟随者节点在其更新后的节点选举超时时长到达时,所述方法还包括:领导者节点下台转变为跟随者节点,转变后的跟随者节点根据之前确定的更新后的节点状态信息,计算对应的节点优先级并更新自身的节点选举超时时长,以参与领导者节点选举流程。9.一种分布式系统,其特征在于,至少包括多个跟随者节点,其中:每个节点,用于在达到节点状态信息中各项属性对应的更新条件后,更新自身的节点状态信息;其中,更新后的节点状态信息含有表征节点性能和安全性的多项属性的指标值;每个跟随者节点,用于在预设触发条件下,根据自身更新后的节点状态信息,计算对应的节点优先级;根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,以使得所述分布式系统中有跟随者节点在其更新后的节点选举超时时长到达时,启动领导者节点选举流程;其中,所述节点优先级和节点选举超时时长范围的映射关系中,节点优先级越高,对应的节点选举超时时长范围中节点选举超时时长越短。10.根据权利要求9所述的分布式系统,其特征在于,所述更新后的节点状态信息,包括:节点的吞吐量、节点成为领导者节点次数、跟随者节点收到写入业务请求次数、跟随者节点的心跳报文时延变化和节点的共识时延。
技术总结本发明公开了一种基于优先级的共识方法和分布式系统,方法包括:每个节点在达到节点状态信息中各项属性对应的更新条件后,更新自身的节点状态信息;在预设触发条件下,每个跟随者节点根据自身更新后的节点状态信息计算对应的节点优先级;根据对应的节点优先级与预先设置的节点优先级和节点选举超时时长范围的映射关系,更新自身的节点选举超时时长,以使得分布式系统中有跟随者节点在其更新后的节点选举超时时长到达时,启动领导者节点选举流程;映射关系中,节点优先级越高对应的节点选举超时时长范围中节点选举超时时长越短。本发明能够提升系统的安全性、稳定性、活性、运行效率,并减小分布式系统的通信开销。并减小分布式系统的通信开销。并减小分布式系统的通信开销。
技术研发人员:杜志强 屈直 傅妍芳 黄牧鸿 马益帆 张嘉恒
受保护的技术使用者:西安工业大学
技术研发日:2022.05.20
技术公布日:2022/11/1