Как безопасно удалить историю журнала в плот, когда все записи журнала узлов были зафиксированы
В последнее время я использую RAFT для построения распределенной системы, реализация простой функции - репликация записи журнала на каждый сервер для сохранения согласованности данных, поэтому мой вопрос заключается в том, как безопасно удалить журнал истории в RAFT, когда все узлы регистрируются записи были совершены.
1 ответ
Я не уверен, что ваш вопрос достаточно полный, чтобы дать полный ответ, но обычно этот вопрос задается с точки зрения постоянных автоматов. Если Raft просто используется для линеаризации и репликации клиентских запросов и записи сохраняются отдельно (например, хранятся в базе данных) после фиксации, правильный подход заключается в периодическом сохранении lastApplied
термин и индекс для каждого узла и удалить все записи до этой точки.
Тем не менее, обратите внимание, что при перезапуске узла все еще будет некоторое воспроизведение журналов, что технически неизбежно, так как применение записей и сохранение lastApplied
Индекс не может быть сделан атомарно, поэтому воспроизведение записей журнала все еще необходимо учитывать в постоянном автомате.
Другая сложность заключается в том, чтобы догнать новые узлы или узлы, которые отстают от lastApplied
индекс. В этом случае вы должны отправить постоянное состояние в качестве снимка, чтобы догнать узел.
См. Раздел о персистентных автоматах в диссертации Рафта.
Независимо от того, является ли это именно тем случаем использования, с которым вы сталкиваетесь, общий подход к сохранению безопасности системы для записей, которые могут быть немедленно отброшены, одинаков.