成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DDIA 對 Raft 的這種極端場景的描述,要如何理解?

開發 后端
Raft 算法存在一種失去活性(liveness)的極端情況:如果有一條網絡連接不可靠,Raft 當前領導者會不斷被迫下臺導致系統實質上毫無進展。

[[421736]]

本文選自我在知乎的回答。

《設計數據密集型應用》(即 DDIA)中提到 Raft 的一個問題,即,Raft 算法存在一種失去活性(liveness)的極端情況:如果有一條網絡連接不可靠,Raft 當前領導者會不斷被迫下臺導致系統實質上毫無進展。

我們先來具體描述一下該問題。

如圖所示的 4 節點 Raft 集群,其中有一個節點和其他三個網絡不太穩定,假設它能發送消息給別的節點但收不到其他節點的消息,那么它就會一直收不到心跳消息,然后轉為 candidate 自增任期并發起新的選舉,來自更大任期的 RequestVote 請求會導致現在的 Leader 下臺重新選舉。這樣一直反復,會導致集群無法正常工作。

Raft 大論文提到一種解決方式是加入一個新的 PreVote 階段,etcd 就這么干了,為此增加了一種新的節點狀態叫做 PreCandidate 狀態。

PreVote 階段作用是當一個節點想要發起選舉時,首先要確認自己確實有資格贏得投票而不是在浪費時間,才會真的自增任期發起新的選舉。

PreVote 階段的具體流程是,在發起真正的選舉之前,先發送 PreVote 消息給所有節點, PreVote消息和 RequestVote 消息一樣,但節點不會自增自己的任期,只會增加消息中的 term 參數。

收到 PreVote 消息的節點同意重新選舉的條件是:

參數中的任期更大,或者任期相同但 log index 更大;

至少一次 election timeout 時間內沒有收到領導者心跳;

只有超過半數節點同意 PreVote 消息,該節點才能真正去自增任期并發起新的選舉。

回到上述情況,網絡鏈路有問題的那個節點在 PreVote 階段會發現自己無法贏得超過半數節點同意自己發起選舉(別的節點都能收到心跳),因此不會自增任期去干擾 Leader 工作。

問題解決了嗎?

問題并沒有解決,只有 PreVote 階段還可能有一種極端情況會導致 Raft 失去活性。如圖所示:

圖中是一個 5 節點組成的 Raft 集群,故障發生之前 4 是 Leader。現在故障發生了,5 宕機了,同時 4 只和 2 保持連接,1、2、3互相保持連接。這種情況下 1、3 收不到 Leader 的心跳,會發起 PreVote請求,但由于 2 能收到 Leader 節點 4 的心跳,所以 2 不會同意 PreVote 請求,因此節點 1、3 無法獲得多數派的 PreVote 同意。

該集群的問題是,無法選舉出新的 Leader,但舊的 Leader 又只能 AppendEntries 到兩個節點(2和自己),無法達成多數派,整個集群無法取得任何進展,不滿足活性。

此處 Raft 協議明明可以容忍 2 個節點故障,但增加了 PreVote 階段后反而無法容忍僅僅 1 個節點故障,其實沒有 PreVote 階段的話,1 和 3 是有機會當選 Leader 推進整個系統正常工作的。

因此 Raft 還需要增加一種機制來讓 Leader 主動下臺。

這個機制很簡單:Leader 沒有收到來自多數派節點的 AppendEntries 響應時就主動下臺。這樣,圖中 1、2 和 3 都有機會當選新的 Leader,整個集群依舊可以正常工作。

etcd 把這叫做 CheckQuorum,etcd 的 issue 中有關于此問題的討論:https://github.com/etcd-io/etcd/issues/3866

CheckQuorum 確保了如果當前 Leader 無法連接到多數派節點,它將會下臺并選舉出新的 Leader。PreVote 確保一旦 Leader 當選,整個系統將是穩定的,Leader 不會被迫下臺。

那么 PreVote + CheckQuorum 可以解決活性問題了嗎?

 

可以了!

 

責任編輯:武曉燕 來源: 多顆糖
相關推薦

2024-05-08 08:18:05

索引失效場景

2021-09-28 07:12:09

測試路徑

2021-06-18 08:04:46

Linux進程操作系統

2021-09-29 07:24:20

場景數據

2010-08-02 08:40:43

DB2數據庫性能

2021-10-08 09:59:32

冒泡排序場景

2021-10-13 18:01:33

快速排序場景

2021-10-09 10:25:41

排序應用場景

2010-05-26 15:03:51

2013-05-13 09:35:03

微軟Windows 8弗蘭克·肖稱

2021-09-16 07:52:18

算法應用場景

2021-10-12 07:15:02

歸并排序場景

2021-10-11 09:38:41

開源

2021-11-05 07:47:56

代理模式對象

2021-11-09 08:51:13

模式命令面試

2010-07-19 18:04:23

SQL Server鎖

2021-11-10 07:47:49

組合模式場景

2021-08-16 08:33:26

git

2021-11-03 14:10:28

工廠模式場景

2015-12-09 13:06:15

Linux架構內核
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美一区二区三区免费观看 | 国产目拍亚洲精品99久久精品 | 成人综合久久 | 亚洲91| 手机在线观看av | 国产精品国产馆在线真实露脸 | 午夜视频精品 | 国产美女自拍视频 | 久久久久久久久一区 | 日日摸夜夜添夜夜添精品视频 | 国产精品成人一区二区 | 亚洲欧美网 | 国产一级免费视频 | 久久精品国产v日韩v亚洲 | 成人精品一区二区三区中文字幕 | 久久久久国| 国产精品久久久久久久久图文区 | 91免费小视频 | 日韩精品成人一区二区三区视频 | 一区二区三区在线观看免费视频 | 一区二区三区四区视频 | 蜜桃av鲁一鲁一鲁一鲁 | 免费在线一区二区 | 人人爽人人草 | 久久一日本道色综合久久 | 男女精品久久 | 日韩av最新网址 | 国产欧美一区二区三区国产幕精品 | 在线观看成人小视频 | 97精品超碰一区二区三区 | 国产三级日本三级 | 91欧美激情一区二区三区成人 | 欧美毛片免费观看 | 欧美v免费| 欧美极品少妇xxxxⅹ免费视频 | 久久大陆| 91在线色视频 | 久久精品国产亚洲一区二区三区 | 免费在线观看黄视频 | 日韩毛片在线免费观看 | 91精品国产一区二区三区香蕉 |