Брокеры сообщений
Брокеры сообщений
Брокер сообщений представляет собой почтальон между программами.
Одна программа отдаёт ему письмо (сообщение), брокер хранит его, а потом отдаёт другой программе, когда она будет готова.
Представим себе почтовое отделение:
- мы приходим на почту, отдаём письмо (мы - производитель);
- почта (брокер) кладёт его в ячейку;
- наш друг (потребитель) заходит на почту, когда у него есть время, и забирает письмо.
Упрощённо, это как-то так:
# Программа А (производитель)
broker.send("order_queue", {"order_id": 123, "amount": 5000})
# Программа Б (потребитель)
message = broker.receive("order_queue")
process_order(message)
Что такое брокер сообщений?
Вы наверняка сталкивались с термином «брокер», используемом при сделках на бирже? А теперь представьте, что между системами нужно обеспечить асинхронную доставку большого количества сообщений, через посредника-агента.
Брокер сообщений — это программное обеспечение или система, которая управляет обменом данными между приложениями, сервисами или системами. Некоторые считают брокеры сообщений как архитектурные шаблоны в распределённых системах, но основна задача брокеров - преобразовать сообщение источника в сообщение приёмника.
Брокер выступает в роли посредника, который принимает сообщения от «производителей» (producers) и передаёт их «потребителям» (consumers). Это позволяет организовать асинхронную связь между компонентами системы.
Производитель отправляет сообщение в брокер и продолжает свою работу, не дожидаясь ответа от потребителя, а брокер гарантирует доставку сообщений даже в случае сбоев (например, через очереди и подтверждения) и позволяет распределять нагрузку между несколькими потребителями, что упрощает масштабирование.
Среди брокеров различают RabbitMQ (модель очередей), Apache Kafka (модель топиков), ActiveMQ (классический брокер сообщений с поддержкой JMS), IBM MQ и Redis (который также используется для кэширования).
Потребители нуждаются в данных для выполнения своих функций - учёт, отслеживание, вычисления, мониторинг, проверки. Данные передаются как раз в виде структурированного пакета данных - сообщения. В RabbitMQ/IBM MQ/ActiveMQ их так и называют - «сообщения», а в Apache Kafla называются «топики».
Отличия между брокерами RabbitMQ и Kafka
Мы рассмотрим RabbitMQ и Kafka по отдельности. Для начала давайте разграничим их в виде таблицы отличий:
| Критерий | RabbitMQ | Kafka |
|---|---|---|
| Архитектура | Основана на очередях (queues). | Основана на топиках (topics) с партициями (partitions). |
| Модель работы | Производитель → Обменник (Exchange) → Очередь → Потребитель. | Производитель → Топик → Партиция → Потребитель. |
| Упорядоченность | Гарантируется порядок в пределах одной очереди. | Гарантируется порядок только внутри одной партиции. |
| Состояние данных | Сообщения хранятся до доставки или истечения времени хранения. | Сообщения хранятся на диске в течение заданного времени (например, 7 дней). |
| Производительность | До десятков тысяч сообщений/секунду. | До миллионов сообщений/секунду. |
| Задержки | Низкие задержки благодаря прямой передаче через очереди. | Задержки выше из-за партиционирования и логической структуры. |
| Ресурсы | Требует меньше ресурсов для небольших нагрузок. | Требует больше памяти и дискового пространства. |
| Масштабируемость | Масштабируется за счёт добавления брокеров, но сложнее настроить кластер. | Легко масштабируется за счёт добавления брокеров и партиций. |
| Гарантия доставки | Гарантированная доставка каждого сообщения. | Доставка "хотя бы один раз" (at-least-once delivery). |
| Маршрутизация | Поддерживает сложные правила маршрутизации через обменники (exchanges). | Маршрутизация ограничена топиками и партициями. |
| Веб-интерфейс | Встроенный веб-интерфейс (RabbitMQ Management). | Нет встроенного интерфейса, но можно использовать сторонние инструменты. |
| Сценарии использования | Фоновые задачи, микросервисы, системы уведомлений. | Потоковая аналитика, логирование, мониторинг, IoT. |
| Примеры задач | Отправка email, обработка заказов, рассылка уведомлений. | Сбор и анализ логов, мониторинг событий, обработка данных в реальном времени. |
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Интеграция - это когда две программы умеют разговаривать друг с другом и делать общее дело. Выбор модели взаимодействия определяет архитектурные свойства системы — отзывчивость, устойчивость к сбоям, сложность отладки и масштабируемость. Интеграционные потоки часто визуализируются в виде диаграмм последовательностей (sequence diagrams) или BPMN-схем. В промышленных платформах (например, BPMSoft, ELMA365, Apache NiFi) такие потоки… Что такое интеграционная авторизация, API-ключи и как с этим работать. В распределённых системах границы стираются. Saga-паттерн, например, моделирует долгую транзакцию через цепочку локальных транзакций и компенсирующих действий. Каждый шаг Saga — это отдельная… В корпоративной среде RPC лег в основу таких технологий, как — CORBA (Common Object Request Broker Architecture) — платформенно-независимый стандарт от OMG, DCOM (Distributed Component Object Model)… Веб-сервис - это программа, которая живёт на сервере и отвечает на запросы других программ через интернет. Мы её не видим (нет никакой кнопки или картинки), но наше приложение с ней разговаривает. Любая информационная система, будь то база данных, веб-сервис, операционная система или программный модуль, существует не в изоляции. Её предназначение — реагировать на внешние и внутренние стимулы,… REST — это стиль, а не строгий протокол, может быть реализован на любом языке программирования, легко масштабируется, хорошо документируется. Пути могут содержать — параметры пути - /users/123, параметры строки запроса (или просто параметры запроса) - ?sort=datelimit=10 Мы уже изучали асинхронность, поэтому можем уже понять, что асинхронная коммуникация — это способ взаимодействия, при котором отправитель не ждёт немедленного ответа от получателя. Это особенно важно… Реактивные взаимодействия фокусируются на обмене событиями в режиме реального времени. Системы реагируют на события по мере их возникновения, обеспечивая непрерывный поток данных.Интеграция
Типы взаимодействия между системами
Интеграционные потоки данных
Авторизация в интеграционных сценариях
Управление сессиями в распределённых системах
История развития интеграционных технологий
Веб-сервисы
Модель запрос-ответ в сетевом взаимодействии
API - интерфейсы прикладного программирования
HTTP как основа веб-интеграций
Асинхронная коммуникация между сервисами
Реактивные системы и потоки данных