Raft 是用来管理复制日志(replicated log)的共识算法。(共识,即consenus,关于consistency和consensus的争论可以参考《Paxos、Raft不是一致性算法/协议?》。)Raft 跟 multi-Paxos 作用相同,效率也相当,但是它的组织结构跟 Paxos 不同,Raft 也比 Paxos 更容易理解并且更容易在工程实践中实现。为了使 Raft 协议更易懂,Raft 将一致性的关键元素分开,如 leader 选举、日志复制和安全性,并且它实施更强的一致性以减少必须考虑的状态的数量。用户研究的结果表明,Raft 比 Paxos 更容易学习。Raft 还包括一个用于变更集群成员的新机制,它使用重叠的大多数(overlapping majorities)来保证安全性。
你第一次接触Raft的时候,有没有打开字典查一下 Raft 是什么意思?会不会好奇会类似于Zookeeper、Apollo、Janus、Kafka、Hadoop之类的命名?Raft直译成中文就是“木筏”的意思。有网友起初是这样将“木筏”和“共识算法”关联起来的:
I'd been thinking that a raft is something that allows its different components to achieve buoyancy together and survive collectively. But that would apply to any consensus algorithm.
简单解释一下:木筏是一种让它的各个组成部分共同获得浮力、共同生存的东西,共识是让它的所有节点达成共识,牵强附会一下好像有那么点意思哦。比如,当初 RabbitMQ 的取名就是因为它的作者觉得它像 Rabbit 一样迅速。
真实情况是不是这样呢?
在网络上有这么一个帖子 —— Why the "Raft" name? (https://groups.google.com/forum/#!topic/raft-dev/95rZqptGpmU)
Raft算法(In Search of an Understandable Consensus Algorithm)的第一作者Diego Ongaro对此做了相关的回答:
大致意思如下:
大家都问我为什么称它为Raft,其实迄今为止,我还没有公开过相关的信息。今天,我借着这个帖子诉说一下,以后谁要问到我我就可以把这个帖子的链接甩给他~
我们想出 Raft 这个名字有以下几个原因:
- 它不是一个缩写单词,但是当时我们也考虑了与 reliable,replicated,redundant 以及 fault-tolerant这些词的关联性。
- 我们当时考虑了日志(logs),以及使用它们可以构建什么。
- 我们当时还考虑了 "the island of Paxos"以及如何逃离它。(注:Leslie Lamport在Paxos的最初论文《The Part-Time Parliament》中提到了the island of Paxos问题,另一篇简化论文《Paxos Made Simple》是Leslie Lamport后来写的)
另外,在2012年9月我们想出 Raft 这个名字之前,我们在论文中使用了随机生成的名字 Cheesomi。那个时候,这个名字在我们提交的论文中出现了100多次,所以改用更短的名字实际上帮助论文缩小了不少。
我们很难想出一个好名字,所以我们在一次RAMCloud会议上把它作为一个明确的议程项目。我发现了两张照片的白板在会议期间/之后,我附上在这里(就是下面的两幅图)。
皮皮注:第一张图上,写了好多名字,分成“Not too bad”、“Pretty good”和“Love it”进行投票。Raft这个名字获得了2个 “Not too bad”,1个“Love it”;Knox这个名字获得了3.5个“Not too bad”以及0.5个“Pretty good”;Redundo获得了2个 “Not too bad”和2个“Pretty good”;Cloudsense获得了3个“Pretty good”。从图上还能看到其它的名字,比如craft、crap等。
看起来最大的竞争者是Raft、Knox(我猜是在Fort Knox)、Redundo和Cloudsense(没有线索)。我不记得我们是如何得到Raft的,因为它显然没有赢得投票,但我记得这个名字很快就流行起来了。人们似乎马上就喜欢上了它。我真他妈高兴(I'm so f**king glad...)它不叫Redundo。
总结一下,按照Diego Ongaro大佬的说法,Raft原本使用了随机生成的名字 Cheesomi,后来觉得这个名字不好,还在一个会上专门探讨了命名问题。会上想了很多个名字,还专门进行了投票,但是Raft其实并没有获选,但是由于后来莫名其妙地迅速fasion了起来就用了这个(就好像某些综艺选秀一样,冠军没火,下面几个火的不行)。
仔细看下Diego Ongaro大佬的第一张图,在raft旁边有个括号,里面写了(Reliable, Replicated, Redundant, And Fault-Tolerant),暗示着Raft其实就是 Re{liable|plicated|dundant} And Fault-Tolerant 的缩写。在Wikipedia中也有类似的说明:It is named after Reliable, Replicated, Redundant, And Fault-Tolerant.
今天的知识点,你Get了嘛?
想知道更多?扫描下面的二维码关注我