Nas instâncias do Tair (Redis OSS-compatible) que utilizam a arquitetura de cluster ou a arquitetura de separação de leitura/escrita, os nós de proxy são responsáveis pelo roteamento de requisições, balanceamento de carga e failover. Os nós de proxy simplificam a lógica do lado do cliente e oferecem suporte a recursos avançados, como múltiplos bancos de dados (DBs) e cache de hotkeys. Compreender as regras de roteamento dos nós de proxy e como eles tratam comandos específicos ajuda a projetar sistemas de negócio mais eficientes.
Visão geral dos nós de proxy
O nó de proxy é um componente independente em uma instância do Tair. Ele não consome recursos dos shards de dados. O Tair utiliza múltiplos nós de proxy para implementar balanceamento de carga e failover.
|
Capacidade |
Descrição |
|
Transição de modo de uso para instâncias de cluster |
Os nós de proxy fazem a ponte entre arquiteturas, permitindo utilizar uma instância com arquitetura de cluster como se fosse uma instância standalone. Os nós de proxy oferecem suporte a operações cross-slot para comandos que gerenciam múltiplas chaves, como DEL, EXISTS, MGET, MSET, SDIFF e UNLINK. Para mais informações, consulte List of commands supported in proxy mode. Quando uma instância com arquitetura standalone não atende mais às necessidades do seu negócio, você pode migrar os dados para uma instância com arquitetura de cluster com nós de proxy sem precisar modificar o código. Isso reduz significativamente os custos de transformação do negócio. |
|
Balanceamento de carga e roteamento de requisições |
Os nós de proxy estabelecem conexões persistentes com os shards de dados no backend e tratam o roteamento de requisições e o balanceamento de carga. Para mais informações sobre roteamento, consulte Routing rules of proxy nodes. |
|
Gerenciamento de tráfego para réplicas de leitura |
Os nós de proxy monitoram continuamente o status das réplicas de leitura e controlam o tráfego nas seguintes situações:
|
|
Após ativar o recurso de proxy query cache, os nós de proxy armazenam em cache as requisições que contêm hotkeys e suas respostas correspondentes. Quando um nó de proxy recebe a mesma requisição dentro do período de validade do cache, ele retorna o resultado diretamente ao cliente sem interagir com os shards de dados no backend. Isso ajuda a mitigar a assimetria de acesso causada por um grande volume de requisições de leitura em hotkeys. Nota
Você pode ativar esse recurso definindo o parâmetro query_cache_enabled parameter. Esse recurso está disponível apenas para instâncias Tair Memory-optimized e Persistent Memory-optimized. |
|
|
Suporte a múltiplos bancos de dados (DBs) |
No modo cluster, o Redis nativo e os clientes de cluster não oferecem suporte a múltiplos bancos de dados (DBs). Eles utilizam apenas o banco de dados padrão Nota
Se você utilizar um cliente StackExchange.Redis, é necessário usar a versão 2.7.20 ou posterior. Caso contrário, um erro ocorrerá. Para mais informações, consulte o StackExchange.Redis upgrade announcement. |
À medida que a tecnologia de proxy evolui, o número de nós de proxy não é o único fator que determina a capacidade de processamento. A Alibaba Cloud garante que a proporção de nós de proxy em uma instância de cluster atenda aos requisitos especificados.
Regras de roteamento dos nós de proxy
Para mais informações sobre comandos, consulte Command overview.
|
Arquitetura |
Regra de roteamento |
Descrição |
|
Arquitetura de cluster |
Regras básicas de roteamento |
|
|
Regras de roteamento para comandos específicos |
|
|
|
Arquitetura de separação de leitura/escrita |
Regras básicas de roteamento |
|
|
Regras de roteamento para comandos específicos |
|
Proxy query cache
Os nós de proxy podem armazenar em cache requisições que contêm hotkeys e seus respectivos resultados de consulta. Quando um nó de proxy recebe a mesma requisição dentro do período de validade do cache, ele retorna o resultado diretamente ao cliente sem interagir com os shards de dados no backend. Esse recurso pode mitigar ou evitar a degradação de desempenho causada pela assimetria de acesso decorrente de um alto volume de requisições de leitura em hotkeys.
O kernel do banco de dados identifica uma hotkey por meio de algoritmos de ordenação e estatísticos, de forma semelhante ao Hot Key (QPS) do recurso Top Key Analytics. Por padrão, uma chave é identificada como hotkey quando seu QPS ultrapassa 5.000. Você também pode personalizar esse limiar por meio do parâmetro
bigkey-threshold.Se uma hotkey for modificada enquanto seus dados estiverem em cache, as alterações não serão sincronizadas com o cache. Isso significa que requisições subsequentes podem ler dados desatualizados do cache até que a entrada expire. Você pode reduzir o período de validade do cache de acordo com as necessidades do seu negócio.
Os nós de proxy não armazenam a hotkey inteira em cache. Em vez disso, eles armazenam as requisições que contêm a hotkey e os resultados de consulta correspondentes.
Esse recurso está disponível apenas para instâncias Tair Memory-optimized e Persistent Memory-optimized que utilizam a arquitetura de cluster no modo proxy ou a arquitetura de separação de leitura/escrita.
Casos de uso
Esse recurso é adequado para cenários como listas de assuntos em alta, perfis de usuários populares e anúncios de jogos, nos quais as aplicações toleram dados levemente desatualizados.
Arquitetura
Utilização
Esse recurso está desabilitado por padrão. Para ativá-lo, defina o parâmetro query_cache_enabled parameter.
Parâmetros
Você pode usar os comandos QUERYCACHE KEYS, QUERYCACHE INFO e QUERYCACHE LISTALL, desenvolvidos pelo Tair, para visualizar a utilização do proxy query cache do Tair.
Comandos
Uso de conexões
Normalmente, um nó de proxy estabelece conexões persistentes com os shards de dados para processar requisições. No entanto, quando uma requisição inclui um dos comandos a seguir, o nó de proxy cria conexões adicionais e não agregáveis nos shards de dados correspondentes com base nos requisitos do comando. Nesses casos, o número máximo de conexões da instância é limitado pelo limite de conexões de um único shard de dados. Para saber o limite de conexões de um único shard, consulte as especificações da sua instância. Utilize esses comandos com cuidado para evitar exceder o limite de conexões.
No modo proxy, o número máximo de conexões para cada shard de dados é 10.000 para instâncias Redis Open-Source Edition e 30.000 para instâncias Tair (Enterprise Edition).
Comandos de bloqueio: BRPOP, BRPOPLPUSH, BLPOP, BZPOPMAX, BZPOPMIN, BLMOVE, BLMPOP e BZMPOP.
Comandos de transação: MULTI, EXEC e WATCH.
Comandos MONITOR: MONITOR, IMONITOR e RIMONITOR.
Comandos de assinatura: SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, SSUBSCRIBE e SUNSUBSCRIBE.
Perguntas frequentes
-
É possível encaminhar scripts Lua que executam apenas operações de leitura para réplicas de leitura?
Sim, é possível encaminhar scripts Lua que executam apenas operações de leitura para réplicas de leitura. No entanto, os seguintes requisitos devem ser atendidos:
Uma conta somente leitura deve ser utilizada. Para mais informações, consulte Create and manage accounts.
O parâmetro readonly_lua_route_ronode_enable deve estar definido como 1 na sua instância Tair. O valor 1 indica que scripts Lua que executam apenas operações de leitura são roteados para réplicas de leitura. Para mais informações, consulte Configure instance parameters.
-
P: Qual é a diferença entre o modo proxy e o modo de conexão direta? Qual modo é recomendado?
R: Recomendamos o modo proxy. As diferenças são as seguintes:
Modo proxy: os nós de proxy encaminham as requisições dos clientes para os shards de dados. Esse modo oferece recursos como balanceamento de carga, separação de leitura/escrita, failover, proxy query cache e conexões persistentes.
Modo de conexão direta: você pode usar um endpoint de conexão direta para ignorar os nós de proxy e conectar-se diretamente aos shards de dados no backend. Esse modo é semelhante a conectar-se a um cluster Redis nativo. Em comparação com o modo proxy, o modo de conexão direta reduz a sobrecarga de processamento do proxy e melhora a latência de resposta.
-
P: Como as leituras e escritas de dados são afetadas se um shard de dados no backend ficar indisponível?
Cada shard de dados utiliza uma arquitetura de alta disponibilidade master-réplica. Se um nó master falhar, o sistema realiza automaticamente um failover para garantir a alta disponibilidade. A tabela a seguir descreve o impacto de uma falha de shard de dados nas leituras e escritas em cenários extremos e apresenta soluções de otimização.
Cenário
Impacto e otimização
Figura 1. Comandos multi-key

-
Impacto:
Um cliente envia quatro requisições por meio de quatro conexões. Se o shard de dados 2 ficar indisponível, apenas a Requisição 1 (GET Key1) conseguirá ler os dados com sucesso. As requisições roteadas ao shard de dados 2 expiram por timeout.
-
Otimização:
-
Reduza o uso de comandos multi-key, como MGET, ou diminua o número de chaves em uma única requisição. Isso evita que a requisição inteira falhe devido à indisponibilidade de um único shard de dados.
-
Reduza o uso de comandos de transação ou diminua o tamanho das transações. Isso evita que a falha de uma subtransação comprometa a transação inteira.
-
Figura 2. Conexão única

-
Impacto:
Um cliente envia duas requisições separadas por meio de uma única conexão. Se o shard de dados 2 ficar indisponível, a Requisição 2 (GET Key2) expira por timeout. Como a Requisição 1 (GET Key1) compartilha a mesma conexão, ela também falha ao retornar um resultado.
-
Otimização:
-
Evite ou reduza o uso de pipeline.
-
Evite clientes que suportam apenas uma única conexão. Recomendamos o uso de clientes que suportem pool de conexões. Para mais informações, consulte Client connection tutorial. Certifique-se de configurar um timeout e um tamanho de pool de conexões adequados.
-
-