Как безопасно удалить историю журнала в плот, когда все записи журнала узлов были зафиксированы - PullRequest
0 голосов
/ 17 декабря 2018

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

1 Ответ

0 голосов
/ 17 декабря 2018

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

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

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

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

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

...