← На главную

Raft модифицирован: работает при отказе большинства за счёт Spot It!

26.05.2026 10:30 · hackernews

Инженер Роан Падхай описал необычную модификацию протокола консенсуса Raft. В обычном Raft для фиксации записи или выбора лидера нужно большинство узлов. Например, в кластере из 7 машин требуется 4 голоса. Это гарантирует безопасность: любые два большинства пересекаются хотя бы в одном узле.

Падхай предлагает заменить большинство на структуру из конечных проективных плоскостей — ту же математику, что лежит в основе карточной игры Spot It! (она же Dobble). В колоде Spot It! любые две карты имеют ровно один общий символ. Это достигается проективной плоскостью порядка 7: 57 символов, 57 карт по 8 символов.

Автор строит аналогичную систему для Raft. Каждый узел — это «точка» плоскости. Каждая «линия» (или «блок») — допустимая кворумная группа. Для фиксации записи или победы на выборах нужно получить подтверждение от всех узлов любого одного блока.

Самый маленький пример — плоскость Фано (порядок 2). В ней 7 узлов и 7 блоков по 3 узла (например, блок 1: {1,2,3}, блок 2: {1,4,5} и так далее). Любые два блока пересекаются ровно в одном узле.

Сценарий: лидер — узел 1, узлы 4,5,6,7 упали. В классическом Raft работа встала бы — осталось только 3 узла из 7. Но если активные узлы (1,2,3) образуют блок, запись фиксируется. Другой сценарий: активны узлы 2,4,6 — они тоже образуют блок, и выборы проходят успешно. При этом новый лидер (узел 2) гарантированно участвовал в прошлой фиксации, так как его блок пересекается с предыдущим. Безопасность сохраняется.

Обратная сторона: не любое большинство даёт прогресс. Если активны узлы 1,2,4,7 (4 из 7, классическое большинство), ни один блок не собран — запись не фиксируется. Для плоскости Фано со случайным набором из 4 активных узлов вероятность успеха — 80%, а не 100%, как в обычном Raft. С 5 узлами — всегда 100%.

Для масштаба Spot It! (57 узлов, блоки по 8) шансы ещё ниже. При тех же 29 активных узлах (классическое большинство) вероятность найти полный блок — всего около 15%. Компромисс очевиден: модификация позволяет работать с малым числом узлов, но теряет гарантию прогресса при большинстве.

Автор также ссылается на теорему Эрдёша–Ко–Радо, которая задаёт верхнюю границу количества попарно пересекающихся блоков. И отмечает, что на практике разумнее подбирать блоки под реальную топологию отказов (стойки, зоны доступности), а не под случайные сбои.

Читать оригинал →