文章目录
1. Raft基本介绍
没有比官方更好的基本介绍:
Raft 是一种用来管理日志复制的一致性算法。它和 Paxos 的性能和功能是一样的,但是它和 Paxos 的结构不一样;这使得 Raft 更容易理解并且更易于建立实际的系统。为了提高理解性,Raft 将一致性算法分为了几个部分,例如领导选取(leader selection),日志复制(log replication)和安全性(safety),同时它使用了更强的一致性来减少了必须需要考虑的状态。从用户学习的结果来看,Raft 比 Paxos 更容易学会。Raft 还包括了一种新的机制来使得动态改变集群成员,它使用重叠大多数(overlapping majorities)来保证安全。
2. 金装四大才子跟你解释Raft
正片开始~
下面将基于唐朝四大才子来跟各位大佬解释解释Raft怎么做到分布式一致性。
以下内容,不涉及家庭暴力,不需要家长陪同观看,内容纯属虚构,如有雷同,不是巧合,若非转载,告上名来。
2.1 前情提要
2.1.1 角色介绍
唐伯虎:生性不羁,倜傥风流,不受世俗束缚,品性纯良,孝顺、重义气,为朋友两胁插刀、赴汤蹈火。率性而为,爱好玩乐,各种玩意无一不精。天才横溢,才高八斗,除诗、书、画外,更涉猎天文、历法、音乐、数学;聪明绝顶,足智多谋,与敌对者周旋,每能巧施妙计,化险为夷,反败为胜。
祝枝山:近视眼,但最忌人嘲笑。绰号“洞里赤炼蛇”,足智多谋,有仇必报。说话刻薄,一语中的,善长对诗,才思敏捷,打遍江南无敌手。贪财好食,矢志发达,热衷各项赚钱之道。虽贪财但有原则,重友情,讲道义,贫贱不能移。一世精明却错在情深,为所爱而盲目付出一切,典型的痴心情长汉。
文征明:憨直孝顺,热血冲动,忠义为先,为兄弟可两胁插刀。名臣之后,誓要秉承祖先遗志,考取功名,报效国家,随尉准备为国捐驱。精书法,刻苦好学,谨守非礼勿言,非礼勿动圣贤之训。实则对爱情充满憧景,时常心思思。
周文斌:天资聪敏,博学多才,冷傲孤僻,恃才傲物,好高骛远,不甘平凡,有仇必报,有野心,欲建功立业,坚毅不屈,为达目标,可牺牲一切。
2.1.2 剧情背景
唐伯虎、祝枝山、文征明、周文斌四人才华横溢+n个表达很牛逼意思的四字词,列为江南四大才子,一同受学于六艺书院,闻名于江南一带。
2.2 开片
2.2.1 密谋逃课大计
2.2.2 唐伯虎点秋香
于是乎一切就怎么顺利的走下去,直到秋香的出现。
本来今日抽选上课记笔记的是唐伯虎,然而上课期间,只因秋香一颦一笑,伯虎决定临时追上秋香,要向秋香求亲。
2.2.3 到底谁记笔记?
正如文斌所言,3个人每天抽一位记笔记,每天同步功课后,才进行第二天上课,但是万一有1个人出状况了,另外两个人就没办法说功课哪个对哪个错,这个大计进行不下去了。
各位看官怎么看?
工具人的答案是: 一开始就应该组团5人逃课组才行啊!5个人起码2个出状况,剩下3个还能同步功课。
所谓孔曰成仁,孟曰取义,一开始就不应该逃课
2.3 逃课大计解析
逃课大计的事实主要分成以下阶段:
-
每日抽选一个人去上课记笔记
-
在下一次上课之前,先比对功课
-
记笔记的缺席,重新抽选
其实上面的逃课大计跟Raft的一致性原理是相似的。
逃课大计的最终目的就是唐伯虎、祝枝山以及陈文斌3人的功课最终能达成一致,没有落后也没有超前,而Raft算法本身解决分布式一致性问题,这一点毋庸置疑。
raft 算法包含三种角色,分别是:跟随者( follower ),候选人(candidate )和领导者( leader )。集群中的一个节点在某一时刻只能是这三种状态的其中一种,这三种角色是可以随着时间和条件的变化而互相转换的。
用逃课小剧场来说就是:
在上课期间,记笔记的人就是领导者leader,其余人就是跟随者follower。
在课间或者缺席未产生新的记笔记的人选的时候,全部人都是候选人。
raft 算法主要有两个过程:一个过程是领导者选举,另一个过程是日志复制,其中日志复制过程会分记录日志和提交数据两个阶段。raft 算法支持最大的容错故障节点是(N-1)/2,其中 N 为 集群中总的节点数量。
领导者选举就相当于伯虎他们3个每日选一个人去记笔记这个过程
日志复制就相当于每天下课抄笔记,写功课。
当然剧场只是为了引导大家,让大家对Raft的有个稍微印象深刻的理解,但是在算法细节上面还未能完全体现。
3. 官方论文解释
Raft是一个一致性算法,一致性算法是在复制状态机的背景下提出来的。在这个方法中,在一组服务器的状态机产生同样的状态的副本因此即使有一些服务器崩溃了这组服务器也还能继续执行。复制状态机在分布式系统中被用于解决许多有关容错的问题。例如,GFS,HDFS 还有 RAMCloud 这些大规模的系统都是用一个单独的集群领导者,使用一个单独的复制状态机来进行领导选取和存储配置信息来应对领导者的崩溃。使用复制状态机的例子有 Chubby 和 ZooKeeper。
3.1 复制状态机原理
图 -1:复制状态机的架构。一致性算法管理来自客户端状态命令的复制日志。状态机处理的日志中的命令的顺序都是一致的,因此会得到相同的执行结果。
如图 -1 所示,复制状态机是通过复制日志来实现的。每一台服务器保存着一份日志,日志中包含一系列的命令,状态机会按顺序执行这些命令。因为每一台计算机的状态机都是确定的,所以每个状态机的状态都是相同的,执行的命令是相同的,最后的执行结果也就是一样的了。
如何保证复制日志一致就是一致性算法的工作了。在一台服务器上,一致性模块接受客户端的命令并且把命令加入到它的日志中。它和其他服务器上的一致性模块进行通信来确保每一个日志最终包含相同序列的请求,即使有一些服务器宕机了。一旦这些命令被正确的复制了,每一个服务器的状态机都会按同样的顺序去执行它们,然后将结果返回给客户端。最终,这些服务器看起来就像一台可靠的状态机。
4. 推荐阅读
好多人都看过的raft动画
http://thesecretlivesofdata.com/raft/
官方论文
https://github.com/maemual/raft-zh_cn/blob/master/raft-zh_cn.md