Raft当初为什么会被命名为Raft?
點擊上方“朱小廝的博客”,選擇“設(shè)為星標(biāo)”
后臺回復(fù)”加群“獲取公眾號專屬群聊入口
歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/architect/why-is-raft-called-raft/
Raft 是用來管理復(fù)制日志(replicated log)的共識算法。(共識,即consenus,關(guān)于consistency和consensus的爭論可以參考《Paxos、Raft不是一致性算法/協(xié)議?》。)Raft 跟 multi-Paxos 作用相同,效率也相當(dāng),但是它的組織結(jié)構(gòu)跟 Paxos 不同,Raft 也比 Paxos 更容易理解并且更容易在工程實踐中實現(xiàn)。為了使 Raft 協(xié)議更易懂,Raft 將一致性的關(guān)鍵元素分開,如 leader 選舉、日志復(fù)制和安全性,并且它實施更強的一致性以減少必須考慮的狀態(tài)的數(shù)量。用戶研究的結(jié)果表明,Raft 比 Paxos 更容易學(xué)習(xí)。Raft 還包括一個用于變更集群成員的新機制,它使用重疊的大多數(shù)(overlapping majorities)來保證安全性。
你第一次接觸Raft的時候,有沒有打開字典查一下 Raft 是什么意思?會不會好奇會類似于Zookeeper、Apollo、Janus、Kafka、Hadoop之類的命名?Raft直譯成中文就是“木筏”的意思。有網(wǎng)友起初是這樣將“木筏”和“共識算法”關(guān)聯(lián)起來的:
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.
簡單解釋一下:木筏是一種讓它的各個組成部分共同獲得浮力、共同生存的東西,共識是讓它的所有節(jié)點達(dá)成共識,牽強附會一下好像有那么點意思哦。比如,當(dāng)初 RabbitMQ 的取名就是因為它的作者覺得它像 Rabbit 一樣迅速。
真實情況是不是這樣呢?
在網(wǎng)絡(luò)上有這么一個帖子 —— Why the "Raft" name? (https://groups.google.com/forum/#!topic/raft-dev/95rZqptGpmU)
Raft算法(In Search of an Understandable Consensus Algorithm)的第一作者Diego Ongaro對此做了相關(guān)的回答:
大致意思如下:
大家都問我為什么稱它為Raft,其實迄今為止,我還沒有公開過相關(guān)的信息。今天,我借著這個帖子訴說一下,以后誰要問到我我就可以把這個帖子的鏈接甩給他~
我們想出 Raft 這個名字有以下幾個原因:
-
它不是一個縮寫單詞,但是當(dāng)時我們也考慮了與 reliable,replicated,redundant 以及 fault-tolerant這些詞的關(guān)聯(lián)性。
-
我們當(dāng)時考慮了日志(logs),以及使用它們可以構(gòu)建什么。
-
我們當(dāng)時還考慮了 "the island of Paxos"以及如何逃離它。(注:Leslie Lamport在Paxos的最初論文《The Part-Time Parliament》中提到了the island of Paxos問題,另一篇簡化論文《Paxos Made Simple》是Leslie Lamport后來寫的)
另外,在2012年9月我們想出 Raft 這個名字之前,我們在論文中使用了隨機生成的名字 Cheesomi。那個時候,這個名字在我們提交的論文中出現(xiàn)了100多次,所以改用更短的名字實際上幫助論文縮小了不少。
我們很難想出一個好名字,所以我們在一次RAMCloud會議上把它作為一個明確的議程項目。我發(fā)現(xiàn)了兩張照片的白板在會議期間/之后,我附上在這里(就是下面的兩幅圖)。
皮皮注:第一張圖上,寫了好多名字,分成“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。
總結(jié)一下,按照Diego Ongaro大佬的說法,Raft原本使用了隨機生成的名字 Cheesomi,后來覺得這個名字不好,還在一個會上專門探討了命名問題。會上想了很多個名字,還專門進行了投票,但是Raft其實并沒有獲選,但是由于后來莫名其妙地迅速fasion了起來就用了這個(就好像某些綜藝選秀一樣,冠軍沒火,下面幾個火的不行)。
仔細(xì)看下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了嘛?
歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/architect/why-is-raft-called-raft/
想知道更多?掃描下面的二維碼關(guān)注我
后臺回復(fù)”加群“獲取公眾號專屬群聊入口
【精彩推薦】
-
咱們從頭到尾說一次Java垃圾回收
-
Netty、Kafka中的零拷貝技術(shù)到底有多牛?
-
go為什么這么快?
-
面試前,我們要復(fù)習(xí)多少Redis知識?
-
《深入理解Java虛擬機》第2版挖的坑終于在第3版中被R大填平了
-
Redis性能問題分析
-
淺談CAP和Paxos共識算法
-
聊一聊Java中的文件鎖
-
Kafka為什么這么快?
-
Paxos、Raft不是一致性算法嘛?
-
聊聊Java的幾把JVM級鎖
-
越說越迷糊的CAP
-
大公司為什么都有API網(wǎng)關(guān)?沒你想的這么簡單!
>>>?字節(jié)跳動社招內(nèi)推入口?<<<
>>> 字節(jié)跳動校招內(nèi)推入口 <<<
朕已閱?
總結(jié)
以上是生活随笔為你收集整理的Raft当初为什么会被命名为Raft?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是真正的架构设计?
- 下一篇: 互联网公司常用分库分表方案汇总