Вопрос с собеса Middle/Senior на 280-350K 💸

На одном из собесов в продуктовой команде меня спросили: Кейс: Есть система-источник, которая публикует события быстрее, чем система-потребитель успевает их забирать и обрабатывать. Очередь растет, потребитель отстает, нагрузка нестабильная.

Вопрос: Какой механизм брокера сообщений является ключевым, чтобы события не потерялись в такой ситуации – даже если брокер перезапустится или упадет?

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

На собесах тут часто говорят про масштабирование, партиции, фильтрацию, приоритеты – и это все полезно.

Но главная идея в этом вопросе – персистентность сообщений.

Что должно происходить в брокере? Если потребитель не успевает обрабатывать: • Сообщения не должны пропадать • Они должны безопасно ждать своей очереди • Если брокер упал – это не должно превращаться в потерю данных

Это достигается за счет того, что каждое сообщение сохраняется на диск (persisted) до того, как брокер подтвердит его прием.

Проще говоря: 1. Источник отправляет сообщение 2. Брокер физически записывает его в хранилище 3. Только после этого сообщение считается принятым и может ждать обработки 4. Даже если брокер упадет – сообщение никуда не денется

Один раз видел, как на проде при обычной нагрузке терялись данные как раз из-за отсутствия персистентности 🤦‍♀️

А что с другими механизмами? • Маршрутизация на основе контента (Content-Based Routing) – решает, куда отправить сообщение, но не гарантирует, что оно сохранится • Фильтрация (Message Filtering) – выбирает, какие сообщения передавать, а какие нет • Преобразование протоколов (Protocol Transformation) – чаще про совместимость систем, а не про надежность

Все это полезно, но не решает главную проблему: как не потерять данные, когда очередь переполнена 🤔

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

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

Именно персистентность обеспечивает надежность системы в таких сценариях, все остальное – важные, но вторичные дополнения.

Даже если ты не глубоко работаешь с интеграциями, понимать такие базовые вещи полезно.

Это помогает задавать правильные вопросы архитекторам, разработчикам и заранее видеть риски, которые могут всплыть под нагрузкой или при сбоях 💞

Вопрос с собеса Middle/Senior на 280-350K 💸 | Сетка — социальная сеть от hh.ru