為 Raft 引入 leader lease 機制解決集群腦裂時的 stale read 問題

問題:
當(dāng) raft group 發(fā)生腦裂的情況下枫疆,老的 raft leader 可能在一段時間內(nèi)并不知道新的 leader 已經(jīng)被選舉出來,這時候客戶端在老的 leader 上可能會讀取出陳舊的數(shù)據(jù)(stale read)慈迈。
比如璧微,我們假想一個擁有 5 個節(jié)點的 raft group:

1.png

其中 Node 5 是當(dāng)前的 raft leader,當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)時片橡,在 Node 5 的 raft lease 任期還沒結(jié)束的一段時間內(nèi),Node 5 仍然認(rèn)為自己是當(dāng)前 term 的 leader淮野,但是此時捧书,另外一邊分區(qū)已經(jīng)在新的 term 中選出了新的 leader。

2.png

如果此時录煤,客戶端在新的 leader 上更新了某個值 x鳄厌,此時是可以更新成功的(因為還是可以復(fù)制到多數(shù)派)。但是在分區(qū)的另一端妈踊,此時一個客戶端去讀取 x 的值,Node 5 還會返回老的值泪漂,這樣就發(fā)生了 stale read廊营。

3.png

解決方案

引入一個新的概念, region leader。region leader 是一個邏輯上的概念, 任意時刻對于某一個 region 來說, 一定只擁有一個 region leader, 每個 region leader 在任期之內(nèi)嘗試每隔 t 時間間隔, 在 raft group 內(nèi)部更新一下 region leader 的 lease. 所有的讀寫請求都必須通過 region leader 完成萝勤,
但是值得注意的是露筒, region leader 和 raft leader 可能不是一個節(jié)點,當(dāng) region leader 和 raft leader 不重合的時候敌卓,region leader 會將請求轉(zhuǎn)發(fā)給當(dāng)前的 raft leader慎式,當(dāng)網(wǎng)絡(luò)出現(xiàn)分區(qū)時,會出現(xiàn)以下幾種情況:

  1. region leader 落在多數(shù)派,老 raft leader 在多數(shù)派這邊
  2. region leader 落在多數(shù)派瘪吏,老 raft leader 在少數(shù)派這邊
  3. region leader 落在少數(shù)派癣防,老 raft leader 在多數(shù)派這邊
  4. region leader 落在少數(shù)派,老 raft leader 在少數(shù)派這邊

用開篇的例子來分情況討論:

對于第一種情況掌眠,region leader 的 lease 不會過期蕾盯,因為 region leader 的心跳仍然能更新到多數(shù)派的節(jié)點上,老的 raft leader 仍然能同步到大多數(shù)節(jié)點上蓝丙,少數(shù)派這邊也不會選舉出新的 leader级遭, 這種情況下不會出現(xiàn) stale read。

4.png

第二種情況渺尘,就是開篇提到會出現(xiàn) stale read 的典型情況挫鸽,老的 raft leader 被分到了少數(shù)派這邊,多數(shù)派這邊選舉出了新的 raft leader 鸥跟,如果此時的 region leader 在多數(shù)派這邊掠兄。

5.jpeg

因為所有的讀寫請求都會找到 region leader 進(jìn)行,即使在原來沒有出現(xiàn)網(wǎng)絡(luò)分區(qū)的情況下锌雀,客戶端的請求也都是要走 node 1 蚂夕,經(jīng)由 node 1 轉(zhuǎn)發(fā)給 node 5,客戶端不會直接訪問 node 5腋逆,所以此時即使網(wǎng)絡(luò)出現(xiàn)分區(qū)婿牍,新 leader 也正好在多數(shù)派這邊,讀寫直接就打到 node 1 上惩歉,皆大歡喜等脂,沒有 stale read。

第三種情況撑蚌,region leader 落在少數(shù)派這邊上遥,老 raft leader 在多數(shù)派這邊,這種情況客戶端的請求找到 region leader争涌,他發(fā)現(xiàn)的無法聯(lián)系到 leader(因為在少數(shù)派這邊沒有辦法選舉出新的 leader)粉楚,請求會失敗,直到本次 region leader 的 lease 過期亮垫,同時新的 region leader 會在多數(shù)派那邊產(chǎn)生(因為新的 region leader 需要嘗試走一遍 raft 流程)模软。因為老的 region leader 沒辦法成功的寫入,所以也不會出現(xiàn) stale read饮潦。但是付出的代價是在 region leader lease 期間的系統(tǒng)的可用性燃异。

第四種情況和第三種情況類似,多數(shù)派這邊會產(chǎn)生新的 raft leader 和 region leader继蜡。

總體來說回俐,這種方法犧牲了一定的可用性(在腦裂時部分客戶端的可用性)換取了一致性的保證逛腿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仅颇,隨后出現(xiàn)的幾起案子单默,更是在濱河造成了極大的恐慌,老刑警劉巖灵莲,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雕凹,死亡現(xiàn)場離奇詭異,居然都是意外死亡政冻,警方通過查閱死者的電腦和手機枚抵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來明场,“玉大人汽摹,你說我怎么就攤上這事】嘞牵” “怎么了逼泣?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舟舒。 經(jīng)常有香客問我拉庶,道長,這世上最難降的妖魔是什么秃励? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任氏仗,我火速辦了婚禮,結(jié)果婚禮上夺鲜,老公的妹妹穿的比我還像新娘皆尔。我一直安慰自己,他們只是感情好币励,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布慷蠕。 她就那樣靜靜地躺著,像睡著了一般食呻。 火紅的嫁衣襯著肌膚如雪流炕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天搁进,我揣著相機與錄音浪感,去河邊找鬼。 笑死饼问,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的揭斧。 我是一名探鬼主播莱革,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼峻堰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盅视?” 一聲冷哼從身側(cè)響起捐名,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闹击,沒想到半個月后镶蹋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡赏半,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年贺归,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片断箫。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡拂酣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仲义,到底是詐尸還是另有隱情婶熬,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布埃撵,位于F島的核電站赵颅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏暂刘。R本人自食惡果不足惜饺谬,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸳惯。 院中可真熱鬧商蕴,春花似錦、人聲如沸芝发。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辅鲸。三九已至格郁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間独悴,已是汗流浹背例书。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刻炒,地道東北人决采。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像坟奥,于是被迫代替她去往敵國和親树瞭。 傳聞我的和親對象是個殘疾皇子拇厢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容