有沒有人曾親身受過 Raft 共識演算法的荼毒?

理解 Raft 可能很困難。事實上,我最近在社群媒體上看到一些討論,其中基礎設施公司的實際技術領導者都表現出缺乏理解(!)。重點是,你並不孤單。快進來吧,魯蛇們,我們要回到(好萊塢)高中了。

Raft 是一種用於分散式系統的共識演算法,用於確保資料的安全且一致地複製。光是這句話就可能令人困惑。希望這篇文章中的比喻能幫助人們理解它的運作方式。為了紀念國家《辣妹過招》日(「10 月 3 日那天他問我現在是幾點」),我將透過電影《辣妹過招》來解釋 Raft 共識演算法。(若想獲得更深入的技術性概述,我們推薦《The Secret Lives of Data》)。

Raft 共識可以用高中社群來解釋,而《辣妹過招》是最好的範例。電影一開始,凱蒂是個「在家受教育的野孩子」,因此不是任何社群的一員。她就像一個沒有複製體的獨立資料。如果她被一輛大黃校車撞到,她對軍褲和人字拖的想法就會隨她而去,永遠不會流行起來。

然而,「塑膠女」們則是一個叢集的一部分。如果雷吉娜被校車撞到,她擁有的資訊不會隨她而去,因為她已經和凱倫和葛麗琴分享過了。如果有人在尋找「燒毀手冊」,他們可以透過詢問剩下的兩位成員之一來找到它,即使雷吉娜在醫院休養期間也是如此。如果她沒有複製這些知識,就沒有人能夠找到這本手冊。

每個複製體叢集都需要一個 Raft 領導者,或者說是一個女王蜂。當然,這就是雷吉娜·喬治。雷吉娜是「塑膠女」的領導者,這個團體由葛麗琴·維納斯(她的父親發明了烤酥餅,她的頭髮裡藏著秘密)和凱倫·史密斯(她不是最聰明的,她有預報天氣的超能力)組成。葛麗琴和凱倫是追隨者複製體。

這種動態與 Raft 相似,也就是說,如果複製體之間沒有共識,就無法採取任何行動。我的意思是,你不會在沒有先問朋友是否好看之前就買一件裙子,對吧?沒錯!這就是為什麼你需要共識,或者說多數票。如果雷吉娜在購物並想買一件裙子,除非葛麗琴或凱倫同意購買,否則她不能購買。

假設雷吉娜告訴葛麗琴和凱倫,星期三要穿粉紅色。葛麗琴熱切地第一個同意。現在雷吉娜得到了葛麗琴的確認,大多數「塑膠女」(⅔)都贊成星期三穿粉紅色,共識已經達成。現在這是官方的了。

《辣妹過招》的高中環境由許多不同的社群組成。通常這些社群在午餐時各自坐在一起,桌子之間沒有交流。我們可以將桌子之間的空間視為「塑膠女」和「藝術怪胎」(也稱為「你 ever 會遇到的最棒的人」)之間刻意劃分的鴻溝。為了方便計算,我們假設「塑膠女」有 3 個人,「藝術怪胎」有 2 個人,達米恩和珍妮絲。

假設一個客戶同時將一條訊息傳送給「塑膠女」,而另一個客戶將另一條訊息傳送給「藝術怪胎」。「4 for Glenn Coco」被傳送給「塑膠女」社群/節點(透過 Raft 領導者雷吉娜),而「0 for Gretchen Wieners」被寫入「藝術怪胎」社群/節點(透過 Raft 領導者珍妮絲)。

由於「藝術怪胎」只有兩個人,珍妮絲和達米恩,他們無法達成法定人數,因為在投票時解決平局需要超過兩名成員。由於他們無法達成法定人數,提交甚至無法進行。然而,由於她的社群有超過兩名成員(3 人),雷吉娜能夠獲得多數票並提交「4 for Glenn Coco」的變更。

當雷吉娜星期一穿著運動褲出現在午餐時,她被戲劇性地罷免了「塑膠女」領導者的職位。在給定的時間間隔內,領導者必須發送一種心跳來維持其領導地位。這是他們說「嗨,我還在這裡」的方式。同樣地,任何有資格的女王蜂都需要定期發送其統治的訊號,當雷吉娜無法再主張她的地位時,她就不再是女王蜂了。

「塑膠女」顯然需要一個新的 Raft 領導者。幸運的是,凱蒂·赫倫站出來成為候選複製體,葛麗琴和凱倫各自回覆了她們的投票,以確保凱蒂成為新的女王蜂。現在,「塑膠女」在沒有凱蒂的指示下什麼也做不了。

當凱蒂穿著軍褲和人字拖時,她只需要「塑膠女」中的另一位成員同意這很酷,就能達成法定人數(3 票中的 2 票),現在她的風格被所有人接受了。她們的高中狀態變成了「軍褲和人字拖」。

由於凱蒂現在是女王蜂,或 Raft 領導者,客戶的請求將首先發送給凱蒂。假設達米恩是與凱蒂說話的客戶,當時整個初中女生都在體育館裡。達米恩大喊「她根本不來這裡!」由於凱蒂是 Raft 領導者,她應該是接收這條資訊並將其傳達給其他「塑膠女」的人。一旦她獲得至少一位其他「塑膠女」的確認,資訊就已提交。

她真的不來這裡嗎?不,她只是有很多感受。凱倫知道她不來這裡,葛麗琴知道她不來這裡,諾伯里女士知道她不來這裡,珍妮絲·伊恩知道她根本不來這裡。每個人都知道她根本不來這裡。

希望這能讓 Raft 共識演算法更容易理解。憑藉 CockroachDB 中這種程度的一致性,極限是不存在的!這是不是很酷?