O pool de conexões no modo de proxy de cluster reutiliza as conexões entre o proxy e o banco de dados. Isso evita a exaustão das conexões de backend causada por comandos com estado e garante a estabilidade da sua instância Tair (Redis OSS-compatible).
Cenários
No modo de proxy de cluster nativo da nuvem, os comandos padrão utilizam conexões compartilhadas. Assim, o aumento de conexões do cliente não afeta as conexões do banco de dados de backend. No entanto, certos comandos com estado alteram a conexão entre o proxy e o nó de dados de compartilhada para exclusiva.
No modo exclusivo, cada conexão de cliente cria uma conexão dedicado no nó de dados. Em cenários de alta concorrência, as conexões do nó de dados crescem linearmente junto com as conexões do cliente. Esse comportamento pode desencadear o erro max number of clients reached e causar interrupções no serviço.
O dimensionamento horizontal com a adição de shards não resolve a exaustão de conexões por shard causada por requisições de monitoramento (WATCH) ou bloqueio.
Comandos que ativam o modo exclusivo:
Comandos de transação:
MULTI/EXEC(apósWATCH)Comandos de bloqueio:
BLPOP,BRPOP,BRPOPLPUSHeXREAD ... BLOCK ...
O pool de conexões reutiliza as conexões exclusivas entre o proxy e o nó de dados. Essa abordagem reduz o número de conexões no nó de dados e previne falhas decorrentes do limite máximo de conexões.
Arquitetura
Cada subinstância de proxy executa um pool de conexões independente e mantém um pool dedicado para cada nó de dados.
Exemplo:
Sem um pool de conexões, cada conexão cliente-proxy estabelece uma conexão separada para cada shard de backend. Por exemplo, 10 conexões de cliente acessando 5 shards criam 10 × 5 = 50 conexões.
Com o pool de conexões ativado, o proxy mantém um pool limitado para cada shard, e as requisições do cliente reutilizam as conexões desse pool. No mesmo cenário, as 10 conexões de cliente podem precisar de apenas 2 conexões no pool por shard, totalizando 2 × 5 = 10 conexões.
Fluxo de trabalho:
Quando um cliente inicia uma requisição em modo exclusivo, o proxy obtém uma conexão ociosa do pool de conexões do shard de destino.
Acerto no pool: O sistema vincula uma conexão ociosa à conexão do cliente para processar a requisição. Após a conclusão, a conexão é desvinculada e devolvida ao pool para reutilização.
-
Falha no pool: O proxy cria uma nova conexão. Depois que a requisição é concluída:
Se o pool não tiver atingido o limite (
private_conn_pool_max_idle_per_db), a conexão é adicionada ao pool.Caso o pool esteja cheio, a conexão é liberada imediatamente (modo de conexão de curta duração).
Esse mecanismo reduz a sobrecarga de gerenciamento de conexões, diminui o consumo de recursos no banco de dados e melhora a estabilidade e o throughput.
Requisitos
Sua instância deve atender aos seguintes requisitos:
Modo de implantação: Nativo da nuvem. Você pode alterar de clássico para nativo da nuvem.
Arquitetura da instância: Cluster. É possível alterar a arquitetura de padrão para cluster.
Modo de conexão: Modo de proxy.
Versão do proxy: 7.0.17 ou posterior. Se sua versão for anterior, você pode atualizar a versão do proxy.
Ativar o pool de conexões
Ative o pool de conexões modificando um parâmetro da instância. Trata-se de uma atualização a quente que não exige reinicialização nem afeta os serviços em execução.
Acesse a página Instances. Na barra de navegação superior, selecione uma região. Em seguida, clique em ID da instância de destino.
No painel de navegação à esquerda, clique em Parameter Settings.
Localize
private_conn_pool_enablede clique em Modify na coluna Actions.Na caixa de diálogo, defina o valor como
1e clique em OK.
Para verificar, consulte a métrica Connections from Proxy to DB em Infrastructure Monitoring no console do CloudMonitor e compare os dados antes e depois de ativar o recurso.
Configuração e ajuste
|
Nome da configuração |
Descrição |
Valor padrão |
Intervalo de valores |
|
|
|
Ativa ou desativa o pool de conexões. |
0 |
|
1]` |
|
|
TTL para conexões ociosas no pool, em segundos. Conexões ociosas além desse limiar são fechadas. |
60 |
|
|
|
|
Número máximo de conexões ociosas que cada nó de proxy mantém por nó de dados. Ao atingir esse limite, as conexões liberadas são fechadas em vez de retornarem ao pool. |
1000 |
|
|
|
|
Quantidade mínima de conexões ociosas mantidas por cada nó de proxy para cada nó de dados. As conexões abaixo desse limiar são retidas mesmo que excedam |
0 |
|
Recomendações de ajuste
Cenários gerais: Utilize os valores padrão, pois atendem à maioria das cargas de trabalho.
-
Cenários de transações de curta duração e alta concorrência (como vendas relâmpago)
Características: Conexões efêmeras com ciclos frequentes de empréstimo e devolução.
Recomendação: Defina
private_conn_pool_max_idle_per_dbalto o suficiente para cobrir o pico de requisições simultâneas. Isso maximiza a reutilização e evita conexões de curta duração. Opcionalmente, reduzaprivate_conn_idle_time_secpara liberar recursos mais rapidamente fora dos horários de pico.
-
Cenários de serviço com bloqueio prolongado (como consumidores de fila)
Características: Conexões mantidas por longo período e raramente devolvidas ao pool.
Recomendação: Aumente
private_conn_pool_max_idle_per_dbpara corresponder ao número de consumidores concorrentes. Configureprivate_conn_pool_min_idle_per_dbligeiramente acima da média de conexões simultâneas para pré-buscar conexões e reduzir a latência para novos consumidores.
-
Cenários com restrição de memória ou instâncias pequenas
Características: Orçamento de memória rigoroso.
Recomendação: Reduza
private_conn_pool_max_idle_per_dbeprivate_conn_pool_min_idle_per_db. Essa estratégia troca parte da eficiência de reutilização por menor consumo de memória nos nós de dados.
Observações de uso
-
**Defina um valor adequado para
private_conn_pool_min_idle_per_db**Cada conexão ociosa consome memória no nó de banco de dados de backend. Com múltiplos shards e nós de proxy, um valor alto para
private_conn_pool_min_idle_per_dbpode causar uso excessivo de memória. -
Evite trocas desnecessárias de contexto de banco de dados
Quando uma conexão do pool é reutilizada por um cliente que acessa um índice de banco de dados diferente, o proxy executa o comando
SELECTpara trocar o contexto. Isso aumenta a carga útil do banco de dados e a latência. Projete sua aplicação para usar um único índice de banco de dados (geralmente DB 0). -
Não aplicável a comandos de publicação/assinatura
O pool de conexões não se aplica aos comandos
SUBSCRIBEePSUBSCRIBE. Eles ocupam permanentemente uma conexão e não são gerenciados pelo pool.