Какие типы очередей используются в системах с важной свежей информацией и почему
Что проверяют
Умеете ли вы начать с требования, а не со структуры данных: что для этой системы значит «свежая» информация и можно ли терять промежуточные значения. Следом обычно спрашивают, что будет, если потребитель отстал и в очереди накопился хвост из тысяч сообщений.
Как отвечать
Сначала разделите данные на два вида. Состояние (котировка, координаты курьера, остаток на складе) важно в последней версии, старое значение после нового бесполезно. События (платёж, заказ, списание) важны все и по порядку, терять их нельзя. От этого зависит выбор.
Для состояния:
- ограниченная очередь с вытеснением старых: в RabbitMQ
x-max-lengthс поведениемdrop-head, оно и так стоит по умолчанию. При переполнении отбрасываются самые старые сообщения; - TTL сообщений:
x-message-ttlвыкидывает то, что пролежало дольше допустимого, а просроченное можно отправить в dead letter exchange для разбора; - последнее значение по ключу: в Kafka это топик с
cleanup.policy=compact, где по каждому ключу со временем остаётся последняя запись; - LIFO и конфляция: обработка с конца или схлопывание нескольких обновлений одного объекта в одно перед отправкой.
Для событий нужна FIFO с гарантией доставки и порядком внутри ключа (партиция в Kafka), а свежесть обеспечивается масштабированием потребителей и мониторингом отставания (consumer lag).
Очередь с приоритетом решает другую задачу: срочное вперёд несрочного. Свежесть она не гарантирует, внутри одного приоритета хвост остаётся.
В требованиях зафиксируйте допустимую задержку, поведение при переполнении и правило для потребителя: событие с версией или временем старше текущего состояния игнорируется.
Где спотыкаются
Называют приоритетную очередь ответом на свежесть. Приоритет не спасает от устаревшего сообщения, если потребитель просто не успевает.
Применяют вытеснение и TTL к событиям, где важна каждая запись. Потерянный платёж хуже устаревшей цены.
Путают структуру данных в памяти и брокер. Интервьюер обычно ждёт разговора про Kafka или RabbitMQ, их настройки и мониторинг, а не про Deque из учебника.