A volte le pipeline di dati registrano picchi nel traffico pubblicato. I picchi di traffico possono sopraffare gli abbonati, a meno che tu non sia preparato. Una soluzione semplice per evitare picchi di traffico è aumentare dinamicamente le risorse degli abbonati Pub/Sub per elaborare più messaggi. Tuttavia, questa soluzione potrebbe far aumentare o meno i costi di funzionare all'istante. Ad esempio, potresti aver bisogno di molte VM.
Il controllo del flusso sul lato dell'abbonato consente all'abbonato di regolare la frequenza con cui vengono importati i 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 in Pub/Sub libreria client di alto livello. Puoi anche implementare la tua programmazione di controllo flusso quando utilizzi una libreria client di basso livello.
La necessità di un controllo del flusso indica che i messaggi vengono pubblicati a un ritmo superiore a quello di consumo. Se questo scenario è uno stato permanente, anziché un picco transitorio nel volume dei messaggi, valuta la possibilità di aumentare il numero di istanze client degli abbonati.
Configurazione del controllo di flusso
Il controllo del flusso consente di configurare il numero massimo di byte allocati per richieste in sospeso e il numero massimo consentito di messaggi in sospeso. Imposta questi limiti in base alla capacità di velocità effettiva delle tue macchine client.
I valori predefiniti per le variabili di controllo del flusso e i nomi delle potrebbero essere diverse nelle librerie client. Ad esempio, nella libreria client Java, le seguenti variabili configurano il controllo 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 il quale Pub/Sub non ha ricevuto riconoscimenti o ringraziamenti.
Se il limite per setMaxOutstandingElementCount()
o
setMaxOutstandingRequestBytes()
è incrociato, il client sottoscrittore
non esegue il pull di altri messaggi. Questo comportamento continua finché i messaggi
che sono già stati estratti non vengono confermati o non confermati.
In questo modo possiamo allineare il throughput al costo associato all'utilizzo di un numero maggiore di abbonati.
Esempi di codice per il controllo del flusso
Per controllare la frequenza con cui il client sottoscrittore riceve i messaggi, utilizza le funzionalità di controllo del flusso dell'abbonato. Queste funzionalità di controllo del flusso illustrato nei seguenti esempi:
C++
Prima di provare questo esempio, segui le istruzioni per la configurazione di C++ in 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 C# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, 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 ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python Pub/Sub.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Passaggi successivi
Scopri le altre opzioni di consegna che puoi configurare per un abbonamento:
Gestire gli errori relativi ai messaggi con il criterio di ripetizione dell'abbonamento
Inoltrare i messaggi non recapitati a un argomento messaggi non recapitabili
Riprodurre i messaggi per i quali è stato ricevuto l'acknowledgment o eliminare i messaggi