как обработать сбой сбережений после совершения плота - PullRequest
0 голосов
/ 01 марта 2019

при использовании raft после фиксации записей журнала мы должны записать данные, которые предлагаются узлом, в наше хранилище.Что делать, если один из узлов записи не удалось.скажем, диск получил плохо.должен ли узел сбоя завершать сам себя?

the proces like the following.
1. node A propose with data "abc"
2. raft log committed
3. A write data "abc" to file ok.
   B write data "abc" to file ok.
   C write data "abc" failed.
what should we do now ? since C won't have data "abc"

1 Ответ

0 голосов
/ 01 марта 2019

Не забывайте, что эти изменения уже сохранены в журнале плота.Плот даже не гарантирует, что как только изменение будет зафиксировано, x (например, записать изменение в другой файл) произойдет в течение любого периода времени.Так что

C не будет иметь данных "abc"

Это не точно.Данные были сохранены в журнале плота, они просто не были записаны в какой-либо другой файл после их фиксации.Здесь вы описываете поведение постоянного конечного автомата, в котором данные сохраняются в каком-то отдельном хранилище , после они фиксируются в журнале Raft.Но не забывайте, что фиксация данных в журнале Raft равносильна его сохранению.

Постоянные конечные автоматы имеют требования, выходящие за рамки базового протокола Raft, и больше о них можно найти в диссертации raft.Как правило, в постоянном автомате состояний необходимо сохранить индекс lastApplied в дополнение к term и votedFor.Поскольку записи фиксируются и применяются к постоянному конечному автомату (например, записываются в файл данных на каждом узле), индекс lastApplied сохраняется.Записи не удаляются из журнала плотов, пока они не будут успешно применены.Таким образом вы гарантируете, что ваши данные "abc" не будут потеряны, даже если они не могут быть записаны в файл на узле C.

...