Data pipelines a volte ricevono picchi nel traffico pubblicato. I picchi di traffico possono sovraccaricare gli abbonati, a meno che tu non sia pronto a farlo. Una soluzione semplice per evitare picchi di traffico è aumentare dinamicamente le risorse del sottoscrittore Pub/Sub per elaborare un numero maggiore di messaggi. Tuttavia, questa soluzione potrebbe far aumentare i costi o non funzionare all'istante. Ad esempio, potresti richiedere molte VM.
Il controllo del flusso sul lato sottoscrittore consente al sottoscrittore di regolare la frequenza di importazione dei messaggi. Il controllo del flusso gestisce quindi i picchi di traffico senza aumentare i costi o fino a quando il sottoscrittore non viene fatto lo scale up.
Il controllo del flusso è una funzionalità disponibile nella libreria client di alto livello di 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 frequenza superiore rispetto a quella di consumo. Se questo scenario è uno stato permanente, anziché un picco temporaneo 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 assegnati per le richieste in sospeso e il numero massimo di messaggi in sospeso consentiti. Imposta questi limiti in base alla capacità di velocità effettiva delle macchine client.
I valori predefiniti delle variabili di controllo del flusso e i nomi delle variabili potrebbero variare in base alle librerie client. Ad esempio, nella libreria client Java, le seguenti variabili configurano il controllo del flusso:
setMaxOutstandingElementCount(). Definisce il numero massimo di messaggi per cui 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 del sottoscrittore non esegue il pull di altri messaggi. Questo comportamento continua fino a quando i messaggi già estratti non vengono confermati o confermati negativamente.
Possiamo quindi allineare la velocità effettiva al costo associato
all'esecuzione di più abbonati.
Esempi di codice per il controllo del flusso
Per controllare la frequenza con cui il client del sottoscrittore riceve i messaggi, utilizza le funzionalità di controllo del flusso del sottoscrittore. Queste funzionalità di controllo del flusso sono illustrate nei seguenti esempi:
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ riportate nella Guida rapida sull'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API C++ Pub/Sub.
C#
Prima di provare questo esempio, segui le istruzioni di configurazione di C# nella Guida rapida sull'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API C# di Pub/Sub.
Go
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella Guida rapida sull'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Go Pub/Sub.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione Java in Guida rapida sull'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 in Guida rapida sull'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 in Guida rapida sull'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js Pub/Sub.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida sull'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 riportate in Guida rapida sull'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 per i nuovi tentativi di sottoscrizione
Inoltrare i messaggi non recapitati a un argomento messaggi non recapitabili
Riprodurre di nuovo i messaggi compromessi in precedenza o eliminare definitivamente i messaggi
Elaborare più messaggi con il controllo della contemporaneità