Che cos'è Pub/Sub e Pub/Sub Lite?

Pub/Sub è un servizio di messaggistica asincrono e scalabile che disaccoppia i servizi che producono messaggi dai servizi che li elaborano.

Pub/Sub consente ai servizi di comunicare in modo asincrono, con latenze dell'ordine di 100 millisecondi.

Pub/Sub viene utilizzato per l'analisi dei flussi di dati e le pipeline di integrazione dei dati per importare e distribuire i dati. È efficace anche come middleware orientato alla messaggistica per l'integrazione dei servizi o come coda per caricare in contemporanea le attività.

Pub/Sub consente di creare sistemi di produttori e consumer di eventi, chiamati publisher e sottoscritti. Gli editori comunicano con i sottoscrittori in modo asincrono trasmettendo eventi, anziché tramite chiamate di procedura remota sincrona (RPC).

Gli editori inviano eventi al servizio Pub/Sub, indipendentemente da come o quando devono essere elaborati. Pub/Sub fornisce quindi gli eventi a tutti i servizi che li rispondono. Nei sistemi che comunicano tramite RPC, i publisher devono attendere che gli abbonati ricevano i dati. Tuttavia, l'integrazione asincrona in Pub/Sub aumenta la flessibilità e la robustezza dell'intero sistema.

Per iniziare a utilizzare Pub/Sub, consulta la guida rapida all'utilizzo della console Google Cloud. Per un'introduzione più completa, consulta Creazione di un sistema di messaggistica Pub/Sub.

Casi d'uso comuni

  • Importazione dell'interazione utente e degli eventi del server. Per utilizzare gli eventi di interazione utente delle app dell'utente finale o gli eventi del server dal tuo sistema, puoi inoltrarli a Pub/Sub. Puoi quindi usare uno strumento di elaborazione dei flussi, come Dataflow, che fornisce gli eventi ai database. Esempi di questi database sono BigQuery, Bigtable e Cloud Storage. Pub/Sub consente di raccogliere eventi da molti client contemporaneamente.

  • Distribuzione degli eventi in tempo reale. Gli eventi, non elaborati o elaborati, possono essere messi a disposizione di più applicazioni all'interno del team e dell'organizzazione per l'elaborazione in tempo reale. Pub/Sub supporta un "bus di eventi aziendale" e pattern di progettazione di applicazioni basate su eventi. Pub/Sub ti consente l'integrazione con molti sistemi Google che esportano gli eventi in Pub/Sub.

  • Replica di dati tra database. Si usa Pub/Sub per distribuire gli eventi di modifica dai database. Questi eventi possono essere utilizzati per creare una visualizzazione dello stato e della cronologia dello stato del database in BigQuery e in altri sistemi di archiviazione dati.

  • Elaborazione in parallelo e flussi di lavoro. Puoi distribuire in modo efficiente molte attività tra più worker utilizzando i messaggi Pub/Sub per la connessione a Cloud Functions. Esempi di queste attività sono la compressione di file di testo, l'invio di notifiche via email, la valutazione dei modelli di AI e la riformattazione delle immagini.

  • Bus eventi aziendali. Puoi creare un bus di condivisione dei dati in tempo reale a livello aziendale per distribuire eventi aziendali, aggiornamenti del database ed eventi di analisi in tutta l'organizzazione.

  • Flussi di dati da applicazioni, servizi o dispositivi IoT. Ad esempio, un'applicazione SaaS può pubblicare un feed di eventi in tempo reale. In alternativa, un sensore residenziale può trasmettere dati in Pub/Sub per utilizzarli in altri prodotti Google Cloud attraverso una pipeline Dataflow.

  • Aggiornare le cache distribuite. Ad esempio, un'applicazione può pubblicare eventi di invalidazione per aggiornare gli ID degli oggetti che sono cambiati.

  • Bilanciamento del carico per l'affidabilità. Ad esempio, è possibile eseguire il deployment delle istanze di un servizio su Compute Engine in più zone, ma sottoscrivere un argomento comune. Quando il servizio non funziona in una zona, gli altri possono prelevare il carico automaticamente.

Tipi di servizi Pub/Sub

Pub/Sub è costituito da due servizi:

  • Servizio Pub/Sub. Questo servizio di messaggistica è la scelta predefinita per la maggior parte degli utenti e delle applicazioni. Offre la massima affidabilità e il più grande insieme di integrazioni, oltre alla gestione automatica della capacità. Pub/Sub garantisce la replica sincrona di tutti i dati in almeno due zone e la replica "best effort" in una terza zona aggiuntiva.

  • Servizio Pub/Sub Lite. Un servizio di messaggistica separato ma simile, creato per un costo inferiore. Offre affidabilità inferiore rispetto a Pub/Sub. Offre archiviazione degli argomenti a livello di zona o di regione. Gli argomenti Lite a livello di zona sono archiviati in una sola zona. Gli argomenti Lite a livello di regione replicano i dati in una seconda zona in modo asincrono. Inoltre, Pub/Sub Lite richiede il pre-provisioning e la gestione della capacità di archiviazione e velocità effettiva. Prendi in considerazione Pub/Sub Lite solo per applicazioni in cui il raggiungimento di un costo contenuto giustifica il lavoro operativo aggiuntivo e una minore affidabilità.

Per maggiori dettagli sulle differenze tra Pub/Sub e Pub/Sub Lite, consulta Scegliere tra Pub/Sub o Pub/Sub Lite.

Confronto tra Pub/Sub e altre tecnologie di messaggistica

Pub/Sub combina la scalabilità orizzontale di Apache Kafka e Pulsar con funzionalità presenti nei middleware di messaggistica tradizionale come Apache ActiveMQ e RabbitMQ. Esempi di tali funzionalità sono le code ai messaggi non recapitabili e i filtri.

Un'altra funzionalità che Pub/Sub adotta dal middleware di messaggistica è il Parallelismo per messaggio, anziché la messaggistica basata sulle partizioni. Pub/Sub "lease" singoli messaggi ai client sottoscrittori, quindi monitora se un determinato messaggio è stato elaborato correttamente.

Al contrario, altri sistemi di messaggistica con scalabilità orizzontale usano le partizioni per la scalabilità orizzontale. Questo obbliga i sottoscrittori a elaborare in ordine i messaggi in ogni partizione e limita il numero di client simultanei al numero di partizioni. L'elaborazione per messaggio massimizza il parallelismo delle applicazioni dell'abbonato e contribuisce a garantire l'indipendenza di publisher/sottoscrittore.

Confrontare la comunicazione tra servizi e servizi-client

Pub/Sub è progettato per la comunicazione service-to-service anziché con gli utenti finali o i client IoT. Altri pattern sono meglio supportati da altri prodotti:

Puoi utilizzare una combinazione di questi servizi per creare pattern di client -> servizi -> di database. Ad esempio, consulta il tutorial Streaming di messaggi Pub/Sub su WebSocket.

Integrazioni

Pub/Sub si integra con altri prodotti Google Cloud per creare un sistema di messaggistica completo:

  • Elaborazione dei flussi e integrazione dei dati. Supportato da Dataflow, inclusi i modelli e SQL Dataflow, che consentono l'elaborazione e l'integrazione dei dati in BigQuery e nei data lake su Cloud Storage. I modelli Dataflow per spostare i dati da Pub/Sub a Cloud Storage, BigQuery e altri prodotti sono disponibili nelle UI di Pub/Sub e Dataflow nella console Google Cloud. È disponibile anche l'integrazione con Apache Spark, in particolare se gestito con Dataproc. La composizione visiva delle pipeline di integrazione ed elaborazione in esecuzione su Spark + Dataproc può essere realizzata con Data Fusion.
  • Monitoraggio, avvisi e logging. Supportato dai prodotti Monitoring e Logging.
  • Autenticazione e IAM. Pub/Sub si basa su un'autenticazione OAuth standard utilizzata da altri prodotti Google Cloud e supporta IAM granulare, consentendo controllo dell'accesso dell'accesso per le singole risorse.
  • le API. Pub/Sub utilizza tecnologie standard delle API di servizio gRPC e REST, oltre a librerie client per diversi linguaggi.
  • Attivatori, notifiche e webhook. Pub/Sub offre la consegna dei messaggi tramite push come richieste POST HTTP a webhook. Puoi implementare l'automazione del flusso di lavoro utilizzando Cloud Functions o altri prodotti serverless.
  • Orchestrazione. Pub/Sub può essere integrato in flussi di lavoro serverless in più fasi in modo dichiarativo. Big data e orchestrazione di analisi spesso eseguita con Cloud Composer, che supporta i trigger di Pub/Sub. Puoi anche integrare Pub/Sub con Application Integration (Anteprima), una soluzione Integration-Platform-as-a-Service (iPaaS). Application Integration fornisce un trigger di Pub/Sub per attivare o avviare le integrazioni.
  • Connettori di integrazione.(Anteprima) Questi connectors ti consentono di connetterti a varie origini dati. Con i connettori, sia i servizi Google Cloud sia le applicazioni aziendali di terze parti sono esposti alle integrazioni tramite un'interfaccia standard trasparente. Per Pub/Sub, puoi creare una connessione Pub/Sub da utilizzare nelle integrazioni.

Concetti principali

  • Argomento. Una risorsa denominata a cui i publisher inviano i messaggi.
  • Abbonamento. Una risorsa denominata che rappresenta il flusso di messaggi di un singolo argomento specifico da consegnare all'applicazione di sottoscrizione. Per ulteriori dettagli sulle sottoscrizioni e sulla semantica di consegna dei messaggi, consulta la Guida per gli abbonati.
  • Messaggio. La combinazione di dati e attributi (facoltativi) che un editore invia a un argomento e che alla fine viene pubblicata per gli abbonati.
  • Attributo Messaggio. Una coppia chiave-valore che un publisher può definire per un messaggio. Ad esempio, la chiave iana.org/language_tag e il valore en potrebbero essere aggiunti ai messaggi per contrassegnarli come leggibili da un abbonato di lingua inglese.
  • Editore. Un'applicazione che crea e invia messaggi a uno o più argomenti.
  • Iscritto. Un'applicazione con una sottoscrizione a uno o più argomenti per ricevere messaggi da tale applicazione.
  • Conferma (o "ack"). Indicatore inviato da un sottoscrittore a Pub/Sub dopo aver ricevuto correttamente un messaggio. I messaggi confermati vengono rimossi dalla coda dei messaggi dell'abbonamento.
  • Spingi e tira. I due metodi di recapito dei messaggi. Un sottoscrittore riceve i messaggi tramite Pub/Sub inviandoli all'endpoint scelto dal sottoscrittore o mediante il pulling da parte del sottoscrittore dal servizio.

Le relazioni tra publisher e abbonati possono essere one-to-many (fan-out), many-to-one (fan-in) e many-to-many, come illustrato nel seguente diagramma:

Relazioni publisher-iscritto

Il seguente diagramma illustra in che modo un messaggio passa da un editore a un sottoscrittore. Per la consegna push, il riconoscimento è implicito nella risposta alla richiesta push, mentre per la distribuzione pull richiede una RPC separata.

Ciclo di vita dei messaggi

Passaggi successivi