Messaggistica Pub/Sub nella cache: una panoramica
Questo paradigma di messaggistica di pubblicazione/sottoscrizione (Pub/Sub) fornisce un canale intermedio (denominato argomento) per lo scambio di messaggi tra più applicazioni senza alcuna conoscenza del mittente (editore) e del destinatario (abbonato). Un'applicazione dell'editore invia messaggi a un'applicazione dell'abbonato tramite gli argomenti.
Poiché tutti i modelli Pub/Sub richiedono un canale per la comunicazione, NCache funge da mezzo per gli argomenti in modo che l'editore pubblichi il messaggio sull'argomento. Gli abbonati ricevono il messaggio tramite l'argomento come notifica. Usando NCache come mezzo per gli argomenti garantisce un accoppiamento libero all'interno del modello e consente una maggiore astrazione, fornendo ulteriori vantaggi agli argomenti distribuiti.
Oltre a una cache distribuita, NCache fornisce anche un dedicato Cache di messaggistica Pub/Sub.
Consigli
Consigliamo una cache Pub/Sub dedicata per i seguenti motivi:
espulsione: se la cache contiene messaggi ed elementi della cache, l'eliminazione frequente per gli elementi della cache può anche rimuovere i messaggi prima di inoltrarli all'abbonato.
Trasferimento di Stato: Il trasferimento di stato aggiunge un costo a ciascuna operazione di elemento della cache. Poiché i messaggi vengono spesso pubblicati, inoltrati e scaduti, questa attività ricorrente può rivelarsi costosa perché attiva il trasferimento di stato.
Perché la messaggistica Pub/Sub è importante
Gli eventi in tempo reale richiedono la condivisione delle notifiche tra diverse applicazioni in architetture distribuite guidate dagli eventi. I modelli Pub/Sub consentono agli editori di condividere gli eventi con gli abbonati in modo che qualsiasi elaborazione desiderata avvenga al verificarsi di un evento di interesse.
Ad esempio, un gruppo di abbonati può essere interessato a informazioni sui dettagli della spedizione dell'ordine in modo che possano elaborarle per tracciare la consegna dell'ordine. Pertanto, si iscriveranno a un argomento che inoltra messaggi per i dettagli dell'ordine. Una volta che l'editore pubblica un messaggio sull'argomento, gli abbonati verranno avvisati e riceveranno il messaggio contenente i dettagli dell'ordine per l'ulteriore elaborazione da parte loro.
Componenti Pub/Sub
I componenti di base di NCache I modelli di abbonato editore sono elencati di seguito e discussi in dettaglio in seguito:
Argomento: Un luogo dove vengono pubblicati i messaggi.
Editore: Un'applicazione (applicazione Web, applicazioni desktop, microservizi) che pubblica messaggi in argomenti/argomenti
Subscriber: Un'applicazione interessata a ricevere messaggi da argomenti/argomenti.
Sottoscrizione: Un'entità di interesse creata per consentire a un abbonato di ricevere i messaggi previsti.
Messaggio: L'effettivo oggetto dati che l'editore invia e che gli abbonati ricevono tramite l'argomento.
Argomento
L'editore pubblica messaggi sull'argomento. Gli abbonati si iscrivono all'argomento per ricevere il messaggio. Questo argomento esiste in forma distribuita in NCache. Pertanto, la sua creazione avviene su tutti i nodi del cluster. Contiene l'archivio dei messaggi, che memorizza gli oggetti dati effettivi che l'editore pubblica in una coda. Mantiene inoltre internamente un elenco di tutti gli abbonati che vi si iscrivono e un elenco di editori.
I ITopic/Topic
interfaccia facilita creazione dell'argomento, argomento otteneree cancellazione dell'argomento. È anche possibile eliminare un argomento in modo asincrono per evitare l'attesa per la cancellazione di un argomento.
Note:
La natura distribuita degli argomenti e dei messaggi sottostanti migliora la scalabilità.
Una volta pubblicato un messaggio nell'argomento, viene attivato un evento, che l'argomento trasmette agli abbonati in base alla preferenza di opzione di consegna del messaggio in modo che possano ricevere il messaggio secondo necessità. La figura seguente illustra il ruolo di un argomento come canale intermediario per editori e abbonati:
Note:
In caso di disconnessione temporanea dell'abbonato e quindi di riconnessione automatica, tutte le informazioni relative a un argomento come le iscrizioni e le notifiche degli eventi di errore vengono registrate nuovamente nell'argomento senza alcuna interruzione da parte dell'abbonato.
Priorità dell'argomento
NCache introduce la priorità a livello di argomento che ti aiuta a stabilire la priorità degli argomenti con priorità più bassa e più alta in base alla loro importanza. Puoi creare argomenti con priorità più alta se devono pubblicare messaggi critici. Quindi, quei messaggi vengono consegnati per primi. Allo stesso modo, puoi creare argomenti con una priorità inferiore se pubblicano messaggi non importanti. La cache eliminerà prima questi messaggi.
Consigli
La priorità di un argomento può essere specificata solo al momento della creazione dell'argomento e non può essere modificata successivamente.
Puoi semplicemente impostare il priorità a livello di argomento al momento della creazione dell'argomento per dare priorità alla consegna dei messaggi critici.
Notifica di eliminazione dell'argomento
Tutti i messaggi e le relative meta-informazioni dalla cache vengono eliminati dopo l'eliminazione dell'argomento. Pertanto, l'abbonato e l'editore ricevono notifiche di questa eliminazione per i seguenti motivi:
- Gli abbonati potrebbero essere in attesa di messaggi in arrivo dall'argomento registrato. Una volta eliminato l'argomento, gli abbonati possono quindi gestirne l'esecuzione di conseguenza tramite la notifica degli eventi ed evitare uno stato di attesa infinito.
- L'editore può evitare di inviare messaggi a un argomento inesistente e gestire di conseguenza eventuali messaggi in sospeso e l'esecuzione futura.
Per ricevere la notifica di eliminazione dell'argomento, il file application si registra per l'evento OnTopicDeleted.
Pubblica messaggi su un argomento
Un editore può pubblicare messaggi su un argomento specificando il nome di un argomento. I messaggi possono essere pubblicati in modo asincrono e in blocco per migliorare le prestazioni dell'applicazione. Una cache partizionata distribuisce i messaggi nel cluster. Per l'instradamento dei messaggi, ogni messaggio ha un ID univoco chiamato MessageID
alla fine dell'editore e il codice hash di MessageID
determina il nodo del cluster in cui archiviare il messaggio.
Note:
NCache consente di pubblicare una grande quantità di messaggi in una singola chiamata per migliorare le prestazioni e l'utilizzo della memoria.
NCache consente a un editore di utilizzare le seguenti proprietà durante la pubblicazione dei messaggi.
Opzione di consegna del messaggio: Un editore può decidere se un messaggio verrà consegnato a un singolo abbonato o trasmesso a tutti gli abbonati al momento della pubblicazione utilizzando opzione di consegna del messaggio.
Scadenza del messaggio: L'editore può impostare la scadenza di un messaggio per controllare la durata di un messaggio nella cache. Abbiamo trattato la scadenza in modo più dettagliato nel Messaggi .
Notifica di mancata consegna del messaggio: Un editore può registrati per MessageDeliveryFailure per ricevere una notifica se un particolare messaggio non è stato recapitato. Questi scenari di mancato recapito sono elaborati in maggiore dettaglio nel Assegnazione del messaggio e consegna all'abbonamento .
Consigli
La notifica di mancata consegna dei messaggi è valida solo per i messaggi con scadenza.
- Notifica di eliminazione dell'argomento: Un editore può registrarsi notifica di eliminazione dell'argomento per impedire la pubblicazione indebita dei messaggi corrispondenti una volta eliminato l'argomento.
Iscriviti a un argomento
Una domanda di abbonato può iscriviti ai messaggi tematici registrandosi a un argomento di interesse tramite un abbonamento. In Pub/Sub, un abbonamento rappresenta un interesse di uno o più abbonati mostrato in un determinato argomento.
Note:
Nel caso in cui un nuovo nodo venga aggiunto al cluster di cache e venga attivato il trasferimento dello stato, tutte le sottoscrizioni insieme ai messaggi e ai dati della cache vengono replicati nel nuovo nodo.
NCache consente di iscriversi a un argomento fornendo un nome di argomento o un modello. Per ulteriori dettagli fare riferimento a Modalità di abbonamento. Inoltre, puoi anche impostare modalità di consegna dei messaggi come sincrono o asincrono durante la creazione di una sottoscrizione.
NCache fornisce più tipi di abbonamenti Pub/Sub che vengono discussi come segue.
Abbonamento e sue tipologie
Abbonamenti in NCache possono essere classificati nelle seguenti tipologie:
Durevole
Note:
Un abbonamento durevole è un abbonamento denominato.
In un abbonamento durevole, la cache garantisce che l'abbonato non perda alcun messaggio in caso di disconnessione dovuta all'arresto dell'applicazione/macchina, al riavvio dell'applicazione o a un errore di rete. Pertanto, gli abbonamenti durevoli non risentono della disconnessione e riconnessione dell'abbonato.
Note:
Gli abbonamenti durevoli non vengono eliminati a meno che l'abbonato non annulli correttamente l'abbonamento.
Se un abbonato viene disconnesso, i messaggi destinati a questo abbonato vengono archiviati su un server fino a quando l'abbonato non rientra o i messaggi non sono scaduti. Gli abbonamenti durevoli non vengono eliminati automaticamente alla disconnessione dell'abbonato a meno che l'abbonato non abbia annullato correttamente l'iscrizione.
Un abbonamento durevole è ulteriormente classificato come:
Condivisa: Un abbonamento condiviso e duraturo significa che più abbonati condividono un abbonamento denominato. I messaggi assegnati a una sottoscrizione condivisa vengono quindi bilanciati tra i sottoscrittori in modalità round robin. Anche se un abbonato lascia la rete, i messaggi continuano la loro consegna agli abbonati attivi. Quindi, se un abbonato lascia con garbo o bruscamente dopo un'assegnazione, i suoi messaggi assegnati vengono riassegnati ad altri abbonati attivi.
Consigli
Un abbonamento condiviso è supportato solo da un abbonamento durevole.
In un abbonamento condiviso, l'abbonamento rimarrà sull'argomento e non può essere annullato fino a quando tutti gli abbonati non avranno annullato l'iscrizione. Ciò significa che finché c'è anche un solo abbonato attivo, l'abbonamento rimarrà attivo.
- Esclusivo: Un abbonamento durevole esclusivo significa che c'è un solo abbonato attivo registrato per un abbonamento alla volta. Se un abbonato annulla l'iscrizione con grazia, l'abbonamento esclusivo può essere assegnato a un nuovo abbonato. Se un abbonato esce bruscamente, la nuova richiesta di abbonamento viene accettata dopo aver atteso un periodo di inattività. I messaggi assegnati rimangono sempre lì anche se non c'è abbonato.
Non durevole
In un abbonamento non durevole, gli abbonati ricevono solo i messaggi a lui destinati finché rimane connesso. Se l'abbonato lascia la rete, non riceverà alcun messaggio pubblicato durante il suo periodo di disconnessione. Un abbonamento non durevole è esclusivo per impostazione predefinita.
Consigli
Gli abbonati perderanno i messaggi se l'abbonato si riavvia.
Inoltre, gli abbonamenti non durevoli vengono automaticamente eliminati quando l'abbonato lascia la rete. Ciò significa che se l'abbonato si riconnette o stabilisce nuovamente la connessione, verrà considerato un nuovo abbonamento.
Scadenza dell'abbonamento durevole
Puoi impostare la scadenza per un abbonamento duraturo. Ad esempio, se non ci sono abbonati attivi per un periodo di tempo significativo. Qui gli abbonamenti scadranno dopo un determinato periodo di inattività. Quando un abbonamento durevole è scaduto, i messaggi assegnati a questo abbonamento vengono riassegnati in base al DeliveryOption
di questi messaggi.
Note:
Ogni volta che l'abbonato esegue un sondaggio o esegue qualsiasi altra attività, la scadenza dell'abbonamento viene reimpostata.
Gestione degli abbonamenti inattivi
Note:
Solo gli abbonamenti non durevoli sono contrassegnati come inattivi e ciò non si applica agli abbonamenti durevoli.
Nel caso in cui non vi sia un abbonato attivo rispetto a un abbonamento dopo aver atteso un determinato periodo di inattività, l'abbonamento è considerato scaduto. Se un abbonato rientra dopo la disconnessione durante il periodo di inattività, sarà in grado di ricevere i messaggi assegnati.
Consigli
Le sottoscrizioni inattive dovrebbero essere gestite per evitare il sovraccarico della memoria sul lato server.
Dopo aver atteso il periodo di inattività, l'abbonamento è scaduto ei messaggi assegnati verranno riassegnati ad altri abbonamenti. La riassegnazione dei messaggi dipende dall'opzione di consegna dei messaggi.
Se il messaggio assegnato all'abbonamento A aveva l'opzione di consegna impostata su TUTTI ed è già assegnato a un altro abbonamento B prima della scadenza dell'abbonamento A, la riassegnazione non sarà necessaria.
Se per il messaggio assegnato a un abbonamento è stata impostata un'opzione di consegna su QUALSIASI e l'abbonamento scade, i messaggi assegnati verranno sempre riassegnati a qualsiasi altro abbonamento.
Messaggio
Un messaggio contiene l'oggetto dati effettivo che viene inviato dall'editore e consegnato agli abbonati tramite l'argomento. Una volta che l'editore pubblica il messaggio sull'argomento, gli abbonati registrati vengono avvisati che è stato pubblicato un messaggio sul loro interesse. In caso di messaggi multipli, questi vengono archiviati in sequenza all'interno della coda di un particolare argomento.
Note:
Lo stesso messaggio può essere assegnato a più argomenti. Questo è identificato in modo univoco tramite un ID generato automaticamente.
Qui discuteremo ulteriormente l'assegnazione dei messaggi al meccanismo di sottoscrizione, consegna dei messaggi e riconoscimento.
Assegnazione del messaggio e consegna all'abbonamento
Inizialmente, i messaggi non sono assegnati sul lato server. Tutti gli abbonamenti ricevono messaggi in base al DeliveryOption
. Quando si verifica l'assegnazione di un abbonamento, l'abbonato riceve una notifica. Quindi l'abbonato implementa un meccanismo di polling per recuperare in blocco più messaggi, per ridurre l'overhead lato server. Dopo aver ricevuto i messaggi, l'abbonato invia la conferma ei messaggi sono considerati consegnati.
Note:
I messaggi vengono archiviati nell'argomento, se non è presente alcun abbonato che possa ricevere i messaggi. I messaggi vengono assegnati e recapitati al primo abbonato non appena si iscrive all'argomento.
Opzione di consegna del messaggio
Un editore deve farlo specificare l'opzione di consegna del messaggio per decidere se il messaggio verrà recapitato ad un singolo abbonato oppure trasmesso a tutti gli abbonati al momento della pubblicazione. È importante notare che la definizione di consegna riuscita dipende dall'opzione di consegna specificata.
Le due opzioni di consegna e i corrispondenti criteri di consegna di successo sono discussi come segue:
Tutti: Tutti gli abbonati registrati ricevono messaggi. Un messaggio viene cancellato quando tutti gli abbonati lo riconoscono.
anno: Ogni singolo abbonato registrato riceve i messaggi. Se l'abbonato assegnato non invia la conferma, i messaggi vengono riassegnati all'abbonato successivo. Se inviano una conferma, i messaggi vengono considerati consegnati con successo.
Note:
Se un messaggio viene recapitato correttamente in base all'opzione di recapito specificata, viene rimosso dalla cache.
Archiviazione e distribuzione dei messaggi
Di seguito sono riportati gli aspetti importanti dell'archiviazione e della distribuzione dei messaggi nella cache:
I messaggi vengono distribuiti tra i nodi in base alle topologie.
Per le topologie Partition-Replica e Partitioned viene utilizzata la distribuzione basata su hash.
Per la topologia replicata, i messaggi vengono replicati su tutti i nodi della cache del cluster. Tuttavia, il nodo coordinatore è responsabile della manipolazione dei messaggi.
Per la topologia Mirror, i messaggi vengono pubblicati sul nodo attivo e quindi replicati di conseguenza sul nodo passivo.
Se l'archivio dei messaggi sta per essere rimosso, viene registrato un evento che indica un archivio dei messaggi completo e l'inizio dell'eliminazione.
I messaggi hanno un sovraccarico sulla memoria cache. Pertanto, la dimensione del messaggio deve essere presa in considerazione durante il calcolo della dimensione della cache.
Comportamento del messaggio
Qui discutiamo il comportamento previsto dei messaggi nei seguenti casi:
In svuota cache: I messaggi vengono rimossi insieme agli elementi della cache una volta svuotata la cache.
Al riavvio della cache: Come per svuotare la cache, il contenuto della cache viene cancellato al riavvio della cache. Ciò include anche tutti gli argomenti ei messaggi in essi contenuti.
Sfratto: If lo sfratto è abilitato su una cache Pub/Sub, i dati verranno rimossi prima e quindi i messaggi verranno rimossi.
Crittografia e compressione: If crittografia ed compressione è configurato a livello di cache, si applica anche al payload del messaggio dell'argomento.
Trasferimento statale: In caso di trasferimento di stato, quando i messaggi si spostano su un altro nodo del cluster, il nodo in cui il messaggio viene infine archiviato è responsabile della consegna.
Notifica di mancata consegna del messaggio
Consigli
Gli abbonati ricevono una notifica di mancata consegna quando un messaggio con scadenza scade prima della consegna a qualcuno di loro.
Nel caso in cui un messaggio non venga assegnato o consegnato a nessuno degli abbonati, viene considerato un fallimento. Può accadere quando l'abbonato non esiste o è inattivo a causa di un problema tecnico della rete. In uno scenario del genere, un editore può registrare la notifica di mancata consegna del messaggio. È importante notare che la notifica di mancata consegna è solo per i messaggi con scadenza. La consegna di un messaggio è considerata non riuscita quando un messaggio scade prima della consegna a uno qualsiasi degli abbonati
Note:
Se sono presenti più editori su un argomento, la notifica di errore verrà consegnata a qualsiasi editore attivo che si è registrato per la notifica di errore.
Scadenza del messaggio
Simile agli elementi della cache, un editore può impostare la scadenza per i messaggi. I messaggi scadranno dalla cache non appena sarà trascorso l'intervallo di scadenza e utilizzeranno lo stesso meccanismo di intervallo di pulizia.
La scadenza di un messaggio determina il tempo in cui persiste nella cache. Indipendentemente dalla consegna, se un messaggio non viene consegnato, verrà rimosso dopo la scadenza. Se un messaggio viene recapitato correttamente prima della scadenza, viene rimosso dalla cache senza attendere la scadenza.
Messaggi ordinati
NCache ora supporta i messaggi ordinati in cui la sequenza dei messaggi viene mantenuta sul lato client. Un editore può pubblicare messaggi ordinati specificando un nome di sequenza per un blocco di messaggi. Quindi i messaggi ordinati vengono consegnati agli abbonati nello stesso ordine in cui sono pubblicati. La stringa di sequenza dovrebbe essere la stessa per una catena di messaggi ordinati. Utilizzando la stringa di sequenza, tutti i messaggi risiedono sullo stesso nodo utilizzando il file Affinità di posizione meccanismo.
Note:
Modalità di consegna sincrona può essere utilizzato per i messaggi ordinati.
Di seguito sono riportate le caratteristiche importanti dei messaggi ordinati:
I messaggi di un publisher con la stessa sequenza risiedono su un singolo nodo della cache.
Se l'
DeliveryOption
è impostato su Qualsiasi, tutti i messaggi ordinati della stessa sequenza vengono consegnati allo stesso abbonato. Nel caso in cui l'abbonato specifico perda la connessione o non sia disponibile, a questo scopo viene riassegnato un nuovo abbonato. Tuttavia, se ilDeliveryOption
è impostato su Tutti, quindi tutti i messaggi ordinati della stessa sequenza vengono consegnati a tutti gli abbonati.In caso di trasferimento di stato, i messaggi ordinati potrebbero perdere la sequenza e venire pubblicati senza mantenere l'ordine.
I messaggi ordinati possono essere pubblicati solo utilizzando la modalità di sincronizzazione nell'API di pubblicazione. Le chiamate API in blocco e asincrone non sono supportate.
Controllo
NCache ti offre la possibilità di monitorare le statistiche degli argomenti Pub/Sub e osservarne varie contatori di prestazioni a questo proposito. L'attività e lo stato dell'argomento Pub/Sub possono essere monitorati tramite il Contatori PerfMon di Windows ed Strumenti della riga di comando.
Affidabilità e alta disponibilità
NCache implementa il meccanismo di riconoscimento per la consegna dei messaggi. I messaggi vengono conservati in memoria fino a quando non vengono consegnati correttamente in base al almeno una volta la consegna criteri. Quindi, NCache garantisce l'affidabilità della consegna dei messaggi per la messaggistica Pub/Sub nelle architetture distribuite.
Inoltre, tolleranza ai guasti fino a un nodo in Topologia partizione-replica rende l'archivio Pub/Sub Messaging altamente disponibile. Se un nodo lascia il cluster per qualsiasi motivo, la replica dispone del backup del messaggio.
In questa sezione
Argomenti Pub/Sub
Spiega come creare, ottenere ed eliminare argomenti per il modello Pub/Sub in NCache.
Pubblica messaggi su un argomento
Fornisce un codice di esempio che crea un argomento e pubblica messaggi in esso.
Iscriviti a un argomento
Fornisce un codice di esempio per iscriversi a un argomento e ricevere messaggi di interesse.
Eventi Pub/Sub
Spiega gli eventi Pub/Sub per notificare all'editore e all'abbonato i vari eventi che si verificano nella cache e nelle applicazioni.
Monitoraggio di argomenti Pub/Sub
Descrive i modi in cui è possibile monitorare le statistiche Pub/Sub NCache Monitor, PerfMon e strumenti da riga di comando.