商城网站设计教程,上海专门做培训的网站,wordpress 样式丢失,推广网站怎样做转载自 分布式系统的Raft算法
过去, Paxos一直是分布式协议的标准#xff0c;但是Paxos难于理解#xff0c;更难以实现#xff0c;Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑。 来自Stanford的新的分布式协议研究称为Raft#xff0c;它是一个为真实世界应…转载自 分布式系统的Raft算法
过去, Paxos一直是分布式协议的标准但是Paxos难于理解更难以实现Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑。 来自Stanford的新的分布式协议研究称为Raft它是一个为真实世界应用建立的协议主要注重协议的落地性和可理解性。 在了解Raft之前我们先了解Consensus一致性这个概念它是指多个服务器在状态达成一致但是在一个分布式系统中因为各种意外可能有的服务器可能会崩溃或变得不可靠它就不能和其他服务器达成一致状态。这样就需要一种Consensus协议一致性协议是为了确保容错性也就是即使系统中有一两个服务器当机也不会影响其处理过程。 为了以容错方式达成一致我们不可能要求所有服务器100%都达成一致状态只要超过半数的大多数服务器达成一致就可以了假设有N台服务器N/2 1 就超过半数代表大多数了。 Paxos和Raft都是为了实现Consensus一致性这个目标这个过程如同选举一样参选者需要说服大多数选民(服务器)投票给他一旦选定后就跟随其操作。Paxos和Raft的区别在于选举的具体过程不同。 在Raft中任何时候一个服务器可以扮演下面角色之一
Leader: 处理所有客户端交互日志复制等一般一次只有一个Leader.Follower: 类似选民完全被动Candidate候选人: 类似Proposer律师可以被选为一个新的领导人。
Raft阶段分为两个首先是选举过程然后在选举出来的领导人带领进行正常操作比如日志复制等。下面用图示展示这个过程
1. 任何一个服务器都可以成为一个候选者Candidate它向其他服务器Follower发出要求选举自己的请求 2. 其他服务器同意了发出OK。 注意如果在这个过程中有一个Follower当机没有收到请求选举的要求因此候选者可以自己选自己只要达到N/2 1 的大多数票候选人还是可以成为Leader的。
3. 这样这个候选者就成为了Leader领导人它可以向选民也就是Follower们发出指令比如进行日志复制。 4. 以后通过心跳进行日志复制的通知 5. 如果一旦这个Leader当机崩溃了那么Follower中有一个成为候选者发出邀票选举。 6. Follower同意后其成为Leader继续承担日志复制等指导工作 值得注意的是整个选举过程是有一个时间限制的如下图 Splite Vote是因为如果同时有两个候选人向大家邀票这时通过类似加时赛来解决两个候选者在一段timeout比如300ms互相不服气的等待以后因为双方得到的票数是一样的一半对一半那么在300ms以后再由这两个候选者发出邀票这时同时的概率大大降低那么首先发出邀票的的候选者得到了大多数同意成为领导者Leader而另外一个候选者后来发出邀票时那些Follower选民已经投票给第一个候选者不能再投票给它它就成为落选者了最后这个落选者也成为普通Follower一员了。 日志复制 下面以日志复制为例子说明Raft算法假设Leader领导人已经选出这时客户端发出增加一个日志的要求比如日志是sally 2. Leader要求Followe遵从他的指令都将这个新的日志内容追加到他们各自日志中 3.大多数follower服务器将日志写入磁盘文件后确认追加成功发出Commited Ok: 4. 在下一个心跳heartbeat中Leader会通知所有Follwer更新commited 项目。
对于每个新的日志记录重复上述过程。
如果在这一过程中发生了网络分区或者网络通信故障使得Leader不能访问大多数Follwers了那么Leader只能正常更新它能访问的那些Follower服务器而大多数的服务器Follower因为没有了Leader他们重新选举一个候选者作为Leader然后这个Leader作为代表于外界打交道如果外界要求其添加新的日志这个新的Leader就按上述步骤通知大多数Followers如果这时网络故障修复了那么原先的Leader就变成Follower在失联阶段这个老Leader的任何更新都不能算commit都回滚接受新的Leader的新的更新。
总结目前几乎所有语言都已经有支持Raft算法的库包具体可参考raftconsensus.github.io