Raft共鸣算法是一种漫衍式一致性算法,它的设计方针是易于领略和实现。它办理了在存在妨碍的环境下,如何让多个处事器告竣对共享状态的一致意见的问题。共享状态凡是是一个由复制日志支持的数据布局。
Raft共鸣算法最早由Diego Ongaro和John Ousterhout(斯坦福大学)在2014年提出,并得到了Diego的博士学位。Raft是作为Paxos算法家属的一个替代方案而设计的,因为Paxos算法由Lesli Lamport在1998年提出,固然被认为是漫衍式一致性问题的尺度办理方案,可是它很是难以领略和实现。因此,Diego的论文的标题是《寻找一个易于领略的一致性算法》。
Raft算法通过一个选举率领者的方法来实现一致性。一个Raft集群中的处事器要么是率领者,要么是跟从者,要么是候选者(在选举进程中)。率领者认真将日志复制到跟从者。它按期向跟从者发送心跳动静,以表白本身的存在。每个跟从者都有一个超时时间(凡是在150到300毫秒之间),在这个时间内它期望收到率领者的心跳。假如收到心跳,超时时间就会重置。假如没有收到心跳,跟从者就会酿成候选者,并开始一次率领者选举。
Raft算法将一致性问题解析为两个相对独立的子问题,别离是:
率领者选举
当现有的率领者失败可能当算法初始化时,需要选举一个新的率领者。在这种环境下,集群中会开始一个新的任期。一个任期是指处事器上需要选举新率领者的一个任意时间段。每个任期都以一个率领者选举开始。假如选举乐成(即选出了独一的率领者),那么任期就会继承举办,由新率领者协调正常的操纵。假如选举失败,那么就会开始一个新的任期,以及一个新的选举。一个率领者选举是由一个候选者处事器提倡的。一个处事器会在没有收到率领者的通信高出一个叫做选举超时的时间段后酿成候选者,因此它认为没有有效的率领者了。它开始选举时,会增加任期计数器,为本身投票,并向所有其他处事器发送请求投票的动静。一个处事器每个任期只会投票一次,凭据先到先得的原则。假如一个候选者收到了其他处事器发送的任期号比候选者当前任期号大的动静,那么候选者就认输,并酿成跟从者,并认可该动静发送方为正当率领者。
日志复制
当有了一个不变的率领者后,它就会开始吸收客户端发来的呼吁,并将它们作为新的日志条目追加到本身的日志中。然后,它会尽大概快地将这些日志条目复制到所有其他处事器上,并确保所有处事器上的日志保持一致。当率领者收到了大大都处事器对某个日志条目复制乐成的回覆后,它就会将该日志条方针志为已提交,并将其应用到本身的状态机中。然后,,它会通知所有其他处事器也将该日志条目应用到本身的状态机中。这样,所有处事器上的状态机就会执行沟通的呼吁序列,从而告竣一致的状态。
Raft算法在计较机科学中具有重要的意义,因为它展示了如安在漫衍式系统中实现一个靠得住的复制状态机,纵然在面对妨碍和网络分区的环境下也能担保系统的正确性和可用性。Raft算法在漫衍式数据库、漫衍式锁、漫衍式行列等规模都有着遍及的应用。Raft算法也有很多开源的实现,譬喻Go, C++, Java, Scala等语言。
总之,Raft共鸣算法是一个易于领略和实现的漫衍式一致性算法,它通过一个选举率领者的方法来办理在存在妨碍的环境下,如何让多个处事器告竣对共享状态的一致意见的问题。Raft共鸣算法在计较机科学和漫衍式系统中都有着重要的应用和影响,它是一个值得深入进修和摸索的算法。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。