Как безопасно удалить историю журнала в плот, когда все записи журнала узлов были зафиксированы

В последнее время я использую RAFT для построения распределенной системы, реализация простой функции - репликация записи журнала на каждый сервер для сохранения согласованности данных, поэтому мой вопрос заключается в том, как безопасно удалить журнал истории в RAFT, когда все узлы регистрируются записи были совершены.

1 ответ

Решение

Я не уверен, что ваш вопрос достаточно полный, чтобы дать полный ответ, но обычно этот вопрос задается с точки зрения постоянных автоматов. Если Raft просто используется для линеаризации и репликации клиентских запросов и записи сохраняются отдельно (например, хранятся в базе данных) после фиксации, правильный подход заключается в периодическом сохранении lastApplied термин и индекс для каждого узла и удалить все записи до этой точки.

Тем не менее, обратите внимание, что при перезапуске узла все еще будет некоторое воспроизведение журналов, что технически неизбежно, так как применение записей и сохранение lastApplied Индекс не может быть сделан атомарно, поэтому воспроизведение записей журнала все еще необходимо учитывать в постоянном автомате.

Другая сложность заключается в том, чтобы догнать новые узлы или узлы, которые отстают от lastApplied индекс. В этом случае вы должны отправить постоянное состояние в качестве снимка, чтобы догнать узел.

См. Раздел о персистентных автоматах в диссертации Рафта.

Независимо от того, является ли это именно тем случаем использования, с которым вы сталкиваетесь, общий подход к сохранению безопасности системы для записей, которые могут быть немедленно отброшены, одинаков.

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