Quelle est la différence entre RabbitMQ et Redis ?

RabbitMQ est un agent de messages, tandis que Remote Dictionary Server (Redis) est un magasin de données clé-valeur en mémoire. Vous pouvez toutefois comparer les deux technologies, car vous pouvez les utiliser pour créer un système de messagerie par publication-abonnement (pub/sub). Dans l'architecture cloud moderne, les applications sont découplées en de plus petits composants indépendants appelés services. La messagerie Pub/Sub fournit des notifications d'événements instantanées pour ces systèmes distribués. RabbitMQ est un agent de messages distribué qui collecte des données de streaming provenant de plusieurs sources pour les acheminer vers différentes destinations pour traitement. Redis prend en charge un système basé sur le push dans lequel le diffuseur de publication distribue des messages à tous les abonnés lorsqu'un événement se produit.

En savoir plus sur Redis »

Comment fonctionnent-ils : RabbitMQ vs. Redis

RabbitMQ et Redis permettent aux applications, aux microservices et aux composants logiciels d'échanger des messages de différentes manières. 

Flux de travail RabbitMQ

RabbitMQ utilise le protocole AMQP (Advanced Message Queuing Protocol) pour envoyer des messages en toute sécurité via des agents de messages. Un agent de messages se compose d'échanges et de files d'attente. Le processus fonctionne comme suit :

  1. Le producteur de données envoie des messages à RabbitMQ
  2. Un échange reçoit des données et les achemine vers la file d'attente correspondante selon un ensemble de règles appelées liaisons
  3. Le message reste dans la file d'attente jusqu'à ce qu'un utilisateur de RabbitMQ le récupère

Lorsque la file d'attente atteint sa capacité maximale, RabbitMQ empêche les producteurs de publier des messages jusqu'à ce que les consommateurs gèrent les messages non lus. RabbitMQ peut également restaurer les messages si l'échange échoue avant que les consommateurs ne les lisent.

Flux de travail Redis

Redis est conçu comme un serveur de structure de données qui prend en charge diverses structures de données telles que des listes, des ensembles, des hachages et des bitmaps. Il permet aux applications clientes de stocker, de récupérer et de traiter presque tous les types de données. Redis organise les données stockées en paires clé-valeur, ce qui fournit un arrangement structuré pour l'abonnement des applications clientes.

Par exemple, vous pouvez séparer les données de commerce électronique en fonction du nom du client, de son adresse e-mail, des articles achetés et des clés de commentaires. Ensuite, vous publiez les données pertinentes pour chaque clé. 

Redis permet l'échange en temps réel de courts messages de rétention. Cela fonctionne comme suit :

  1. Le producteur de données envoie des messages à Redis
  2. Le nœud Redis vérifie la clé du message pour identifier les abonnés intéressés
  3. Redis transmet le message à tous les abonnés connectés

 

Gestion des messages : RabbitMQ contre Redis pub/sub

Redis et RabbitMQ fournissent tous deux des mécanismes de publication-d'abonnement (pub/sub) permettant aux applications de distribuer des messages dans l'environnement cloud. Cependant, la gestion des messages est très différente.

En savoir plus sur la messagerie par publication-abonnement »

Envoi de message 

RabbitMQ utilise le protocole AMQP (Advanced Message Queuing Protocol) pour prendre en charge une logique de routage complexe. Il peut transmettre des messages point à point ou d'un seul producteur à de nombreux consommateurs. Quelle que soit la méthode utilisée, tous les consommateurs envoient un message d'accusé de réception au producteur pour confirmer la réussite de leur lecture. Si le producteur ne reçoit pas de confirmation, il effectue plusieurs tentatives à des intervalles différents. 

Pendant ce temps, Redis envoie simplement des messages à tous les abonnés connectés ; cela ne garantit pas l'envoi des messages. Un abonné doit être connecté au serveur Redis pour recevoir les messages entrants. Si Redis est déconnecté, il se peut qu'il ne puisse pas récupérer tous les messages. 

Taille du message

RabbitMQ peut envoyer des messages plus volumineux sans subir de baisse substantielle des performances. Il a été initialement conçu pour gérer des messages d'une taille maximale de 2 Go, mais la limite a ensuite été réduite à 128 Mo.

À l'inverse, Redis ne définit pas de limite pour les messages stockés mais connaît une latence notable pour les messages supérieurs à 1 Mo. Ainsi, les développeurs utilisent généralement Redis comme cache pour traiter des jeux de données tels que des chaînes, des hachages, des listes et des jeux.

Persistance des messages

RabbitMQ prend en charge les messages persistants et les messages transitoires. Lorsqu'il envoie des messages à la file d'attente persistante, il enregistre les données dans la mémoire permanente dès leur arrivée. RabbitMQ écrit également des messages transitoires sur le disque, mais uniquement s'ils dépassent la capacité de la mémoire. 

En revanche, Redis ne prend pas en charge les messages persistants par défaut. Les développeurs doivent activer une fonctionnalité appelée Redis Database (RDB) pour prendre des instantanés périodiques de la RAM et les stocker sur disque. L'activation de la persistance des données sur Redis alourdit les opérations sur les données, ce qui ralentit l'envoi des messages. Une autre alternative consiste à utiliser des techniques de restauration telles que la réplication asynchrone.

Chiffrement des messages

RabbitMQ utilise le protocole SSL pour crypter les données en transit entre les producteurs, les courtiers et les consommateurs. Le chiffrement des messages aide les entreprises à protéger les informations confidentielles et à réduire les risques liés aux données.

Redis, quant à lui, ne prend pas en charge le SSL de manière native. Seules les versions 6.0 et ultérieures de Redis fournissent un support SSL. Pour activer le protocole SSL, les développeurs doivent obtenir des certificats SSL auprès du cluster Redis et créer un certificat client pour leur base de données.

Performances : RabbitMQ contre Redis pub/sub

Les différences de gestion des messages ont un impact sur les performances de RabbitMQ et Redis dans différents scénarios.

Rapidité

Redis est beaucoup plus rapide que RabbitMQ, car il traite les messages principalement en mémoire. Cependant, il existe un risque de perdre des messages non lus si le serveur Redis tombe en panne. 

En revanche, en mode persistant, RabbitMQ attend les accusés de réception de chaque consommateur avant d'envoyer le message suivant. RabbitMQ met également plus de temps à stocker les messages sur disque, ce qui ralentit la vitesse moyenne d'échange de messages. 

À titre de comparaison, Redis peut envoyer jusqu'à des dizaines de millions de messages par seconde, tandis que RabbitMQ gère jusqu'à des dizaines de milliers de messages par seconde. 

Disponibilité

La mise en cluster, qui permet aux systèmes agent de messages de répliquer des nœuds, est géré différemment dans RabbitMQ et Redis.

Avec RabbitMQ, plusieurs nœuds contenant des données et des fonctionnalités pertinentes sont répliqués dans un cluster. Toutefois, les files d'attente de messages ne sont pas répliquées sur ces nœuds, qui partagent une relation d'égal à égal. Pour ce faire, les développeurs utilisent une file d'attente de messages spéciale qui prend en charge la réplication. 

Par ailleurs, Redis Cluster est une fonctionnalité introduite dans les versions ultérieures de Redis. Il copie les données de chaque nœud leader vers un ou plusieurs abonnés. Lorsqu'un nœud leader tombe en panne, le suiveur prend le relais pour fournir un envoi de messages à haute disponibilité. 

Quand utiliser : RabbitMQ contre Redis pub/sub

RabbitMQ surpasse Redis dans de nombreux domaines, mais cela ne signifie pas que RabbitMQ est le meilleur système de distribution de messages pour toutes les applications. 

Redis fonctionne mieux dans les applications d'entreprise qui nécessitent un traitement des données en temps réel et une mise en cache à faible latence. Grâce à son stockage de données en mémoire et à la prise en charge de diverses structures de données, Redis est idéal pour effectuer des calculs de données de bas niveau. Par exemple, les institutions financières utilisent Redis pour mettre en cache les données transactionnelles afin de permettre la détection des fraudes en temps réel. 

En attendant, choisissez RabbitMQ si vous avez besoin d'un agent de messages dédié aux microservices doté de mécanismes de communication asynchrones pour soutenir la création de code et de système. RabbitMQ est également plus adapté que Redis pour transférer de gros fichiers entre applications. Par exemple, un système qui doit envoyer des données de manière fiable entre de nombreux microservices peut choisir RabbitMQ. Le système bénéficiera de la tolérance aux pannes de RabbitMQ, de sa capacité de gestion de fichiers accrue et de mécanismes d'envoi garanti de messages.

Résumé des différences : RabbitMQ contre Redis pub/sub

 

RabbitMQ

Redis

Diffusion de message

L'envoi garanti de messages. Supporte la logique complexe.

Ne garantit pas l'envoi des messages. Nécessite une connexion active de la part des abonnés.

Taille du message

La taille du message est limitée à 128 Mo. Peut gérer des messages volumineux. 

Aucune limite de messages, mais les performances se dégradent pour les messages volumineux (supérieurs à 1 Mo).

Persistance des messages

Prend en charge les messages persistants et transitoires. Écrit des messages persistants sur le disque.

Ne prend pas en charge les messages persistants par défaut.

Chiffrement des messages

Prends en charge le cryptage SSL.

Le cryptage SSL est disponible dans les versions 6.0 et supérieures de Redis. 

Rapidité

Jusqu'à des dizaines de milliers de messages par seconde.

Jusqu'à des millions de messages par seconde.

Disponibilité

Crée plusieurs nœuds poste à poste dans un cluster.

Utilise le modèle leader-suiveur dans la mise en cluster. 

Comment AWS peut-il vous aider à répondre à vos exigences en matière de RabbitMQ et Redis ?

Amazon Web Services (AWS) fournit des services gérés pour exécuter vos systèmes agent de messages open source à grande échelle. Vous pouvez configurer facilement vos services par publication-abonnement (pub/sub) et les intégrer à d'autres services AWS.

Voici les offres AWS que vous pouvez utiliser avec Redis et RabbitMQ :

  • Avec Amazon MemoryDB, vous pouvez renforcer la durabilité lorsque vous diffusez des messages sur Redis. Exécutez les flux de données de streaming à haute simultanéité pour ingérer l'activité des utilisateurs et prendre en charge des millions de demandes par jour pour les applications multimédias et de divertissement.
  • Utilisez Amazon MQ pour approvisionner vos courtiers RabbitMQ sans configurations chronophages. Il chiffre les messages RabbitMQ en transit et au repos, ce qui contribue à garantir la haute disponibilité des pipelines de données dans les zones de disponibilité AWS.

Au lieu de Redis ou RabbitMQ, vous pouvez également utiliser Amazon Simple Notification Service (Amazon SNS) pour créer un système de messagerie pub/sub. Vous pouvez envoyer directement des messages depuis vos applications aux clients ou à d'autres applications de manière évolutive et rentable.

Amazon SNS propose plusieurs fonctionnalités :

  • Messagerie à haut débit, basée sur un système Push, entre des systèmes distribués, des microservices et des applications sans serveur basées sur les événement
  • Chiffrement des messages et confidentialité du trafic
  • Capacités de diffusion en éventail entre les catégories AWS, telles que l'analyse, le calcul, les conteneurs, les bases de données, l'Internet des objets (IoT), le machine learning (ML), la sécurité et le stockage

Commencez à utiliser la messagerie pub/sub, Redis et RabbitMQ sur AWS en créant un compte dès aujourd'hui.

Prochaines étapes avec AWS

Commencer à créer avec RabbitMQ
Découvrir comment démarrer avec Amazon MQ