В чем разница между RabbitMQ и Redis?
RabbitMQ – это брокер сообщений, а Remote Dictionary Server (Redis) – хранилище данных «ключ – значение» в памяти. Поскольку обе технологии можно использовать для создания системы рассылки сообщений о публикациях и подписках (издатель – подписчик), их можно сравнить. В современной облачной архитектуре приложения разделяют на небольшие независимые стандартные блоки – сервисы. Обмен сообщениями по модели Pub/Sub обеспечивает мгновенные уведомления о событиях для этих распределенных систем. RabbitMQ – это брокер распределенных сообщений, который собирает потоковые данные из нескольких источников и маршрутизирует их в разные пункты назначения для обработки. Redis поддерживает систему на основе технологии push, в рамках которой издатель рассылает сообщения всем подписчикам при возникновении события.
Принцип работы: RabbitMQ и Redis
И RabbitMQ, и Redis позволяют приложениям, микросервисам и программным компонентам обмениваться сообщениями различными способами.
Рабочий процесс RabbitMQ
RabbitMQ использует расширенный протокол очереди сообщений (AMQP) для безопасной отправки сообщений через брокеры сообщений. Брокер сообщений состоит из обменов и очередей. Процесс работает следующим образом.
- Производитель данных отправляет сообщения в RabbitMQ
- Биржа получает данные и направляет их в соответствующую очередь в соответствии с набором правил, называемых привязками
- Сообщение находится в очереди до тех пор, пока его не заберет потребитель RabbitMQ
Когда очередь достигает максимальной емкости, RabbitMQ запрещает производителям публиковать сообщения до тех пор, пока потребители не обработают непрочитанные. RabbitMQ также может восстанавливать сообщения в случае сбоя обмена до того, как потребители их прочитают.
Рабочий процесс Redis
Redis разработан как сервер, поддерживающий различные структуры данных, такие как списки, наборы, хэши и битовые массивы. Это позволяет клиентским приложениям хранить, извлекать и обрабатывать практически любые типы данных. Redis организует сохраненные данные в парах «ключ –значение», что обеспечивает структурированную схему подписки на клиентские приложения.
Например, вы можете разделить данные электронной коммерции на имя клиента, адрес электронной почты, купленные товары и ключи обратной связи. После этого вы можете опубликовать соответствующие данные для каждого ключа.
Redis позволяет обмениваться короткими сообщениями о сроках хранения в реальном времени. Это работает следующим образом:
- Производитель данных отправляет сообщения в Redis
- Узел Redis проверяет ключ сообщения для выявления заинтересованных подписчиков
- Redis доставляет сообщение всем подключенным подписчикам
Обработка сообщений: RabbitMQ и рассылка сообщений о публикациях и подписках
Как Redis, так и RabbitMQ предоставляют приложениям механизмы модели «издатель – подписчик» для распространения сообщений в облачной среде. Однако обработка сообщений значительно отличается.
Подробнее о рассылке сообщений о публикациях и подписках »
Доставка сообщений
RabbitMQ использует расширенный протокол очереди сообщений (AMQP) для поддержки сложной логики маршрутизации. Он может доставлять сообщения из точки в точку или от одного производителя многим потребителям. Независимо от методов, все потребители отправляют производителю сообщения с подтверждением успешного чтения. Если производитель не получает подтверждения, он повторяет несколько попыток через разные промежутки времени.
Между тем Redis просто отправляет сообщения всем подключенным подписчикам; это не гарантирует доставку сообщений. Для получения входящих сообщений подписчик должен быть подключен к серверу Redis. Если Redis отключится, возможно, система не сможет получить все сообщения.
Размер сообщения
RabbitMQ может доставлять большие сообщения без существенного снижения производительности. Первоначально сервис был разработан для обработки сообщений размером до 2 ГБ, но позже ограничение было уменьшено до 128 МБ.
И наоборот, Redis не устанавливает ограничения на хранимые сообщения, но при отправке сообщений размером более 1 МБ наблюдается заметная задержка. Поэтому разработчики обычно используют Redis в качестве кэша для обработки таких наборов данных, как строки, хэши, списки и наборы.
Постоянство сообщений
RabbitMQ поддерживает постоянные и временные сообщения. Когда сообщение отправляется в постоянную очередь, данные записываются в постоянное хранилище сразу же после их поступления. RabbitMQ также записывает временные сообщения на диск, но только если они превышают емкость памяти.
С другой стороны, Redis по умолчанию не поддерживает постоянные сообщения. Разработчики должны включить функцию Redis Database (RDB), позволяющую делать периодические снимки оперативной памяти и сохранять их на диске. Включение сохранения данных в Redis увеличивает накладные расходы на операции с данными, что замедляет доставку сообщений. Другой альтернативой является использование таких методов восстановления, как асинхронная репликация.
Шифрование сообщений
RabbitMQ использует SSL для шифрования данных, передаваемых между производителями, брокерами и потребителями. Шифрование сообщений помогает организациям защитить конфиденциальную информацию и снизить риски, связанные с данными.
Между тем Redis изначально не поддерживает SSL. Только Redis версии 6.0 и более поздних предоставляют поддержку SSL. Чтобы включить SSL, разработчики должны получить SSL-сертификаты из кластера Redis и создать сертификат клиента для своей базы данных.
Производительность: RabbitMQ и рассылка сообщений о публикациях и подписках
Различия в обработке сообщений влияют на производительность RabbitMQ и Redis в разных сценариях.
Скорость
Redis намного быстрее RabbitMQ, так как обрабатывает сообщения в основном в памяти. Однако существует риск потери непрочитанных сообщений в случае сбоя сервера Redis.
Напротив, при работе в постоянном режиме RabbitMQ ожидает подтверждения от каждого потребителя, прежде чем отправлять следующее сообщение. RabbitMQ также требует дополнительного времени для хранения сообщений на диске, что снижает среднюю скорость обмена сообщениями.
Для сравнения: Redis может отправлять до десятков миллионов сообщений в секунду, а RabbitMQ обрабатывает до десятков тысяч сообщений в секунду.
Доступность
Кластеризация, которая позволяет системам брокеров сообщений реплицировать узлы, в RabbitMQ и Redis обрабатывается по-разному.
С помощью RabbitMQ несколько узлов, содержащих соответствующие данные и функции, реплицируются в кластер. Однако очереди сообщений не реплицируются между этими узлами, которые имеют общие одноранговые отношения. Для этого разработчики используют специальную очередь сообщений, поддерживающую репликацию.
Между тем, кластеры Cluster – это функция, представленная в более поздних версиях Redis. Она копирует данные из каждого ведущего узла одному или нескольким подписчикам. Когда ведущий узел выходит из строя, подписчик берет на себя ответственность за доставку сообщений с высокой степенью доступности.
Когда использовать: RabbitMQ и рассылка сообщений о публикациях и подписках
RabbitMQ превосходит Redis во многих областях, но это не значит, что RabbitMQ – лучшая система рассылки сообщений для всех приложений.
Redis лучше работает в корпоративных приложениях, требующих обработки данных в реальном времени и кэширования с малой задержкой. Благодаря хранилищу данных в памяти и поддержке различных структур данных Redis подходит для низкоуровневых вычислений данных. Например, финансовые учреждения используют Redis для кэширования транзакционных данных для обнаружения мошенничества в реальном времени.
В то же время, если вам нужен специализированный брокер сообщений для микросервисов с асинхронными механизмами взаимодействия для поддержки построения кода и систем, выбирайте RabbitMQ. RabbitMQ также больше подходит, чем Redis, для передачи больших файлов между приложениями. Например, для системы, которая должна надежно передавать данные между многими микросервисами, можно выбрать RabbitMQ. Система выиграет от отказоустойчивости RabbitMQ, большей емкости обработки файлов и гарантированных механизмов доставки сообщений.
Краткое описание различий: RabbitMQ и рассылка сообщений о публикациях и подписках
RabbitMQ |
Redis |
|
Доставка сообщений |
Гарантированная доставка сообщений. Поддерживает сложную логику. |
Не гарантирует доставку сообщений. Требуется активное подключение от подписчиков. |
Размер сообщения |
Размер сообщения ограничен 128 МБ. Может обрабатывать большие сообщения. |
Нет ограничений на количество сообщений, но производительность при отправке больших сообщений (более 1 МБ) снижается. |
Постоянство сообщений |
Поддерживает постоянные и временные сообщения. Записывает постоянные сообщения на диск. |
По умолчанию не поддерживает постоянные сообщения. |
Шифрование сообщений |
Поддерживает шифрование SSL. |
SSL-шифрование доступно в Redis версии 6.0 и выше. |
Скорость |
До десятков тысяч сообщений в секунду. |
До миллионов сообщений в секунду. |
Доступность |
Создает несколько одноранговых узлов в кластере. |
Использует модель «лидер – последователь» в кластеризации. |
Как AWS может помочь в выполнении ваших требований к RabbitMQ и Redis?
Amazon Web Services (AWS) предоставляет управляемые сервисы для масштабного запуска систем брокеров сообщений с открытым исходным кодом. Вы можете легко настроить сервисы по модели «издатель – подписчик» (pub/sub) и интегрировать их с другими сервисами AWS.
Ниже указаны предложения AWS, которые можно использовать с Redis и RabbitMQ.
- Amazon MemoryDB позволяет повысить надежность доставки сообщений в Redis. Вы можете запускать потоковые данные с большим количеством параллельных операций для поддержки активности пользователя и обработки миллионов запросов в день на мультимедийные и развлекательные приложения
- Вы можете использовать Amazon MQ для предоставления услуг брокерам RabbitMQ без трудоемких настроек. Он шифрует сообщения RabbitMQ при передаче и хранении, что помогает обеспечить высокую доступность конвейеров данных в зонах доступности AWS.
Вместо Redis или RabbitMQ для создания системы рассылки сообщений о публикациях и подписках также можно использовать простой сервис уведомлений Amazon (SNS). Вы можете отправлять сообщения из своих приложений клиентам или другим приложениям масштабируемым и экономически эффективным способом.
Amazon SNS предлагает несколько функций:
- высокую пропускную способность для обмена push-уведомлениями между распределенными системами, микросервисами и бессерверными приложениями на основе событий по модели «многие ко многим»;
- шифрование сообщений и конфиденциальность трафика;
- распределение возможностей по категориям AWS, таким как аналитика, вычисления, контейнеры, базы данных, Интернет вещей (IoT), машинное обучение, безопасность и хранилище.
Начните рассылку сообщений о публикациях и подписках, а также работу с Redis и RabbitMQ на AWS, создав аккаунт уже сегодня.