Configura pool di connessioni
Alcune librerie client di Cloud Bigtable consentono di configurare il numero di canali gRPC nel pool di connessioni di un client, chiamato anche pool di canali. Nella maggior parte dei casi, la configurazione predefinita è corretta e non è necessario modificarla.
I pool di connessioni vengono ridimensionati automaticamente in base alle esigenze quando utilizzi la libreria client di Cloud Bigtable per Java versione 2.23.0 o successive e quando utilizzi il client Cloud Bigtable HBase per Java versione 2.9.1 o successive.
Questa pagina descrive come determinare la dimensione ottimale del pool di connessioni per la tua applicazione e presenta gli snippet di codice che mostrano come configurare i pool di connessioni.
Prima di leggere questa pagina, leggi la panoramica dei pool di connessioni Bigtable per scoprire come funzionano e se dovresti modificare i tuoi.
Le seguenti librerie client offrono il pool di connessioni e consentono di configurare il numero di pool:
- Libreria client Go per Cloud Bigtable
- Client Cloud Bigtable HBase per Java
- Libreria client di Cloud Bigtable per Java
- Libreria client C++ di Cloud Bigtable
Determinare la dimensione migliore del pool di connessioni
Idealmente, per lasciare spazio alle fluttuazioni del traffico, un pool di connessioni ha circa il doppio del numero di connessioni necessario per la massima saturazione. Poiché una connessione può gestire un massimo di 100 richieste in parallelo, un numero ottimale di 10-50 richieste in sospeso per connessione è ottimale. Questo concetto è descritto più dettagliatamente in Pool di connessioni.
Monitora il traffico dopo aver apportato modifiche e modifica il numero di connessioni nel pool, se necessario.
I passaggi seguenti ti aiutano a calcolare il numero ottimale di connessioni nel tuo pool di canali utilizzando le metriche lato client come quelle disponibili in OpenCensus.
- Dalle metriche lato client, raccogli le seguenti informazioni:
- Il numero massimo di query al secondo (QPS) per client quando la tua applicazione esegue un carico di lavoro tipico.
- La latenza media (il tempo di risposta per una singola richiesta) in ms.
- Determina il numero di richieste che puoi inviare in serie al secondo dividendo 1000 per il valore di latenza medio.
- Dividi il valore QPS in secondi per il numero di richieste seriali al secondo.
- Dividi il risultato per 50 richieste per canale per determinare la dimensione minima ottimale del pool di canali. (Se il calcolo è inferiore a 2, utilizza comunque almeno 2 canali per garantire la ridondanza).
- Dividi lo stesso risultato per 10 richieste per canale per determinare la dimensione massima ottimale del pool di canali.
Questi passaggi sono espressi nelle seguenti equazioni:
(QPS sec ÷ (1000 ÷ latenza ms)) ÷ 50 flussi = numero minimo ottimale di connessioni
(QPS sec ÷ (1000 ÷ latenza ms)) ÷ 10 flussi = numero ottimale ottimale di connessioni
Esempio
L'applicazione in genere invia 50.000 richieste al secondo e la latenza media è di 10 ms. Dividi 1000 per 10 ms per determinare che puoi inviare 100 richieste in serie al secondo. Dividi quel numero in 50.000 per ottenere il parallelismo necessario per inviare 50.000 QPS: 500. Ogni canale può avere al massimo 100 richieste contemporaneamente e l'utilizzo del canale target è compreso tra 10 e 50 stream simultanei. Quindi, per calcolare il minimo, dividi 500 per 50 e ottieni 10. Per trovare il numero massimo, dividi 500 per 10 e ottieni 50. Ciò significa che la dimensione del pool di canali per questo esempio deve essere compresa tra 10 e 50 connessioni.
Imposta le dimensioni del pool
I seguenti esempi di codice mostrano come configurare il numero di pool nelle librerie client che consentono di impostare le dimensioni del pool.
Go
HBase
Questo esempio è applicabile solo alle versioni delle librerie client precedenti alla 2.9.1, quando è stato introdotto il ridimensionamento automatico.
Java
Questo esempio è applicabile solo alle versioni delle librerie client precedenti alla 2.23.0, quando è stato introdotto il ridimensionamento automatico.