теория

Не пиши свой консенсус

Надёжный — это частный случай консенсуса. Узлы голосуют, большинство назначает одного. Та же машинерия заодно даёт распределённые блокировки, уникальные счётчики, реплицированные журналы — всё это сводится к консенсусу.

А писать консенсус самому тебе почти наверняка не нужно.

Алгоритмы консенсуса — Raft, Paxos и их родня — выглядят просто на слайде («ну голосуют большинством, чего там») и оказываются кошмарно коварны в деталях. Что делать с голосами прошлого раунда? Как нумеровать эпохи? Как узел, вернувшийся после паузы, понимает, что мир ушёл вперёд без него? Эти грани вылизывали десятилетиями, и на каждой кто-то уже набил шишку — за тебя.

Поэтому в проде консенсус берут готовым, как : ZooKeeper, etcd, Consul. Внутри — выверенный алгоритм; наружу — простые примитивы: «стань лидером», «поставь блокировку», «выдай уникальный номер». Курьерскому сервису не нужен свой алгоритм — ему нужно спросить у etcd «кто лидер?» и довериться ответу.

И честно про цену. Координация — это сетевые раунды на каждое согласованное решение: кворум должен ответить, прежде чем что-то произойдёт. Поэтому линеаризуемые операции в разы медленнее локальных. Не обмазывай координацией всё подряд: точно знай, какие решения обязаны быть единогласными, — и оставь все остальные быстрыми и локальными. Запомни это: в следующий раз именно цена координации выйдет на первый план.

← назад