Как обработать сбой сбережений после совершения плота

При использовании 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 ответ

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

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

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

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

Другие вопросы по тегам