Баннер мобильный (3) Пройти тест

RabbitMQ: что это такое и как работает

Разбираемся, зачем нужен брокер сообщений

Разбор

28 мая 2024

Поделиться

Скопировано
RabbitMQ: что это такое и как работает

Содержание

    Приложения и системы постоянно взаимодействуют друг с другом, поэтому существует много инструментов, которые обеспечивают бесперебойную работу сложных распределенных систем. Один из них — RabbitMQ. В этой статье мы расскажем, как он работает и зачем нужен. А еще — сравним с наиболее популярным аналогом, Apache Kafka.

    Что такое RabbitMQ и для чего используется

    RabbitMQ — это брокер сообщений, который разработали в 2007 году на языке Erlang. 

    Понять, что такое брокер, можно, представив обычную почту. Чтобы отправить письмо, не нужно передавать его прямо в руки получателю. Достаточно просто отнести его в почтовое отделение или опустить в почтовый ящик: вы можете быть уверены, что почтальон доставит письмо адресату. По сути RabbitMQ — это почтовый ящик, почтовое отделение и почтальон — посредник, который принимает, хранит и передает данные. 

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

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

    RabbitMQ
    Источник

    Особенности RabbitMQ

    RabbitMQ поддерживает несколько протоколов, включая AMQP (Advanced Message Queuing Protocol), MQTT (Message Queuing Telemetry Transport), STOMP (Simple Text Oriented Messaging Protocol), что делает его универсальным решением для широкого спектра задач. 

    RabbitMQ гарантирует доставку сообщений получателю. Для этого используется механизм подтверждения доставки (Acknowledgements), который позволяет отправителю сообщения быть уверенным в том, что адресат его получил. Если получатель не подтверждает получение сообщения, RabbitMQ автоматически повторяет отправку.

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

    Для чего используют RabbitMQ

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

    Также брокер используется для:

    • Фоновой обработки данных. RabbitMQ позволяет асинхронно обрабатывать большие объемы данных, что особенно полезно для задач, требующих значительных вычислительных ресурсов или времени на обработку. Например, генерации отчетов или обработки больших объемов данных.
    • Интеграции приложений и микросервисов. RabbitMQ служит посредником между различными приложениями и микросервисами, позволяя им обмениваться данными и командами без прямого взаимодействия друг с другом. Это упрощает разработку и поддержку системы, делая ее более гибкой и масштабируемой.
    • Потоковой передачи данных в реальном времени. RabbitMQ поддерживает потоковую передачу данных, что делает его идеальным инструментом для создания систем, работающих в реальном времени, таких как системы аналитики или финансовые системы.

    RabbitMQ — это open-source-проект, который можно развернуть как локально, так и в облачной среде. На локальной машине RabbitMQ можно установить и настроить внутри корпоративной сети или на отдельном сервере. Это позволяет организациям полностью контролировать брокер сообщений и его настройки без передачи данных через внешние сети.

    В облачной среде RabbitMQ также можно развернуть с использованием облачных провайдеров, таких как Yandex Cloud, Timeweb Cloud, VK Cloud.

    Как работает RabbitMQ

    RabbitMQ состоит из нескольких основных компонентов: очередь (Queue), сообщение (Message), обменник (Exchange), биндинг (Binding), паблишер (Publisher), получатель (Consumer).

    Очередь (Queue) — это структура данных, где хранятся сообщения до того, как получатель их обработает. Очередь может быть временной или постоянной, в зависимости от потребностей приложения.

    Сообщение (Message) — это единица данных, которая передается от издателя к подписчику через очередь. Сообщения могут быть разных типов и форматов.

    Обменник (Exchange) — это компонент, который принимает сообщения от издателей и направляет их в соответствующие очереди.

    Биндинг (Binding) — это связь между обменником и очередью, которая определяет, какие сообщения в какую очередь будут направлены.

    Продюсер (Producer) — это приложение, которое публикует сообщения в обменник.

    Получатель (Consumer) — это приложение, которое получает сообщения из очереди и обрабатывает их.

    Работа RabbitMQ происходит следующим образом:

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

    RabbitMQ или Apache Kafka: в чем разница?

    RabbitMQ — популярный брокер, но не единственный, есть и другие популярные решения: например, ActiveMQ, IBM MQ и LavinMQ. Нередко RabbitMQ сравнивают и с Apache Kafka — платформой для передачи и обработки событий в реальном времени. 

    Представим разницу между этими инструментами в виде таблицы:

    RabbitMQ
     Apache Kafka
    Сложность
    Удобный интерфейс, легкая установка, в том числе в Docker, легкая настройка
    Сложность запуска и настройки, отсутствие веб-интерфейса
    Специфика инструмента
    Брокер сообщений, заточен под работу с отдельными сообщениями
    Платформа для передачи и обработки событий, заточена под работу с потоками сообщений
    Работа с очередями
    Пуш-модель получения сообщений: RabbitMQ сам отправляет информацию клиенту без запроса со стороны последнего
    Пулл-модель получения сообщений: клиент сам запрашивает у Apache Kafka новые данные, инициируя соединение и получая только те сообщения, которые были запрошены 
    Гарантия доставки сообщения
    RabbitMQ ждет от получателя подтверждение, что сообщение доставлено, или сигнал о неудачной доставке. Во втором случае сообщение остается в очереди до тех пор, пока не будет доставлено
    Kafka не отслеживает, получил ли подписчик сообщение, платформа просто хранит его в течение установленного промежутка времени. При этом она гарантирует, что сообщения находятся в той же последовательности, в которой поступили
    Хранение данных
    Есть хранение данных, можно посмотреть историю сообщений
    Нет хранения данных, сообщения удаляются по истечении определенного, заранее заданного, времени
    Протокол
    RabbitMQ поддерживает несколько стандартизированных протоколов: AMQP, MQTT, STOMP и др. Это позволяет заменить его на любой брокер на основе AMQP
    Kafka использует пользовательский протокол поверх TCP/IP для связи между приложениями и кластером. Вы не сможете так просто удалить или заменить эту платформу, потому что она единственная реализует данный протокол 
    Применение
    RabbitMQ сосредотачивается на надежной и гибкой передаче сообщений между различными частями системы. Это делает его хорошим выбором для архитектур, где требуется точная доставка сообщений, обработка структурированных данных и контроль над обменом сообщениями между компонентами.
    RabbitMQ подходит для нетривиальных бизнес-процессов и позволяет настраивать сложные системы с тысячами источников и приемников сообщений 
    Где может применяться: системы бронирования билетов, логистические программы
    Основное назначение Apache Kafka — централизованный сбор, обработка, безопасное хранение и передача сообщений от разных сервисов. Обычно систему выбирают, когда нужно работать с большим количеством неструктурированных данных.
    Где может применяться: системы аналитики, финансовые системы, социальные сети, онлайн-игры

    Кратко о том, что такое RabbitMQ

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

    RabbitMQ состоит из нескольких основных компонентов: очередь (Queue), сообщение (Message), обменник (Exchange), биндинг (Binding), паблишер (Publisher), получатель (Consumer).

    Нередко RabbitMQ сравнивают с другим инструментом — Apache Kafka. Выбор между RabbitMQ и Kafka зависит от конкретных требований проекта. RabbitMQ подходит для проектов, требующих надежной доставки сообщений и гибкой маршрутизации, в то время как Kafka лучше подходит для проектов, требующих высокой пропускной способности и возможности сохранять сообщения в течение длительного времени.

    Полезные ссылки

    1. Официальный сайт RabbitMQ
    2. ClickHouse — зачем нужна эта база данных и как она работает
    3. Кто такой DevOps-инженер?

    Разбор

    Поделиться

    Скопировано
    1 комментарий
    Комментарии
    • FolFix

      Теперь понятно, спасибо!