Redis Pub/Sub против Rabbit MQ

Моя команда хочет перейти на архитектуру микросервисов. В настоящее время мы используем Redis Pub/Sub в качестве брокера сообщений для некоторых устаревших частей нашей системы. Мои коллеги считают естественным продолжать использовать Redis в качестве служебной шины, поскольку они не хотят тратить свое время на изучение нового продукта. Но, на мой взгляд, RabbitMQ (особенно с MassTransit) — лучший подход для микросервисов. Не могли бы вы сравнить Redis Pub/Sub с Rabbit MQ и привести аргументы в пользу Rabbit?


person Александр Сысоев    schedule 01.10.2018    source источник
comment
Возможно, вы захотите показать этот twitter.com/tastapod/status/1010462778207981569 своим коллегам, Дэн. Норт о лучшем программисте, которого я знаю.   -  person Alexey Zimarev    schedule 06.10.2018


Ответы (2)


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

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

Работа с публикацией/подпиской Redis на низком уровне клиента Redis может быть очень болезненной. Вы можете использовать такую ​​библиотеку, как ServiceStack, которая имеет более высокий уровень абстракции, чтобы сделать ее более управляемой.

Тем не менее, MassTransit имеет большую ценность по сравнению с обменом необработанными сообщениями через RMQ. Как только вы начнете делать что-то по-настоящему, независимо от того, какой транспорт вы решите использовать, вы столкнетесь с типичными проблемами, связанными с обменом сообщениями, такими как обработка ответов, планирование, длительные процессы, повторная доставка, очереди недоставленных сообщений и т. д. ядовитые очереди. MassTransit сделает все за вас. Ни Redis, ни клиент RMQ не доставят ничего из этого. Если ваша команда хочет потратить время на решение этих проблем в своем собственном коде, это больше похоже на изобретение велосипеда. Использование аргумента «нежелание изучать новый продукт» в этом контексте звучит немного странно, поскольку вместо того, чтобы приносить пользу продукту, разработчики хотят тратить свое время на решение проблем с инфраструктурой.

person Alexey Zimarev    schedule 01.10.2018

RabbitMQ гораздо более стабилен и надежен, чем Redis, для передачи сообщений.

RabbitMQ может удерживать и сохранять сообщение, если для него нет потребителя (например, ваш слушатель вышел из строя и т. д.).

У RabbitMQ есть разные способы связи: Pub/Sub, Queue. Которые вы можете использовать для балансировки нагрузки и т. д.

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

person BlackBrain    schedule 01.10.2018
comment
Большое спасибо! Что вы подразумеваете под RabbitMQ, который гораздо более стабилен и надежен? - person Александр Сысоев; 01.10.2018