012 - 一致性算法 - Raft

2018-10-10  本文已影响0人  Venture_Mark

Raft 状态

一个 Raft 集群包含若干个服务器节点;通常是 5 个,这允许整个系统容忍 2 个节点的失效,每个节点处于以下三种状态之一:

Raft 一致性算法

Raft通过选出一个leader来简化日志副本的管理,例如,日志项(log entry)只允许从leader流向follower。

基于leader的方法,Raft算法可以分解成三个子问题:

Leader election (领导选举):原来的leader挂掉后,必须选出一个新的leader

Log replication (日志复制):leader从客户端接收日志,并复制到整个集群中

Safety (安全性):如果有任意的server将日志项回放到状态机中了,那么其他的server只会回放相同的日志项

Leader election (领导选举)

Raft 使用一种心跳机制来触发领导人选举。当服务器程序启动时,他们都是 follower(跟随者) 身份。如果一个跟随者在一段时间里没有接收到任何消息,也就是选举超时,然后他就会认为系统中没有可用的领导者然后开始进行选举以选出新的领导者。要开始一次选举过程,follower 会给当前term加1并且转换成candidate状态。

然后他会并行的向集群中的其他服务器节点发送请求投票的 RPCs 来给自己投票。候选人的状态维持直到发生以下任何一个条件发生的时候,

Log replication (日志复制)

当选出 leader 后,它会开始接受客户端请求,每个请求会带有一个指令,可以被回放到状态机中。leader 把指令追加成一个log entry,然后通过AppendEntries RPC并行的发送给其他的server,当改entry被多数派server复制后,leader 会把该entry回放到状态机中,然后把结果返回给客户端。

follower 宕机或者运行较慢时,leader 会无限地重发AppendEntries给这些follower,直到所有的follower都复制了该log entry。

raft的log replication保证以下性质(Log Matching Property):

其中特性一通过以下保证:

特性二通过以下保证:

如果follower没有发现与它一样的log entry,那么它会拒绝接受新的log entry 这样就能保证特性二得以满足。

动画演示 Raft

http://thesecretlivesofdata.com/raft/

版权声明:博客中的文章版权归博主所有,未经授权,禁止转载,转载请注明出处,合作请联系:liyc1215(微信)

</article>

[打赏一个呗](javascript:void(0) "打赏,支持一下")

<footer style="margin: 0px; padding: 0px; border: 0px; font: inherit; vertical-align: baseline; display: block;">

<nav class="cover-navigation navigation--social" style="margin: 0px; padding: 0px; border: 0px; font: inherit; vertical-align: baseline; display: inline-block; position: relative; width: 790.75px;">

</nav>

友情链接
区块链技术视频网站 以太坊官网 Solidity Truffle FrameWork Embark FrameWork
IBM开源技术微讲堂 Bitcoin.com bitshares1-core ipfs官网 ipfs中文网

Copyright © 2018 黎跃春区块链博客 京ICP备15065741号. 区块链部落QQ群:263270946

本站总访问量 次

</footer>

上一篇 下一篇

猜你喜欢

热点阅读