Giorno 17 di 100 giorni di fondazione - Iniziare con l'accodamento dei messaggi
concetti basilari
Cos'è una coda di messaggi?
MQ: coda dei messaggi
Una coda che archivia i messaggi Quando si consumano i messaggi, questi vengono consumati in ordine (prima in coda, prima a uscire).
Vengono chiamate le due parti coinvolte nella messaggistica produttore Econsumatore , il produttore è responsabile dell'invio dei messaggi e il consumatore è responsabile dell'elaborazione dei messaggi.
A cosa serve la coda dei messaggi?
Tre vantaggi familiari:
Elaborazione asincrona: l'elaborazione asincrona viene implementata tramite la coda dei messaggi Dopo aver inviato il messaggio corrispondente alla coda dei messaggi, il risultato viene restituito immediatamente, riducendo i tempi di risposta e migliorando l'esperienza dell'utente. Successivamente, il sistema consuma il messaggio.
Ritaglio del picco/limitazione della corrente: prima archivia i messaggi di transazione generati dall'elevata concorrenza in un breve periodo di tempo nella coda dei messaggi, quindi il servizio back-end consumerà lentamente questi messaggi in base alle proprie capacità, evitando così di sconfiggere direttamente il back -fine servizio.
Riduci l'accoppiamento del sistema: non ci sono chiamate dirette tra i moduli, quindi l'aggiunta o la modifica dei moduli avrà un impatto minimo sugli altri moduli.
Scenari applicativi aziendali:
Implementare le transazioni distribuite: una delle soluzioni per le transazioni distribuite sono le transazioni MQ, supportate dalla maggior parte dei MQ.Le transazioni consentono alle applicazioni di streaming di eventi diconsumare, elaborare, produrreL'intero processo del messaggio è definito come un'operazione atomica.
Garanzia di sequenza: adatta a scenari che presentano requisiti rigorosi sull'ordine dei dati, supportato dalla maggior parte di MQ.
Elaborazione ritardo/tempistica: il messaggio non verrà consumato immediatamente dopo l'invio, ma verrà consumato dopo un tempo specificato.
Elaborazione del flusso di dati: per gli enormi flussi di dati generati da sistemi distribuiti, come registri aziendali, dati di monitoraggio, comportamenti degli utenti, ecc., la coda dei messaggi può raccogliere questi dati in tempo reale o in batch e importarli nel motore di elaborazione dei big data per ottenere un'elaborazione efficiente dei dati Gestione ed elaborazione del flusso.
Quali problemi comporta l'utilizzo delle code di messaggi?
Disponibilità del sistema ridotta: La disponibilità del sistema è ridotta in una certa misura. Perché dici questo? Prima di entrare in MQ, non devi pensare alla perdita del messaggio o al riaggancio di MQ, ecc. Tuttavia, dopo aver introdotto MQ, devi pensarci!
Maggiore complessità del sistema: Dopo esserti iscritto a MQ, devi assicurarti che i messaggi non vengano consumati ripetutamente, gestire la perdita di messaggi, garantire l'ordine di consegna dei messaggi e altri problemi!
Problemi di coerenza: Ho menzionato sopra che la coda dei messaggi può ottenere un'implementazione asincrona e l'asincrona portata dalla coda dei messaggi può effettivamente migliorare la velocità di risposta del sistema. Ma cosa succederebbe se il vero consumatore del messaggio non lo consumasse correttamente? Ciò porterà a incoerenze dei dati!
Code di messaggi comuni
Kafka
Kafka è una versione open source di LinkedInPiattaforma di streaming distribuita, è diventato un progetto di alto livello di Apache. All'inizio veniva utilizzato per elaborare enormi log e in seguito si è gradualmente sviluppato in una coda di messaggi completa e ad alte prestazioni.
Una piattaforma di streaming ha tre funzioni chiave:
coda di messaggi: Pubblica e iscriviti ai flussi di messaggi Questa funzione è simile a una coda di messaggi, motivo per cui anche Kafka è classificata come coda di messaggi.
Archiviazione persistente con tolleranza agli errori dei flussi di messaggi record: Kafka persisterà i messaggi sul disco, evitando efficacemente il rischio di perdita dei messaggi.
Piattaforma di elaborazione streaming: Per elaborare i messaggi quando vengono pubblicati, Kafka fornisce una libreria completa di elaborazione dei flussi.
RazzoMQ
RocketMQ è una piattaforma di elaborazione dati in tempo reale "messaggi, eventi, flussi" nativa del cloud e open source di Alibaba. Si basa su Kafka ed è diventata un progetto Apache di alto livello.
Funzionalità principali di RocketMQ (estratte dal sito Web ufficiale di RocketMQ):
Nativo del cloud: nato con il cloud, cresciuto con il cloud, scalabilità elastica illimitata, compatibile con K8
Throughput elevato: throughput garantito a livello di trilioni, che soddisfa sia scenari di microservizi che di big data.
Elaborazione del flusso: fornisce un motore di elaborazione del flusso leggero, altamente scalabile, ad alte prestazioni e ricco di funzionalità.
Grado finanziario: stabilità di grado finanziario, ampiamente utilizzata nei collegamenti delle transazioni principali.
Architettura minimalista: zero dipendenze esterne, architettura Shared-nothing.
Ecologico: si connette perfettamente con gli ecosistemi circostanti come microservizi, elaborazione in tempo reale e data lake.
ConiglioMQ
RocketMQ è una piattaforma di elaborazione dati in tempo reale "messaggi, eventi, flussi" nativa del cloud e open source di Alibaba. Si basa su Kafka ed è diventata un progetto Apache di alto livello.
Funzionalità principali di RocketMQ (estratte dal sito Web ufficiale di RocketMQ):
Nativo del cloud: nato con il cloud, cresciuto con il cloud, scalabilità elastica illimitata, compatibile con K8
Throughput elevato: throughput garantito a livello di trilioni, che soddisfa sia scenari di microservizi che di big data.
Elaborazione del flusso: fornisce un motore di elaborazione del flusso leggero, altamente scalabile, ad alte prestazioni e ricco di funzionalità.
Grado finanziario: stabilità di grado finanziario, ampiamente utilizzata nei collegamenti delle transazioni principali.
Architettura minimalista: zero dipendenze esterne, architettura Shared-nothing.
Ecologico: si connette perfettamente con gli ecosistemi circostanti come microservizi, elaborazione in tempo reale e data lake.
Pulsare
Pulsar è una piattaforma di flusso di messaggi distribuita nativa del cloud di prossima generazione. È stata originariamente sviluppata da Yahoo ed è diventata un progetto Apache di alto livello.
Pulsar integra messaggistica, archiviazione e elaborazione funzionale leggera. Adotta un design di architettura di separazione di elaborazione e archiviazione per supportare multi-tenant, archiviazione persistente e replica dei dati tra più regioni con sala macchine. Ha una forte coerenza, un throughput elevato e una bassa latenza e prestazioni elevate. Le funzionalità di archiviazione dei dati in streaming come la scalabilità sono considerate la migliore soluzione per la trasmissione, l'archiviazione e l'elaborazione di messaggi in streaming in tempo reale nell'era nativa del cloud.
Le caratteristiche principali di Pulsar sono le seguenti (estratte dal sito ufficiale):
È la prossima generazione di piattaforma per il flusso di messaggi distribuiti nativa del cloud.
Una singola istanza di Pulsar supporta nativamente più cluster e può completare senza problemi la replica dei messaggi tra cluster nelle sale computer.
Latenza di rilascio e latenza end-to-end estremamente basse.
Si espande perfettamente a oltre 1 milione di argomenti.
API client semplice che supporta Java, Go, Python e C++.
Molteplici modalità di sottoscrizione per argomenti (esclusivo, condiviso e failover).
La consegna dei messaggi è garantita tramite il meccanismo di archiviazione persistente dei messaggi fornito da Apache BookKeeper.
Il leggero framework di elaborazione serverless Pulsar Functions implementa l'elaborazione dei dati nativa del flusso.
Pulsar IO, un framework di connettori serverless basato sulle funzioni Pulsar, semplifica lo spostamento dei dati dentro e fuori Apache Pulsar.
L'archiviazione a livelli può scaricare i dati dall'archiviazione a caldo all'archiviazione a freddo/a lungo termine (come S3, GCS) quando i dati diventano obsoleti.
Confronto tra i MQ sopra indicati:
Direzione del contrasto
riepilogo
Portata
Il throughput di ActiveMQ e RabbitMQ a 10.000 livelli (ActiveMQ ha le prestazioni peggiori) è un ordine di grandezza inferiore a RocketMQ e Kafka a 100.000 livelli o addirittura a milioni di livelli.
Disponibilità
Tutti possono raggiungere un'elevata disponibilità. ActiveMQ e RabbitMQ sono entrambi basati sull'architettura master-slave per ottenere un'elevata disponibilità. RocketMQ si basa su un'architettura distribuita. Anche Kafka è distribuito, con più copie di un dato. Se alcune macchine si guastano, non si verificherà alcuna perdita o indisponibilità dei dati.
Tempestività
RabbitMQ è sviluppato sulla base di Erlang, quindi ha forti capacità di concorrenza, prestazioni estremamente buone, latenza molto bassa, raggiunge il livello dei microsecondi e altri sono a livello di ms.
Supporto funzionale
Pulsar ha funzioni più complete e supporta multi-tenancy, modelli di consumo multipli e modalità di persistenza. È una piattaforma di flusso di messaggi distribuiti nativa del cloud di prossima generazione.
Messaggio perso
ActiveMQ e RabbitMQ hanno una possibilità di perdita molto bassa, mentre Kafka, RocketMQ e Pulsar possono teoricamente raggiungere una perdita pari a 0.
Riassumere:
Sebbene RabbitMQ sia leggermente inferiore a Kafka, RocketMQ e Pulsar in termini di throughput, poiché è sviluppato sulla base di Erlang, ha forti capacità di concorrenza, prestazioni estremamente buone e una latenza molto bassa, raggiungendo il livello dei microsecondi. Tuttavia, poiché RabbitMQ è sviluppato sulla base di Erlang, poche aziende nazionali hanno la forza di effettuare ricerche e personalizzazioni a livello di codice sorgente Erlang. Se lo scenario aziendale non prevede requisiti di concorrenza troppo elevati (100.000 o un milione di livelli), RabbitMQ potrebbe essere la tua prima scelta tra queste code di messaggi.
RocketMQ e Pulsar supportano una forte coerenza e possono essere utilizzati in scenari con elevati requisiti di coerenza dei messaggi.
RocketMQ è prodotto da Alibaba ed è un progetto Java open source. Possiamo leggere direttamente il codice sorgente e quindi personalizzare il MQ della nostra azienda. RocketMQ è stato testato negli scenari aziendali reali di Alibaba.
Le caratteristiche di Kafka sono in realtà molto evidenti, ovvero fornisce solo meno funzioni principali, ma fornisce un throughput ultra elevato, latenza a livello di ms, disponibilità e affidabilità estremamente elevate e la distribuzione può essere ampliata arbitrariamente. Allo stesso tempo, è meglio per Kafka supportare un numero inferiore di argomenti per garantire un throughput elevatissimo. L'unico svantaggio di Kafka è che i messaggi possono essere consumati ripetutamente, il che avrà un impatto minimo sulla precisione dei dati. Nel campo dei Big Data e della raccolta dei log, questo leggero impatto può essere ignorato. Questa funzionalità è naturalmente adatta ai Big Data -calcolo del tempo e raccolta dei log. Se si tratta di elaborazione in tempo reale, raccolta di registri e altri scenari nel campo dei big data, l'uso di Kafka è lo standard del settore e non c'è assolutamente alcun problema. La comunità è molto attiva e sicuramente non sarà pornografica, per non parlare di questo è quasi uno standard de facto in questo campo in tutto il mondo.
Un semplice sondaggio sul MQ autosviluppato a livello aziendale