Как Raft гарантирует целостность бревна? - PullRequest
0 голосов
/ 21 января 2020

Я изучаю Raft, и я уже знаю базовый механизм Raft.

Когда избирается Лидер, он обязан обновить журнал Подписчиков до журнала Лидера. При обновлении Фолловера он находит первый совпадающий <entry, term> в обратном направлении и обновляет Фолловера следующими журналами.

Каким образом Плот гарантирует журналы Лидера и Фолловера до того, как совпадающие <entry, term> являются одни и те же? Произойдет ли этот случай:

                |
Leader          v  
Entry   : 1 2 3 4 5 6 7 8 9 10
Term    : 1 1 1 2 2 3 3 3 3 3 

Follower
Entry   : 1 2 3 4 5 6 7
Term    : 1 1 1 1 2 3 3

1 Ответ

3 голосов
/ 27 января 2020

Это свойство алгоритма Raft называется Log Matching.

Если два журнала содержат запись с одинаковым индексом и термином, то журналы идентичны во всех записях вплоть до данного индекса

Это верно потому, что:

При отправке RP-1017 AppendEntries, лидер включает в свой журнал индекс и термин записи, которая непосредственно предшествует новым записям. Если подписчик не находит в своем журнале запись с таким же индексом и термином, он отклоняет новые записи. Проверка согласованности действует как вводный этап: начальное пустое состояние журналов удовлетворяет свойству соответствия журналов, а проверка согласованности сохраняет свойство сопоставления журналов при каждом расширении журналов. В результате, всякий раз, когда AppendEntries возвращается успешно, лидер знает, что журнал последователя идентичен его собственному журналу регистрации новых записей.

Источник https://raft.github.io/raft.pdf

...