Raft当初为什么会被命名为Raft?

Raft当初为什么会被命名为Raft?

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了嘛?


欢迎支持笔者的作品《深入理解Kafka: 核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客(ID: hiddenkafka)。
本文作者: 朱小厮

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×