теория

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

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

Новость поинтереснее — освобождающая: тебе почти наверняка не нужно писать консенсус самому.

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

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

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

← назад