Che cos'è Pub/Sub?

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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

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

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

Pub/Sub consente di creare sistemi di produttori e consumatori di eventi, chiamati publisher e iscritti. Gli editori comunicano con gli abbonati in modo asincrono trasmettendo eventi, piuttosto che tramite chiamate di procedura remota (RPC) sincrone.

Gli editori inviano eventi al servizio Pub/Sub, indipendentemente da come o quando devono essere elaborati. Pub/Sub quindi invia gli eventi a tutti i servizi che reagiscono a essi. Nei sistemi che comunicano tramite RPC, gli editori devono attendere che i sottoscrittori ricevano i dati. Tuttavia, l'integrazione asincrona in Pub/Sub aumenta la flessibilità e la robustezza del sistema complessivo.

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 degli eventi di interazione dell'utente e del server. Per utilizzare gli eventi di interazione utente delle app o degli eventi del server dal tuo sistema, puoi inoltrarli a Pub/Sub. Puoi quindi utilizzare uno strumento di elaborazione dei flussi, come Dataflow, che distribuisce gli eventi ai database. Esempi di tali database sono BigQuery, Cloud Bigtable e Cloud Storage. Pub/Sub consente di raccogliere eventi da molti client contemporaneamente.

  • Distribuzione in tempo reale di eventi. Gli eventi, non elaborati o elaborati, possono essere resi disponibili a più applicazioni nel team e nell'organizzazione per l'elaborazione in tempo reale. Pub/Sub supporta un "bus evento aziendale" e i pattern di progettazione delle applicazioni basati su eventi. Pub/Sub ti consente l'integrazione con molti sistemi Google che esportano eventi in Pub/Sub.

  • Replica dei dati tra i database. Pub/Sub viene comunemente utilizzato per distribuire eventi di modifica dai database. Questi eventi possono essere utilizzati per creare una visualizzazione dello stato dei database e della cronologia degli stati in BigQuery e in altri sistemi di archiviazione dati.

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

  • bus per eventi aziendali. Puoi creare un autobus di condivisione dati in tempo reale a livello aziendale, che distribuisca eventi aziendali, aggiornamenti di database ed eventi di analisi all'interno della tua organizzazione.

  • Streaming 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 flussi di dati a Pub/Sub per l'utilizzo in altri prodotti Google Cloud tramite una pipeline Dataflow.

  • Aggiornamento delle cache distribuite. Ad esempio, un'applicazione può pubblicare eventi di annullamento dell'aggiornamento per aggiornare gli ID degli oggetti che sono stati modificati.

  • 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. In caso di errore del servizio in una zona qualsiasi, gli altri possono recuperare il carico automaticamente.

Tipi di servizi Pub/Sub

Pub/Sub comprende 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 la più ampia serie 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 del migliore tentativo in una terza zona aggiuntiva.

  • Servizio Pub/Sub Lite. Un servizio di messaggistica separato ma simile creato per un costo inferiore. Offre un'affidabilità inferiore rispetto a Pub/Sub. Offre archiviazione a livello di zona o di area geografica. Gli argomenti Lite a livello di zona vengono 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 di velocità effettiva. Considera Pub/Sub Lite solo per le applicazioni in cui raggiungere un basso costo giustifica un ulteriore lavoro operativo e una minore affidabilità.

Per ulteriori dettagli sulle differenze tra Pub/Sub e Pub/Sub Lite, consulta Scelta di 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 le funzionalità presenti nei middleware di messaggistica tradizionali come Apache ActiveMQ e RabbitMQ. Esempi di funzionalità di questo tipo sono le code non recapitabili e i filtri.

Un'altra funzionalità adottata da Pub/Sub per il middleware della messaggistica è il parallelism per messaggio, anziché per la messaggistica basata su partizioni. Pub/Sub "affitta" singoli messaggi ai client sottoscrittori, quindi monitora se un determinato messaggio è stato elaborato correttamente.

Al contrario, altri sistemi di messaggistica con scalabilità orizzontale utilizzano le partizioni per la scalabilità orizzontale. Questa operazione impone ai sottoscrittori di elaborare i messaggi in ciascuna partizione in ordine e limita il numero di client in contemporanea al numero di partizioni. L'elaborazione per messaggio massimizza il parallelismo delle applicazioni degli abbonati e aiuta a garantire l'indipendenza degli editori/iscritti.

Confrontare la comunicazione tra servizi e servizi

Pub/Sub è pensato per le comunicazioni tra i servizi e non per le comunicazioni con client utente finale o IoT. Altri modelli sono supportati meglio da altri prodotti:

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

Integrazioni

Pub/Sub integra numerose integrazioni 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 di Dataflow e SQL, che consentono l'elaborazione e l'integrazione dei dati in BigQuery e data lake su Cloud Storage. I modelli Dataflow per lo spostamento di dati da Pub/Sub a Cloud Storage, BigQuery e altri prodotti sono disponibili nelle UI di Pub/Sub e Dataflow nella console Google Cloud. Integrazione con Apache Spark, in particolare se gestita con Dataproc. La composizione visiva delle pipeline di integrazione ed elaborazione in esecuzione su Spark + Dataproc può essere eseguita con Data Fusion.
  • Monitoraggio, avvisi e logging. Supportato dai prodotti di monitoraggio 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 il controllo dell'accesso per le singole risorse.
  • API. Pub/Sub utilizza le tecnologie di servizio REST standard di gRPC e REST insieme alle librerie client per vari linguaggi.
  • Attivatori, notifiche e webhook. Pub/Sub offre la consegna push dei messaggi come richieste POST HTTP ai webhook. Puoi implementare l'automazione del flusso di lavoro utilizzando Cloud Functions o altri prodotti serverless.
  • Orchestrazione. Pub/Sub può essere integrato in Workflows serverless in più passaggi in modo dichiarativo. Orchestrazione di big data e analisi spesso eseguita con Cloud Composer, che supporta i trigger Pub/Sub. Puoi anche integrare Pub/Sub con Application Integration (anteprima), che è una soluzione di Integration-Platform-as-a-Service (iPaaS). L'integrazione delle applicazioni fornisce un trigger Pub/Sub per attivare o avviare le integrazioni.
  • Connettori di integrazione.(Anteprima) Questi connettori consentono di collegarsi a varie origini dati. Con i connettori, sia i servizi Google Cloud che le applicazioni aziendali di terze parti sono esposti alle tue integrazioni tramite un'interfaccia trasparente e standard. Per Pub/Sub, puoi creare una connessione Pub/Sub da utilizzare nelle integrazioni.

Concetti fondamentali

  • Argomento. Una risorsa denominata a cui i messaggi vengono inviati dai publisher.
  • Abbonamento. Una risorsa denominata che rappresenta il flusso di messaggi da un singolo argomento specifico da consegnare all'applicazione di iscrizione. Per maggiori dettagli sulle sottoscrizioni e sulla semantica del recapito dei messaggi, consulta la Guida per gli abbonati.
  • Messaggio. La combinazione di dati e attributi (facoltativi) inviati da un editore a un argomento e infine inviati ai sottoscrittori.
  • Attributo per i messaggi. 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 sottoscrittore di lingua inglese.
  • Publisher. Un'applicazione che crea e invia messaggi a uno o più argomenti.
  • Abbonato. Un'applicazione con una sottoscrizione a uno o più argomenti per ricevere i relativi messaggi.
  • Confermazione (o "ACK"). Un indicatore inviato da un sottoscrittore a Pub/Sub dopo aver ricevuto correttamente un messaggio. I messaggi confermati vengono rimossi dalla coda messaggi dell'abbonamento.
  • Spingi e tira. I due metodi di recapito dei messaggi. Un sottoscrittore riceve messaggi sia da Pub/Sub che ne esegue il push all'endpoint scelto come abbonato, oppure dal sottoscrittore che lo estra il pull dal servizio.

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

Relazioni tra publisher e iscritti

Il seguente diagramma mostra in che modo un messaggio passa da un editore a un sottoscrittore. Per la consegna push, la conferma è implicita nella risposta alla richiesta push, mentre per la consegna push richiede una RPC separata.

Ciclo di vita di un messaggio

Passaggi successivi