A volte, le Data pipelines registrano picchi di traffico pubblicato. Se non ti prepari, i picchi di traffico possono sopraffare gli abbonati. Una soluzione semplice per evitare i picchi di traffico è aumentare dinamicamente le risorse degli abbonati Pub/Sub per elaborare più messaggi. Tuttavia, questa soluzione potrebbe aumentare i costi o non funzionare immediatamente. Ad esempio, potresti aver bisogno di molte VM.
Il controllo del flusso sul lato dell'abbonato consente all'abbonato di regolare la velocità di inserimento dei messaggi. Il controllo del flusso gestisce quindi i picchi di traffico senza aumentare i costi o fino a quando l'abbonato non viene scalato.
Il controllo del flusso è una funzionalità disponibile nella libreria client di alto livello Pub/Sub. Puoi anche implementare la tua programmazione di controllo del flusso quando utilizzi una libreria client di basso livello.
La necessità di un controllo del flusso indica che i messaggi vengono pubblicati a una velocità superiore a quella di consumo. Se questo scenario è uno stato persistente, anziché un picco temporaneo nel volume dei messaggi, valuta la possibilità di aumentare il numero di istanze del client dell'abbonato.
Configurazione del controllo del flusso
Il controllo del flusso consente di configurare il numero massimo di byte allocati per le richieste in sospeso e il numero massimo di messaggi in sospeso consentiti. Imposta questi limiti in base alla capacità di throughput delle macchine client.
I valori predefiniti per le variabili di controllo del flusso e i nomi delle variabili potrebbero variare a seconda delle librerie client. Ad esempio, nella libreria client Java, le seguenti variabili configurano il controllo del flusso:
setMaxOutstandingElementCount(). Definisce il numero massimo di messaggi per i quali Pub/Sub non ha ricevuto riconoscimenti o riconoscimenti negativi.
setMaxOutstandingRequestBytes(). Definisce la dimensione massima dei messaggi per i quali Pub/Sub non ha ricevuto riconoscimenti o riconoscimenti negativi.
Se viene superato il limite per setMaxOutstandingElementCount() o setMaxOutstandingRequestBytes(), il client dell'abbonato non esegue il pull di altri messaggi. Questo comportamento continua finché i messaggi di cui è già stato eseguito il pull non vengono riconosciuti o riconosciuti negativamente.
In questo modo, possiamo allineare il throughput al costo associato all'esecuzione di più abbonati.
Esempi di codice per il controllo del flusso
Per controllare la velocità con cui il client dell'abbonato riceve i messaggi, utilizza le funzionalità di controllo del flusso dell'abbonato. Queste funzionalità di controllo del flusso sono illustrate negli esempi seguenti:
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C++ .
C#
Prima di provare questo esempio, segui le istruzioni di configurazione di C# in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C# .
Go
L'esempio seguente utilizza la versione principale della libreria client Go Pub/Sub (v2). Se utilizzi ancora la libreria v1, consulta la guida alla migrazione alla v2. Per visualizzare un elenco di esempi di codice della versione 1, consulta gli esempi di codice deprecati.
Prima di provare questo esempio, segui le istruzioni di configurazione di Go in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Java.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Python.
Ruby
L'esempio seguente utilizza la libreria client Ruby Pub/Sub v3. Se utilizzi ancora la libreria v2, consulta la guida alla migrazione alla v3. Per visualizzare un elenco di esempi di codice Ruby v2, consulta gli esempi di codice deprecati.
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Ruby.
Passaggi successivi
Scopri le altre opzioni di consegna che puoi configurare per un abbonamento:
Gestire gli errori dei messaggi con i criteri di nuovi tentativi degli abbonamenti
Inoltrare i messaggi non recapitati a un argomento messaggi non recapitabili
Riprodurre i messaggi di cui è stato eseguito il riconoscimento in precedenza o eliminare i messaggi
Estendere il tempo di riconoscimento con la gestione dei lease