2016-05-13 60 views
0

我一直在閱讀關於Raft的幾個文檔,並且我已經得到關於提交的矛盾信息。我知道只有在已知存儲在大多數服務器中的情況下才能提交條目,但是,是否還有其他條件?我已經讀過,從每個服務器存儲一個當前條目的入口也是強制性的,但其他一些文檔卻沒有提到這一點。任何幫助?RAFT:提交條目的條件

回答

2

存儲在大多數服務器上的條目被提交併不是技術上的真實情況。它確實是領導確定一個條目一旦被存儲在大多數服務器上,但只在其當前期限內被提交。來自另一個術語的條目可以存儲在大多數服務器上,但從不承諾,事實上後來被另一個領導者覆蓋。這在筏板紙中顯示在圖8中。

這就是爲什麼領導者必須確保從當前任期開始承諾錄入,然後才能考慮任何以前條款中的任何(額外)條目。一旦選舉出領導者,領導者就有可能將先前任期的項目複製到大多數節點中,而不需要他們承諾。如果該領導者崩潰,則可以選擇另一個具有較晚條目的領導者,並覆蓋存儲在大多數羣集中的條目。這就是圖8所示,這就是承諾的技術定義是這樣的原因: 領導者的當前術語中的條目一旦存儲在大部分集羣中就被承諾,並且一旦從領導者的術語承諾領導者日誌中之前條款的所有條目都是隱含承諾的。

這實際上意味着什麼時候選舉領導者時,通常會提交一個空操作條目來強制當前任期中的提交。該領導者不會增加其commitIndex,直到大多數服務器上存儲無操作條目。