Todos os produtos
Search
Central de documentação

Tair (Redis® OSS-Compatible):Connection pool best practices for cluster proxy mode

Última atualização: Jun 26, 2026

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ós WATCH)

  • Comandos de bloqueio: BLPOP, BRPOP, BRPOPLPUSH e XREAD ... 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.

image

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:

  1. 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.

  2. 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.

  3. Falha no pool: O proxy cria uma nova conexão. Depois que a requisição é concluída:

    1. Se o pool não tiver atingido o limite (private_conn_pool_max_idle_per_db), a conexão é adicionada ao pool.

    2. 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:

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.

  1. 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.

  2. No painel de navegação à esquerda, clique em Parameter Settings.

  3. Localize private_conn_pool_enabled e clique em Modify na coluna Actions.

  4. Na caixa de diálogo, defina o valor como 1 e 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

private_conn_pool_enabled

Ativa ou desativa o pool de conexões. 1: ativado. 0: desativado.

0

`[0

1]`

private_conn_idle_time_sec

TTL para conexões ociosas no pool, em segundos. Conexões ociosas além desse limiar são fechadas. 0: fecha imediatamente.

60

[0-4294967295]

private_conn_pool_max_idle_per_db

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

[0-4294967295]

private_conn_pool_min_idle_per_db

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 private_conn_idle_time_sec.

0

[0-4294967295]

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_db alto 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, reduza private_conn_idle_time_sec para 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_db para corresponder ao número de consumidores concorrentes. Configure private_conn_pool_min_idle_per_db ligeiramente 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_db e private_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_db pode 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 SELECT para 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 SUBSCRIBE e PSUBSCRIBE. Eles ocupam permanentemente uma conexão e não são gerenciados pelo pool.

Referências