Il middleware dei messaggi è una tecnologia middleware composta da un meccanismo di trasmissione dei messaggi o modalità coda di messaggi, che utilizza un meccanismo di messaggistica efficiente e affidabile per lo scambio di dati indipendente dalla piattaforma e integra sistemi distribuiti basati sulla comunicazione dei dati. Attualmente, ci sono molti prodotti MQ nel settore, come RabbitMQ, ActiveMQ, ZeroMQ, ecc., che sono eccellenti middleware per messaggi, ma quale dovremmo scegliere nel progetto? Questo articolo valuta e confronta i seguenti prodotti della coda di messaggi: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis e memcacheQ
Digressione: qui possiamo prima pensare a una piccola domanda: "Perché abbiamo bisogno dei servizi di code di messaggi nelle applicazioni web?" ” Ad esempio, un gran numero di richieste di inserimento, aggiornamento e altre richieste arriva a MySQL contemporaneamente, portando direttamente a innumerevoli blocchi di righe e tabelle, e persino a troppe richieste alla fine, attivando così troppi errori di connessione. Utilizzando code di messaggi, possiamo elaborare le richieste in modo asincrono, alleviando la pressione sul sistema.
RabbitMQ È una coda di messaggi open source scritta in Erlang, che supporta molti protocolli: AMQP, XMPP, SMTP, STOMP, il che la rende molto pesante e più adatta allo sviluppo a livello enterprise. È un'implementazione leader del protocollo AMQP, che implementa un'architettura broker, il che significa che i messaggi possono essere messi in coda su un nodo centrale prima di essere inviati al client. C'è un buon supporto per il routing, il bilanciamento del carico o la persistenza dei dati. Questa caratteristica rende RabbitMQ facile da usare e distribuire, adatto a molti scenari come routing, bilanciamento del carico o persistenza dei messaggi, e può essere realizzato con poche righe di codice tramite code di messaggi. Tuttavia, questo lo rende meno scalabile e più lento perché il nodo centrale aumenta la latenza ed è maggiore dopo l'incapsulamento del messaggio. Per configurare RabbitMQ, devi installare l'ambiente Erlang sulla macchina target. Clicca per visualizzare questa immagine in una nuova finestra
? MQ(ZeroMQ) È conosciuto come il sistema di coda dei messaggi più veloce, specialmente per scenari di domanda ad alta produttività. È un sistema di messaggistica molto leggero sviluppato specificamente per scenari ad alta velocità di rendimento e bassa latenza e spesso presente in applicazioni nel mondo finanziario. Rispetto a RabbitMQ, ZeroMQ supporta molti scenari avanzati di messaggi, ma bisogna implementare singoli blocchi nel framework ZeroMQ (come socket o dispositivi, ecc.).
? MQ (ZeroMQ) può implementare code avanzate/complesse in cui RabbitMQ non è bravo, ma gli sviluppatori devono combinare da soli più framework tecnici, e la complessità tecnica rappresenta una sfida per l'applicazione efficace di questo MQ. ZeroMQ ha un modello unico non middleware in cui non è necessario installare ed eseguire un server di messaggi o middleware perché la tua applicazione svolgerà questo ruolo di servizio. Tutto ciò che devi fare è semplicemente fare riferimento alla libreria ZeroMQ, che può essere installata tramite NuGet, e puoi volentieri inviare messaggi tra le applicazioni. Tuttavia, ZeroMQ fornisce solo code non persistenti, il che significa che se la macchina si blocca, i dati andranno persi. Tra questi, Storm di Twitter utilizza ZeroMQ come trasmissione dei flussi di dati. ZeroMQ è molto flessibile, ma devi imparare il suo manuale di 80 pagine (se stai scrivendo di un sistema distribuito, assicurati di leggerlo).
ZeroMQ non ha architettura middleware e non richiede processi o esecuzioni di servizio. In effetti, il tuo endpoint applicativo svolge questo ruolo di servizio. Questo rende molto semplice il dispiegamento, ma la preoccupazione è che non hai nessun posto dove controllare se qualcosa va storto. Per quanto ne sappiamo, ZeroMQ offre solo code non persistenti. Puoi implementare le tue capacità di audit e recupero dati dove serve. Clicca per visualizzare questa immagine in una nuova finestra
MSMQ Questa è l'unica cosa considerata preziosa nel prodotto Microsoft. Se MSMQ può dimostrare di essere in grado di gestire questo tipo di compito, sceglierà di utilizzarlo. Il punto è che questa cosa non è complicata, nient'altro che ricevere e inviare; Presenta alcune limitazioni severe, come la dimensione massima del messaggio di 4MB. Tuttavia, può risolvere questi problemi collegandosi a software come MassTransit o NServiceBus. Clicca per visualizzare questa immagine in una nuova finestra
Jafka/Kafka Kafka (che distribuisce i messaggi tra diversi nodi) è un sistema MQ distribuito sviluppato e open-source da LinkedIn nel dicembre 2010, ed è ora un progetto di incubazione di Apache, un sistema distribuito di coda di messaggi Publish/Subscribe ad alte prestazioni cross-language, e Jafka è incubato sopra Kafka, che è una versione aggiornata di Kafka. Ha le seguenti caratteristiche: persistenza veloce, che può persistere i messaggi sotto il sovraccarico di sistema di O(1); Alta produttività, che può raggiungere una velocità di 10W/s su un server normale; Sistema completamente distribuito, Broker, Produttore e Consumatore supportano nativamente il sistema distribuito e raggiungono automaticamente un equilibrio complesso. Supporta il caricamento parallelo dei dati Hadoop, che è una soluzione valida per i dati di log e sistemi di analisi offline come Hadoop, ma con le limitazioni dell'elaborazione in tempo reale. Kafka unifica l'elaborazione dei messaggi online e offline tramite il meccanismo di caricamento parallelo di Hadoop, che è importante anche per il sistema studiato in questo argomento. Apache Kafka è un sistema di messaggistica molto leggero rispetto ad ActiveMQ e, oltre a ottime prestazioni, è anche un sistema distribuito che funziona bene. Clicca per visualizzare questa immagine in una nuova finestra
Apache ActiveMQ ActiveMQ si colloca a metà strada tra i due (RabbitMQ e ZeroMQ), simile a ZemoMQ, e può essere distribuito sia in modalità proxy che P2P. Simile a RabbitMQ, è facile implementare scenari avanzati e richiede un basso consumo. ActiveMQ è conosciuto come la spina dorsale del mondo Java. Ha una lunga storia ed è ampiamente utilizzata. È anche multipiattaforma, offrendo un punto di accesso naturale per i prodotti che non sono presenti sulla piattaforma Microsoft. Tuttavia, è possibile essere preso in considerazione solo se ha superato MSMQ. Per configurare ActiveMQ, devi installare l'ambiente Java sulla macchina di destinazione. Clicca per visualizzare questa immagine in una nuova finestra È importante notare che il prodotto di nuova generazione di ActiveMQ è Apollo, basato sul prototipo ActiveMQ ed è uno strumento di broker messaggi più veloce, affidabile e facile da mantenere. Apache definisce Apollo il server STOMP (Streaming Text Orientated Message Protocol) più veloce e robusto. Le caratteristiche di Apollo sono le seguenti: Sono supportati i protocolli Stomp 1.0 e Stomp 1.1 Argomenti e code Browser delle code Abbonamenti persistenti a tema Coda specchio Messaggistica affidabile Scadenza e scambio del messaggio Selettore di messaggi JAAS verificato Autorizzazione basata su ACL Supporto SSL/TLS e validazione dei certificati API di gestione REST Clicca per visualizzare questa immagine in una nuova finestra
Redis È un database NoSQL Key-Value, sviluppato e mantenuto attivamente, sebbene sia un sistema di archiviazione di database Key-Value, ma supporta funzioni MQ, quindi può essere utilizzato come un servizio di coda leggero. Per le operazioni di onboarding e out-queue di RabbitMQ e Redis, 1 milione di volte ciascuno, e il tempo di esecuzione viene registrato ogni 100.000 volte. I dati di test sono suddivisi in quattro diverse dimensioni: 128Byte, 512Byte, 1K e 10K. Gli esperimenti mostrano che, entrando nel team, le prestazioni di Redis sono superiori a quelle di RabbitMQ quando il confronto dei dati è piccolo, e se la dimensione dei dati supera i 10K, Redis è insopportabilmente lento. Quando usciva dal team, Redis mostrava ottime prestazioni indipendentemente dalla dimensione dei dati, mentre quelle di RabbitMQ erano molto inferiori a quelle di Redis.
MemcacheQ Coda di messaggi persistenti Memcacheq (MCQ per abbreviare) è una coda di messaggi leggera, con funzionalità MemcacheQ: 1 Semplice e facile da usare 2 Elaborazione veloce 3 Code multiple 4 Buone performance in concorrenza 5 Compatibile con il protocollo Memcache. Questo significa che basta installare l'estensione memcache, senza essere necessari plugin aggiuntivi. 6 È anche comodo da usare nel framework zend.
In definitiva, questi prodotti: 1. Entrambi hanno le proprie API client o supportano più linguaggi di programmazione; 2. C'è molta documentazione; 3. È stato fornito un supporto positivo. 4. ActiveMQ, RabbitMQ, MSMQ, Redis devono tutti avviare processi di servizio, che possono essere monitorati e configurati, mentre gli altri sono problematici 5. Tutti offrono una relativamente buona affidabilità (coerenza), scalabilità e bilanciamento del carico, e ovviamente prestazioni
Non voglio dire sciocchezze, qui sotto c'è allegato un insieme di risultati di test intercettati da Internet. Viene visualizzato il numero di messaggi inviati e ricevuti al secondo. L'intero processo ha generato un totale di 1 milione di messaggi da 1.000 messaggi. Il test è stato eseguito su una macchina indipendente con Windows Vista.
Come puoi vedere, ZeroMQ non è un livello come qualsiasi altro. Le sue prestazioni sono sorprendentemente elevate. Nonostante ciò, questo prodotto non fornisce persistenza dei messaggi, non può facilmente memorizzare e monitorare processi intermedi e richiede auto-audit e recupero dati, quindi non è soddisfacente in termini di facilità d'uso e HA. La conclusione è chiara: se vuoi che un'app invii messaggi il più rapidamente possibile, scegli ZeroMQ. È più prezioso quando non ti importa troppo di perdere certi messaggi per caso.
Il blogger in questo articolo spera (e non spera molto) di usare Rabbit, Rabbitmq ha un bundle integrato, se si forma un cluster, non c'è bisogno di preoccuparsi di problemi come il bilanciamento del carico, e si può configurare uno specchio di coda. Ma questo tipo di cosa è che dovrebbero esserci più test, e alla fine si ottiene un preferito, e tutto quello che ho sentito e letto su Rabbit mi fa pensare che dovrebbe essere la scelta migliore.
|