Configurar pools de conexão
Algumas bibliotecas de cliente do Cloud Bigtable permitem configurar o número de canais gRPC em um pool de conexões do cliente, também conhecido como pool de canais. Na maioria dos casos, a configuração padrão está correta, e não é necessário alterá-la.
Os pools de conexões são redimensionados automaticamente conforme necessário quando você usa a biblioteca de cliente do Cloud Bigtable para Java versão 2.23.0 ou mais recente e quando você usa o cliente HBase do Cloud Bigtable para Java versão 2.9.1 ou mais recente.
Nesta página, descrevemos como determinar o tamanho ideal do pool de conexões para seu aplicativo e apresentamos snippets de código que mostram como configurar os pools de conexão.
Antes de ler esta página, leia a visão geral dos pools de conexão do Bigtable para saber como funcionam e se você deve alterar o seu.
As seguintes bibliotecas de cliente oferecem pool de conexões e permitem configurar o número de pools:
- Biblioteca de cliente do Go para Cloud Bigtable
- Cliente HBase do Cloud Bigtable para Java
- Biblioteca de cliente do Cloud Bigtable para Java
- Biblioteca de cliente C++ do Cloud Bigtable
Determinar o melhor tamanho de pool de conexões
Para deixar espaço para flutuações de tráfego, o ideal é que um pool de conexões tenha por volta de duas vezes o número de conexões necessárias para a saturação máxima. Como uma conexão pode processar no máximo 100 solicitações simultâneas, entre 10 e 50 solicitações pendentes por conexão é o ideal. Esse conceito é descrito em mais detalhes em Pools de conexão.
Monitore seu tráfego após fazer alterações e ajuste o número de conexões no pool, se necessário.
As etapas a seguir ajudam você a calcular o número ideal de conexões no seu pool de canais usando métricas do lado do cliente, como as disponíveis no OpenCensus.
- Com as métricas do lado do cliente, colete as seguintes informações:
- O número máximo de consultas por segundo (QPS) por cliente quando o aplicativo está executando uma carga de trabalho típica.
- A latência média (o tempo de resposta para uma única solicitação) em ms.
- Determine o número de solicitações que podem ser enviadas em série por segundo dividindo 1.000 pelo valor médio da latência.
- Divida o QPS em segundos pelo número de solicitações seriais por segundo.
- Divida o resultado por 50 solicitações por canal para determinar o tamanho mínimo ideal do pool de canais. Se o cálculo for menor que 2, use pelo menos dois canais mesmo assim, para garantir redundância.
- Divida o mesmo resultado por 10 solicitações por canal para determinar o tamanho máximo do pool de canais.
Essas etapas são expressas nas seguintes equações:
(QPS ÷ (1.000 ÷ latência ms)) ÷ 50 streams = número mínimo ideal de conexões
((QPS s ÷ (1.000 ÷ latência ms) ÷ 10 streams)) = número máximo ideal de conexões
Exemplo
O aplicativo normalmente envia 50.000 solicitações por segundo, e a latência média é de 10 ms. Divida 1.000 por 10 ms para determinar se é possível enviar 100 solicitações em série por segundo. Divida esse número por 50.000 para chegar ao paralelismo necessário para enviar 50.000 QPS: 500. Cada canal pode ter no máximo 100 solicitações ao mesmo tempo, e a utilização do seu canal de destino está entre 10 e 50 streams simultâneos. Portanto, para calcular o mínimo, divida 500 por 50 para chegar a 10. Para encontrar o máximo, divida 500 por 10 para chegar a 50. Isso significa que o tamanho do pool de canais para este exemplo deve estar entre 10 e 50 conexões.
Definir o tamanho do pool
Os exemplos de código a seguir demonstram como configurar o número de pools nas bibliotecas de cliente que permitem definir o tamanho do pool.
Go
HBase
Este exemplo é aplicável apenas para versões da biblioteca de cliente anteriores à 2.9.1, quando o redimensionamento automático foi introduzido.
Java
Este exemplo é aplicável apenas para versões da biblioteca de cliente anteriores à 2.23.0, quando o redimensionamento automático foi introduzido.