Message Queue
August 14, 2023

Брокер сообщений Redis

Изначально Redis был разработан как база данных и кэш для временного хранения данных в оперативной памяти. Но в версию Redis 2.0. создатели включили функцию PUBLISH/SUBSCRIBE, которая позволила использовать Redis в качестве брокера сообщений.

Сегодня Redis широко применяется для поддержки чатов и сервисов обмена сообщениями, а также для отправки сообщений по модели pub / sub. В этой статье мы рассмотрим, как работает брокер сообщений и как его можно использовать.

Зачем нужен брокер сообщений

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

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

Основные компоненты брокера сообщений:

  • Producer отвечает за отправку сообщений в брокер, который затем доставляет их подписчикам.
  • Consumer получает и обрабатывает сообщения из брокера сообщений.
  • Queue представляет собой модель отправки и получения сообщений, где отправители помещают сообщения в очередь, а получатели извлекают их из очереди. Каждое сообщение обрабатывается только одним получателем.
  • Topic — это модель отправки и получения сообщений, где producer отправляет сообщения на конкретную тему, а получатели, подписанные на эту тему, получают эти сообщения.

Модели обмена сообщениями при помощи брокера сообщений

Реализовать обмен сообщениями можно несколькими способами. Мы рассмотрим три основных.

Обмен сообщениями «Point-to-Point» (P2P)

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

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

Опубликовать/подписаться

При использовании шаблона pub/sub сообщения распространяются между всеми пользователями, подписанными на общую тему. Это полезно для реализации механизмов уведомлений или распределения независимых задач. Причем Redis поддерживает различные типы сообщений, включая строки, хэши, списки и множества, что позволяет использовать его для передачи различных типов данных.

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

Гибридная модель обмена сообщениями

Данная модель объединяет вместе P2P и Pub/Sub. Сообщения могут быть отправлены как в определенную очередь, так и в канал с определенной тематикой, чтобы их получили все подписчики одновременно.

Преимущества брокера сообщений Redis

  • Поддержка различных структур данных: списки, строки с размером текста до 512 МБ, хэши для хранения списка полей и значений, растровые изображения, алгоритм HyperLogLogs и многое другое.
  • Высокая производительность позволяет приложениям проводить миллионы операций в секунду, поскольку, в отличие от других СУБД, Redis хранит данные в основной памяти сервера.
  • Сохранение данных даже в случае отказа сервера благодаря резервному копированию на определенный момент времени и механизму сохранения RDB, AOF в энергонезависимой памяти.
  • Универсальность и простота использования, так как Redis поддерживает множество языков программирования, в том числе C, Java, Python и Ruby, и поставляется со своими структурами данных.

Использование брокера сообщений Redis имеет ряд преимуществ. Например, относительно низкая задержка доставки сообщений, поддержка множества протоколов и форматов данных. Однако, Redis нельзя назвать универсальным брокером сообщений, поскольку он не гарантирует 100% доставку сообщений в случае сбоя или отказа узла.