📨 Брокеры сообщений и базы данных
База данных — это склад: ты приходишь и смотришь, что лежит. Брокер — это почта: письма идут получателям, и склад не нужен, чтобы передать новость
Сравнение
| База данных | Брокер сообщений | |
|---|---|---|
| Хранит | Текущее состояние: заказ, клиент, остаток | Поток событий: заказ создан, оплата прошла |
| Кто читает | Любой, когда захочет, по запросу | Подписчики, по мере поступления |
| Зачем | Источник правды | Связать сервисы без прямых вызовов |
| Примеры | PostgreSQL, MySQL, MongoDB | Kafka, RabbitMQ |
Как это работает
- Сервис заказов записывает заказ в свою базу
- Он же отправляет событие «заказ создан» в брокер
- Сервис уведомлений, склад и аналитика читают событие каждый сам, в своём темпе
- Если склад упал на час, события дождутся его в брокере, и ничего не потеряется
- Сервис заказов об этом даже не знает, он не ждал ответа
Это и есть асинхронность: отправитель не ждёт получателя. Для менеджера это значит две вещи. Плюс: сервисы и команды меньше зависят друг от друга. Минус: нет мгновенной согласованности, данные в аналитике отстают на секунды или минуты, и с этим нужно работать в требованиях
Kafka и RabbitMQ
Kafka — журнал событий: сообщения хранятся по времени, их можно перечитать, подходит для больших потоков и аналитики. RabbitMQ — классическая очередь: сообщение доставлено и удалено, подходит для задач вроде «отправь письмо». Если команда спорит, что выбрать, это нормальный технический спор, и менеджеру достаточно понимать разницу на этом уровне
Пример из жизни
Интернет-магазин вызывал службу доставки напрямую при каждом заказе. Когда у доставки шли работы, заказы не оформлялись. Команда поставила брокер: заказ сохраняется и событие уходит в очередь, доставка забирает его, когда готова. Клиенты перестали видеть ошибки, а менеджер добавил в требования: статус доставки появляется в кабинете с задержкой до минуты
Важно запомнить
- База — состояние, брокер — события
- Асинхронность снимает зависимость сервисов, но даёт задержку данных
- Kafka — журнал, RabbitMQ — очередь, глубже на собесе менеджера обычно не спрашивают
Как ответить на собесе
Чем брокер отличается от базы данных?
«База хранит текущее состояние, это источник правды: вот заказ, вот его статус. Брокер передаёт события между сервисами: заказ создан, оплата прошла. Сервисы через брокер общаются асинхронно, отправитель не ждёт получателя, и если получатель временно недоступен, события его дождутся. Для проекта это значит меньше зависимостей между командами и выше устойчивость, но данные в соседних сервисах появляются с задержкой, и это я обычно прописываю в требованиях, чтобы заказчик не ждал мгновенности»