文章插图
一开始有 5 个节点处于同一网络状态下 。
文章插图
Network Partition 将节点分成两边,一边有两个节点,一边三个节点 。
文章插图
两个节点这边已经有 Leader 了,来自客户端的数据 “bob” 通过 Leader 同步到 Follower 。
文章插图
因为只有两个节点,少于3个节点,所以 “bob” 的状态仍是 Uncommitted 。所以在这里,服务器会返回错误给客户端
文章插图
另外一个 Partition 有三个节点,进行重新选主 。客户端数据 “tom” 发到新的 Leader,通过和上节网络状态下相似的过程,同步到另外两个 Follower 。
文章插图
文章插图
文章插图
因为这个 Partition 有3个节点,超过半数,所以数据 “tom” 都 Commit 了 。
文章插图
网络状态恢复,5个节点再次处于同一个网络状态下 。但是这里出现了数据冲突 “bob" 和 “tom"
文章插图
三个节点的 Leader 广播 AppendEntries
文章插图
两个节点 Partition 的 Leader 自动降级为 Follower,因为这个 Partition 的数据 “bob” 没有 Commit,返回给客户端的是错误,客户端知道请求没有成功,所以 Follower 在收到 AppendEntries 请求时,可以把 “bob“ 删除,然后同步 ”tom”,通过这么一个过程,就完成了在 Network Partition 情况下的复制日志,保证了数据的一致性 。
文章插图
小总结Raft 是能够实现分布式系统强一致性的算法,每个系统节点有三种状态 Follower,Candidate,Leader 。实现 Raft 算法两个最重要的事是:选主和复制日志
参考链接:
Raft 官网:https://raft.github.io/
Raft 原理动画 (推荐看看):http://thesecretlivesofdata.com/raft/
Raft 算法解析图片来源:http://www.infoq.com/cn/articles/coreos-analyse-etcd
专注于技术热点大数据,人工智能,JAVA、Python、 C 、GO、JavaScript等语言最新前言技术,及业务痛点问题分析,请关注【编程我最懂】共同交流学习 。
推荐阅读
- 数据科学家需要知道的5种图算法
- 算法浅谈——人人皆知却很多人写不对的二分法
- 负载均衡的5种算法,你了解几种?
- 中国茶叶行业T20峰会达成十点共识
- 谷歌近期排名不稳定,算法更新正在发生
- 分布式寻址算法
- 计算机基本原理—语言与算法
- 清晰明了的JavaScript版动态规划
- 愿茶为国饮成为国民共识讲座周日开讲
- 算法专题-手动实现循环队列