A volte le Data pipelines registrano picchi nel traffico pubblicato. I picchi di traffico possono sopraffare gli abbonati se non ti prepari in anticipo. Una soluzione semplice per evitare picchi di traffico consiste nell'aumentare dinamicamente le risorse dei sottoscrittori 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 del sottoscrittore consente a quest'ultimo 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 transitorio nel volume dei messaggi, valuta la possibilità di aumentare il numero di istanze client del sottoscrittore.
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 conferme o conferme negative.
setMaxOutstandingRequestBytes(): definisce la dimensione massima dei messaggi per i quali Pub/Sub non ha ricevuto conferme o conferme negative.
Se viene superato il limite per setMaxOutstandingElementCount()
o
setMaxOutstandingRequestBytes()
, il client abbonato
non recupera altri messaggi. Questo comportamento continua finché i messaggi
già recuperati non vengono confermati o confermati negativamente.
In questo modo possiamo allineare il throughput al costo associato all'esecuzione di più sottoscrizioni.
Esempi di codice per il controllo del flusso
Per controllare la velocità con cui il client sottoscrittore riceve i messaggi, utilizza le funzionalità di controllo del flusso del sottoscrittore. Queste funzionalità di controllo del flusso sono illustrate negli esempi seguenti:
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
C#
Prima di provare questo esempio, segui le istruzioni di configurazione di C# nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Vai
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 ritirati.
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella 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 nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella 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 nella 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 nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Python.
Ruby
Il seguente esempio 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 ritirati.
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby nella 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 pubblicazione che puoi configurare per un abbonamento:
Gestire gli errori dei messaggi con il criterio di nuovi tentativi di abbonamento
Inoltrare i messaggi non recapitati a un argomento messaggi non recapitabili
Riprodurre i messaggi riconosciuti in precedenza o eliminarli
Estendere il tempo di riconoscimento con la gestione dei contratti di locazione