Qual è la differenza tra RabbitMQ e Redis?

RabbitMQ è un broker di messaggi, mentre Remote Dictionary Server (Redis) è un archivio dati chiave-valore in memoria. Tuttavia, le due tecnologie si possono mettere a confronto perché è possibile utilizzarle entrambe per creare un sistema di messaggistica pubblicazione-abbonamento (pub/sub). Nella moderna architettura cloud, le applicazioni sono disaccoppiate in blocchi più piccoli e indipendenti chiamati servizi. La messaggistica pub/sub fornisce notifiche istantanee di eventi per questi sistemi distribuiti. RabbitMQ è un broker di messaggi distribuito che raccoglie dati di streaming da più sorgenti per indirizzarli a diverse destinazioni per l'elaborazione. Redis supporta un sistema basato su push in cui l'editore distribuisce messaggi a tutti gli abbonati quando si verifica un evento.

Maggiori informazioni su Redis »

Come funzionano RabbitMQ e Redis

Sia RabbitMQ che Redis consentono ad applicazioni, microservizi e componenti software di scambiare messaggi in diversi modi. 

Flusso di lavoro RabbitMQ

RabbitMQ utilizza l'Advanced Message Queuing Protocol (AMQP) per inviare messaggi in modo sicuro tramite broker di messaggi. Un broker di messaggi è costituito da exchange e code. Il processo funziona in questo modo:

  1. Il produttore di dati invia messaggi a RabbitMQ
  2. Un exchange riceve i dati e li indirizza alla rispettiva coda in base a un insieme di regole chiamate associazioni
  3. Il messaggio rimane in coda finché un utente di RabbitMQ non lo raccoglie

Quando la coda raggiunge la capacità massima, RabbitMQ impedisce ai produttori di pubblicare messaggi finché i consumatori non gestiscono i messaggi non letti. RabbitMQ può anche ripristinare i messaggi se si verificano problemi con l'exchange prima che gli utenti li leggano.

Flusso di lavoro di Redis

Redis è progettato come un server di strutture dati che supporta varie strutture di dati come elenchi, set, hash e bitmap. Consente alle applicazioni client di archiviare, recuperare ed elaborare quasi tutti i tipi di dati. Redis organizza i dati archiviati in coppie chiave-valore, il che fornisce una disposizione strutturata per l'abbonamento delle applicazioni client.

Ad esempio, è possibile separare i dati dell'e-commerce in nome del cliente, e-mail, articoli acquistati e chiavi di feedback. Dopodiché, è possibile pubblicare i dati pertinenti per ogni chiave. 

Redis consente lo scambio in tempo reale di brevi messaggi di conservazione. Funziona in questo modo:

  1. Il produttore di dati invia messaggi a Redis
  2. Il nodo Redis controlla la chiave del messaggio per identificare gli abbonati interessati
  3. Redis consegna il messaggio a tutti gli abbonati connessi

 

Differenze nella gestione dei messaggi tra RabbitMQ e Redis

Sia Redis che RabbitMQ forniscono meccanismi di pubblicazione/abbonamento (pub/sub) per le applicazioni per distribuire messaggi nell'ambiente cloud. Tuttavia, la gestione dei messaggi è molto diversa.

Ulteriori informazioni sulla messaggistica pub/sub »

Recapito dei messaggi

RabbitMQ utilizza l'Advanced Message Queuing Protocol (AMQP) per supportare una logica di routing complessa. Può inviare messaggi da punto a punto o da un produttore a molti consumatori. Indipendentemente dai metodi, tutti i consumatori inviano messaggi di conferma al produttore per confermare la corretta lettura. Se il produttore non riceve una conferma, effettua vari tentativi a intervalli diversi. 

Al contempo, Redis invia semplicemente i messaggi a tutti gli abbonati connessi; non garantisce la consegna dei messaggi. Un abbonato deve essere connesso al server Redis per ricevere i messaggi in arrivo. Se Redis si disconnette, l'abbonato potrebbe non essere in grado di recuperare tutti i messaggi. 

Dimensioni del messaggio

RabbitMQ è in grado di inviare messaggi più grandi senza subire un calo sostanziale delle prestazioni. Inizialmente è stato progettato per gestire messaggi di dimensioni fino a 2 GB, ma in seguito il limite è stato ridotto a 128 MB.

Al contrario, Redis non definisce un limite per i messaggi archiviati, ma presenta una notevole latenza per i messaggi di dimensioni superiori a 1 MB. Pertanto, gli sviluppatori utilizzano comunemente Redis come cache per elaborare set di dati come stringhe, hash, elenchi e set.

Persistenza dei messaggi

RabbitMQ supporta messaggi persistenti e messaggi transitori. Quando invia messaggi alla coda persistente, scrive i dati nell'archivio permanente non appena arrivano. RabbitMQ scrive anche messaggi transitori sul disco, ma solo se superano la capacità della memoria. 

Dall'altra parte, Redis non supporta i messaggi persistenti per impostazione predefinita. Gli sviluppatori devono abilitare una funzionalità chiamata Redis Database (RDB) per catturare snapshot periodici della RAM e archiviarli su disco. L'abilitazione della persistenza dei dati su Redis aggiunge un sovraccarico alle operazioni sui dati, rallentando il recapito dei messaggi. Un'alternativa consiste nell'utilizzare tecniche di ripristino come la replica asincrona.

Crittografia dei messaggi

RabbitMQ utilizza SSL per crittografare i dati in transito tra produttori, broker e consumatori. La crittografia dei messaggi aiuta le organizzazioni a proteggere le informazioni riservate e a ridurre i rischi relativi ai dati.

Diversamente, Redis non supporta SSL in modo nativo. Solo la versione Redis 6.0 e successive forniscono il supporto SSL. Per abilitare SSL, gli sviluppatori devono ottenere i certificati SSL dal cluster Redis e creare un certificato client per il proprio database.

Prestazioni di RabbitMQ e Redis

Le differenze nella gestione dei messaggi influiscono sulle prestazioni di RabbitMQ e Redis in contesti diversi.

Velocità

Redis è molto più veloce di RabbitMQ, poiché elabora i messaggi principalmente in memoria. Tuttavia, esiste il rischio di perdere i messaggi non letti in caso di guasto del server Redis. 

Al contrario, quando opera in modalità persistente, RabbitMQ attende i riconoscimenti da parte di ciascun utente prima di inviare il messaggio successivo. RabbitMQ impiega anche più tempo per archiviare i messaggi su disco, il che rallenta la velocità media di scambio dei messaggi. 

A titolo di confronto, Redis può inviare fino a decine di milioni di messaggi al secondo, mentre RabbitMQ gestisce fino a decine di migliaia di messaggi al secondo. 

Disponibilità

Il clustering, che consente ai sistemi di broker di messaggi di replicare i nodi, viene gestito diversamente in RabbitMQ e in Redis.

In RabbitMQ, più nodi che contengono dati e funzioni rilevanti vengono replicati in un cluster. Tuttavia, le code di messaggi non vengono replicate su questi nodi, che condividono una relazione tra pari. A tale scopo, gli sviluppatori utilizzano una speciale coda di messaggi che supporta la replica. 

Al contempo, Redis Cluster è una funzionalità introdotta nelle versioni successive di Redis. Copia i dati da ogni nodo leader a uno o più follower. Quando si verifica un problema con un nodo leader, il follower interviene per garantire la consegna dei messaggi ad alta disponibilità. 

Quando usare RabbitMQ e quando usare Redis

RabbitMQ supera Redis in molte aree, ma ciò non significa che RabbitMQ sia il miglior sistema di distribuzione dei messaggi per tutte le applicazioni. 

Redis funziona meglio nelle applicazioni aziendali che richiedono l'elaborazione dei dati in tempo reale e la memorizzazione nella cache a bassa latenza. Grazie al suo archivio dati in memoria e al supporto per diverse strutture di dati, Redis è adatto per eseguire calcoli di dati di basso livello. Ad esempio, gli istituti finanziari utilizzano Redis per memorizzare nella cache i dati transazionali per consentire il rilevamento delle frodi in tempo reale. 

Al contempo, RabbitMQ è la scelta ideale se si necessita di un broker di messaggi dedicato per microservizi con meccanismi di comunicazione asincroni per supportare la creazione di codice e sistemi. RabbitMQ è anche più adatto di Redis per il trasferimento di file di grandi dimensioni tra applicazioni. Ad esempio, un sistema che deve inviare dati in modo affidabile tra molti microservizi potrebbe scegliere RabbitMQ. Il sistema trarrà vantaggio dalla tolleranza agli errori di RabbitMQ, dalla maggiore capacità di gestione dei file e dai meccanismi di consegna dei messaggi garantiti.

Riepilogo delle differenze tra RabbitMQ e Redis

 

RabbitMQ

Redis

Recapito dei messaggi

Consegna dei messaggi garantita. Supporta una logica complessa.

Non garantisce la consegna dei messaggi. Richiede una connessione attiva da parte degli abbonati.

Dimensioni del messaggio

Dimensione del messaggio limitata a 128 MB. Può gestire messaggi di grandi dimensioni. 

Nessun limite di messaggi, ma le prestazioni peggiorano per i messaggi di grandi dimensioni (superiori a 1 MB).

Persistenza dei messaggi

Supporta messaggi persistenti e transitori. Scrive messaggi persistenti su disco.

Non supporta i messaggi persistenti per impostazione predefinita.

Crittografia dei messaggi

Supporta la crittografia SSL.

Crittografia SSL disponibile nella versione Redis 6.0 e successive. 

Velocità

Fino a decine di migliaia di messaggi al secondo.

Fino a milioni di messaggi al secondo.

Disponibilità

Crea più nodi peer-to-peer in un cluster.

Utilizza il modello leader-follower nel clustering. 

In che modo AWS può aiutarti con i tuoi requisiti relativi a RabbitMQ e Redis?

Amazon Web Services (AWS) fornisce servizi gestiti per eseguire i sistemi di broker di messaggi open source su larga scala. È possibile configurare facilmente i servizi di pubblicazione/abbonamento (pub/sub) e integrarli con altri servizi AWS.

Ecco le soluzioni AWS che puoi usare con Redis e RabbitMQ:

  • Con Amazon MemoryDB per Redis puoi aggiungere durabilità quando recapiti messaggi su Redis. Puoi eseguire feed di dati in streaming ad alta concorrenza per acquisire l'attività degli utenti e supportare milioni di richieste al giorno per le applicazioni media e di intrattenimento.
  • Con Amazon MQ puoi effettuare il provisioning dei tuoi broker RabbitMQ senza lunghe configurazioni. Crittografa i messaggi RabbitMQ in transito e a riposo, il che aiuta a garantire pipeline di dati ad alta disponibilità nelle zone di disponibilità AWS.

Al posto di Redis o RabbitMQ, puoi anche utilizzare Amazon Simple Notification Service (SNS) per creare un sistema di messaggistica pub/sub. Potrai inviare messaggi direttamente dalle tue applicazioni ai clienti o ad altre applicazioni in modo scalabile ed economicamente vantaggioso.

Amazon SNS offre diverse funzioni:

  • Messaggistica con velocità di trasmissione effettiva elevata, basata su push e molti a molti tra sistemi distribuiti, microservizi e applicazioni serverless basate su eventi
  • Crittografia dei messaggi e privacy del traffico
  • Funzionalità di fanout tra le categorie AWS, come analisi, calcolo, container, database, Internet delle cose (IoT), machine learning (ML), sicurezza e archiviazione

Inizia a utilizzare la messaggistica pub/sub, Redis e RabbitMQ su AWS creando un account oggi stesso.

Passaggi successivi con AWS