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