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

Обновлено: 11 апреля 2026 г. в 14:45

Распределённая очередь сообщений

средний

Классическая задача: доставка событий, хранение смещений, повторные попытки и контроль отставания потребителей в асинхронной интеграции.

Распределённая очередь сообщений - это не просто буфер между сервисами, а набор правил о порядке, доставке, повторных попытках и поведении системы, когда потребители не успевают за входящим потоком.

Глава связывает в одну архитектуру публикацию событий, разбиение по партициям, хранение смещений, группы потребителей, повторную доставку и карантин проблемных сообщений.

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

Семантика доставки

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

Группы потребителей

Параллелизм появляется не сам по себе: нужно явно понимать, как делятся партиции, когда происходит перебалансировка и где теряется порядок обработки.

Повторная доставка

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

Отставание потребителей

Рост очереди важен не сам по себе: нужно уметь связать отставание с задержкой бизнеса, перегрузкой обработчиков и режимами деградации.

Источник

Практический кейс из главы 9

Кейс про распределённую очередь сообщений как базовый механизм асинхронной интеграции сервисов.

Читать обзор

Распределённая - это не просто буфер между сервисами. Она задаёт правила о том, какая допустима, где сохраняется порядок и как система ведёт себя под , когда потребители не успевают за входящим потоком.

Примеры систем очередей

  • Apache Kafka: журнал с разбиением на партиции, группы потребителей, повторное чтение и потоковая обработка.
  • RabbitMQ: гибкая маршрутизация, отдельные очереди и тонкая настройка подтверждений.
  • Apache Pulsar: разделение хранения и вычислений, многоарендные топики и изоляция нагрузки.
  • NATS JetStream: лёгкая шина событий с постоянным хранением потоков.
  • AWS SQS/SNS: управляемый обмен сообщениями для облачных сценариев.

Функциональные требования

Базовый минимум здесь - не только публикация и чтение сообщений, но и управление подтверждениями. Система должна уметь распределять чтение между , хранить последнее подтверждённое и поддерживать , если обработчик упал или бизнес-эффект нужно восстановить.

Базовый API

  • POST /topics/:name/messages - публикация события в топик
  • GET /topics/:name/poll - чтение сообщений потребителем
  • POST /offsets/commit - подтверждение обработанного смещения
  • POST /topics/:name/replay - повторное чтение с указанного смещения

Надёжность обработки

  • Параллельная обработка через группы потребителей
  • Контур повторных попыток и отдельный карантин для проблемных сообщений
  • Понятная политика доставки как минимум один раз
  • Защита от перегрузки за счёт ограничения входного потока и повторов

Нефункциональные требования

Для очереди важны не только абсолютные числа по QPS, но и то, как система ведёт себя под пиком нагрузки. Главный разговор здесь идёт про , задержку доставки и предсказуемость деградации, когда очередь начинает заметно накапливаться.

ТребованиеЦелевое значениеЗачем это нужно
Пропускная способностьВысокая даже при кратких пикахОчередь должна сглаживать всплески и не заставлять продюсеров синхронно ждать потребителей
Задержка доставкиКонтролируемое end-to-end отставаниеБизнесу важна не только запись в брокер, но и время до фактической обработки сообщения
МасштабируемостьРост за счёт партиций и групп потребителейНагрузка должна расти без полного пересмотра архитектуры
Сохранность данныхЗапись переживает отказ отдельного узлаПотеря брокера не должна означать потерю уже подтверждённого сообщения
Предсказуемая деградацияОграниченные повторы и изоляция ошибокСистема не должна проваливаться в бесконечные повторы и шторм повторной доставки

Общая архитектура

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

Глубже

Kafka (book summary)

Подробно разбирает журнал с разбиением на партиции, группы потребителей, репликацию и эксплуатационные компромиссы.

Читать обзор

Схема архитектуры

журнал с разбиением на партиции, группы потребителей и контур повторной доставки

Схема показывает путь публикации, путь обработки и отдельный контур для проблемных сообщений.

Продюсеры, брокер и маршрутизация
приём и выбор партиции
Партиции и журнал
надёжная запись и репликация
Потребители, смещения и DLQ
обработка и контроль ошибок

Схема модели данных

Как устроено сообщение в очереди и как оно размещается в журнале с разбиением на партиции.

Конверт сообщения

ключ

order:1234

полезная нагрузка

{ status: "created", amount: 9900 }

заголовки

message_idtrace_idretry_count

Размещение в журнале

разбиение по партициям

hash(ключ) -> топик: orders / партиция: 7

смещения

смещение: 912334 (только добавление)

хранение

7d / 100GB на партицию / компакция

Порядок

Сохраняется внутри одной партиции, но не между разными партициями.

Повторное чтение

Смещение помогает возобновить обработку после сбоя потребителя.

Идемпотентность

`message_id` помогает убирать дубли при повторной доставке.

Путь публикации и чтения через компоненты

Здесь важно увидеть не только запись в журнал, но и то, что происходит после чтения: как сообщение проходит обработчик, когда уходит на , когда попадает в , как устроена и в какой точке безопасно фиксировать результат.

Разбор пути публикации и чтения

Интерактивный разбор того, как сообщение проходит путь от публикации до обработки и фиксации смещения.

1
Сервис-производитель
публикация батчей
2
Входной брокер
доступ и квоты
3
Маршрутизатор топика
hash(key)
4
Запись у лидера
append в журнал
5
Реплики и подтверждение
ISR/quorum
Путь публикации: продюсер отправляет событие во входной брокер, запись попадает в лидер партиции и подтверждается после выбранной политики репликации.

Путь публикации

  1. Ключ партиции задаёт домен порядка и распределение нагрузки между партициями.
  2. Политика подтверждения записи определяет компромисс между задержкой и сохранностью данных.
  3. Пакетирование и сжатие у продюсера часто критичны для пикового потока сообщений.
  4. Отставание репликации нужно отслеживать отдельно от отставания потребителей.

Семантика доставки и операционный контур

Выбор модели доставки - это всегда между простотой системы, вероятностью дублей и стоимостью обработки ошибок. Отдельно нужно понимать, как контролировать и где проходит граница между нормальным накоплением очереди и деградацией всего контура.

Семантика доставки

  • Не более одного раза: меньше дублей, но выше риск потери сообщения.
  • Как минимум один раз: рабочая база для большинства очередей, если обработчик сохраняет .
  • Почти ровно один раз: достигается не магией брокера, а сочетанием политики записи, дедупликации и аккуратных побочных эффектов.
  • Порядок почти всегда гарантируется внутри одной партиции, а не глобально по всему топику.

Операционный контроль

  • Отдельно мониторить глубину очереди, время подтверждения и отставание потребителей.
  • Ограничивать повторы и постепенно увеличивать паузу между ними, чтобы не создавать шторм повторной доставки.
  • Явно задавать срок хранения сообщений и правила повторного чтения.
  • Держать операционный регламент для карантина, ручного разбора и безопасного возврата сообщений в обработку.

Риски и типовые ошибки

  • Глобальный порядок: обещать единый порядок для всего топика и не объяснять цену такого решения.
  • Шторм повторов: не ограничивать число попыток и не разводить транзитные ошибки с безнадёжными.
  • Дублирующие эффекты: надеяться на брокер и забывать про идемпотентность обработчика.
  • Отсутствие карантина: не иметь отдельного контура для проблемных сообщений и ручного разбора.
  • Неверные метрики: путать скорость записи в брокер со временем до реального завершения обработки.

Что важно проговорить на интервью

  • Где именно сохраняется порядок: внутри партиции, внутри ключа или только на уровне отдельного потребителя.
  • Какая семантика доставки выбрана и почему бизнес выдержит именно такой уровень риска по дублям и потерям.
  • Когда фиксируется смещение и что происходит после падения обработчика между бизнес-эффектом и подтверждением обработки.
  • Как устроены повторные попытки, карантин, ручной разбор и безопасное повторное чтение.

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

  • Event-Driven Architecture - Показывает, как очередь сообщений связывается с маршрутизацией событий и асинхронными бизнес-процессами.
  • Kafka (book summary) - Глубже разбирает журнал с разбиением на партиции, группы потребителей и эксплуатационные компромиссы очередей.
  • System Design for Interviews and Beyond (краткий обзор) - Помогает структурировать интервью-ответы для систем обмена сообщениями с высокой пропускной способностью.
  • Консистентность и идемпотентность - Показывает, как строить идемпотентные обработчики и контролировать дубли при доставке как минимум один раз.
  • Chat System - Прикладной кейс реального времени, где очереди управляют веерной доставкой, подтверждениями и повторной отправкой.

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