System Design Space
Граф знанийНастройки

Обновлено: 25 марта 2026 г. в 03:00

Консенсус: Paxos и Raft

expert

Как системы договариваются о единственном значении: кворумы, двухфазный Paxos и лидер‑ориентированный Raft.

Консенсус полезно воспринимать не как символ инженерной зрелости, а как дорогой инструмент, который нужен только там, где система действительно обязана иметь одну согласованную историю состояния.

На практике эта глава помогает отделить случаи, где Raft или Paxos оправданы, от сценариев, где команда только покупает себе лишнюю задержку и сложность, не выигрывая в correctness ничего критичного.

В интервью и архитектурных обсуждениях она особенно сильна, когда вы говорите не про названия алгоритмов, а про цену кворумов: write latency, recovery, лидерский failover и сложность диагностики.

Практическая польза главы

Практика проектирования

Помогает понять, где действительно нужен consensus-контур, а где достаточно более простых гарантий.

Качество решений

Дает способ выбирать между Raft/Paxos с учетом read/write профиля и отказоустойчивости.

Interview-аргументация

Позволяет объяснить quorum, leader-term и commit-логику без избыточной теоретизации.

Риски и компромиссы

Фокусирует на operational цене consensus: latency записи, recovery и сложность отладки.

Связанная книга

Designing Data‑Intensive Applications

Глава о консенсусе и репликации — must‑read для понимания Paxos/Raft.

Читать обзор

Консенсус — это способ договориться о единственном значении в распределённой системе, несмотря на сбои, задержки и сетевые разделения. Без консенсуса нельзя надёжно выбрать лидера, синхронизировать метаданные или обеспечить линейную запись в кворум‑кластер.

Фундамент

TCP протокол

Консенсус полагается на сетевые раунды и стабильный транспорт.

Читать обзор

Где нужен консенсус

Выбор лидера

Координация кластера и назначение coordinator/primary.

Метаданные

Конфигурации, membership, схема данных и routing.

Согласованная запись

Линеаризуемые операции при репликации.

Paxos

Paxos — классический алгоритм Лампорта. Он гарантирует выбор единственного значения через двухфазный протокол и кворумы acceptors. В реальных системах часто используется Multi‑Paxos с выделенным лидером.

Интерактивная схема Paxos

Выберите шаг — подсветятся участники и сообщения.

Proposer
Acceptors
Learners
Prepare(n)кворум acceptor‑ов
Promise(n, v?)ответ proposer‑у
Accept(n, v)подтверждение значения
Accepted(n, v)уведомление learner‑ов

Multi‑Paxos

Оптимизация Paxos для потока команд: лидер берёт на себя фазу Prepare один раз, а дальше выполняет только Accept‑раунд для каждой записи.

Что это даёт

  • Меньше сетевых раундов на запись
  • Выше пропускная способность
  • Лидер упрощает прогресс при конфликтах

Multi‑Paxos: режимы работы

Нажмите на фазу, чтобы увидеть, как изменяется поток сообщений.

Стабильный режим

Для каждой новой записи выполняется только Accept‑раунд — меньше RTT.

Accept(n, v) в кворум
Ответы Accepted
Высокая пропускная способность

Raft

Raft проектировался как «понятный консенсус». Он разделяет задачу на выбор лидера, репликацию лога и управление членством. Благодаря этому протокол проще объяснять и реализовывать.

Raft: состояния узла

Переключайте состояние — смотрите, как меняются сообщения и роль узла.

Leader

Принимает команды клиента и реплицирует их на follower‑ов.

Client command
AppendEntries
Commit index

Paxos vs Raft

Paxos

  • Сложнее для понимания и реализации
  • Более формальный и «академичный»
  • Нередко скрыт за Multi‑Paxos

Raft

  • Проще объяснить команде и поддерживать
  • Явная лидер‑ориентированная модель
  • Используется в etcd, Consul, CockroachDB

Ключевые выводы

  • Консенсус нужен для согласованного выбора значения в условиях сбоев.
  • Paxos — фундаментальный, но сложный; Raft — инженерно понятный.
  • Оба протокола требуют кворума большинства и устойчивы к частичным сбоям.

Консенсус делает систему надёжнее, но повышает latency и сложность. Используйте его только там, где действительно нужна строгая согласованность.

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки