Para cargas de trabalho com muitas leituras, o Tair (Redis OSS-compatible) permite ativar ou desativar dinamicamente a separação de leitura e escrita. Esse recurso oferece uma solução de alta disponibilidade e alto desempenho para acesso centralizado a dados quentes e leituras de alta concorrência. Em uma instância com separação de leitura e escrita, um componente de proxy desenvolvido pela equipe do Tair da Alibaba Cloud identifica e roteia automaticamente as solicitações de leitura e escrita, além de gerenciar failovers. Isso simplifica a integração, pois não é necessário modifique o código da aplicação para gerencie o roteamento de solicitações ou failovers.
Separação de leitura e escrita na arquitetura padrão
Uma instância com separação de leitura e escrita que utiliza a arquitetura padrão consiste em um nó mestre, uma ou mais réplicas de leitura, servidores proxy e um sistema de alta disponibilidade. As figuras a seguir mostram as arquiteturas.
Figura 1. Cloud-native
Figura 2. Clássica (descontinuada)
Componente | Cloud-native | Clássica (descontinuada) |
Nó mestre | Processa solicitações de escrita e compartilha a carga de leitura com as réplicas de leitura. | |
Réplicas de leitura | Processam solicitações de leitura. As réplicas de leitura têm os seguintes recursos:
| Processam solicitações de leitura. As réplicas de leitura têm os seguintes recursos:
|
Nó de réplica | Qualquer réplica de leitura pode servir como nó de réplica. Se o nó mestre falhar, o sistema de alta disponibilidade promove a réplica de leitura com os dados mais completos para ser o novo nó mestre. Após o switchover, uma nova réplica de leitura é adicionada imediatamente à instância. Como não é necessário um nó de réplica dedicado, as instâncias cloud-native com separação de leitura e escrita oferecem o mesmo desempenho com custo menor. | Um nó standby frio para backup de dados. Ele não processa tráfego. Se o nó mestre falhar, as solicitações passarão por failover para este nó. |
Servidor proxy | Quando um cliente se conecta, o servidor proxy identifica automaticamente o tipo de solicitação e distribui o tráfego para diferentes nós de dados por peso. Todos os nós têm pesos iguais, e os pesos não são personalizáveis. Por exemplo, solicitações de escrita são encaminhadas para o nó mestre, e solicitações de leitura são encaminhadas para o nó mestre e para as réplicas de leitura. Nota
| |
Sistema de alta disponibilidade |
| |
Recursos
-
Dinâmico e fácil de usar
Ative a separação de leitura e escrita para uma instância que usa a arquitetura padrão. O servidor proxy identifica e encaminha inteligentemente as solicitações de leitura e escrita dos clientes. Após ative esse recurso, utilize qualquer cliente compatível com Redis para se conectar à instância com separação de leitura e escrita e melhorar o desempenho de leitura sem modifique sua aplicação. Instâncias com separação de leitura e escrita ativada são compatíveis com comandos do protocolo Redis, mas algumas restrições de comandos se aplicam devido ao proxy. Para obter mais informações, consulte Restrições de comandos para instâncias com separação de leitura e escrita.
-
Alta disponibilidade
Um sistema proprietário de alta disponibilidade da Alibaba Cloud monitora automaticamente a integridade de todos os nós de dados para garantir a disponibilidade da instância. Se um nó mestre ficar indisponível, o sistema seleciona automaticamente um novo nó mestre e reconstrói a topologia de replicação. Caso uma réplica de leitura falhe, o sistema de alta disponibilidade detecta automaticamente a falha, inicia um novo nó para concluir a sincronização de dados e coloca o nó com falha offline.
Os servidores proxy monitoram o status de serviço de cada réplica de leitura em tempo real. Se uma réplica de leitura ficar indisponível, o proxy reduz automaticamente seu peso de serviço. Se uma réplica de leitura falhar mais do que um número especificado de vezes consecutivas, o proxy suspende o serviço para o nó indisponível. O monitoramento continua e o serviço é retomado após a recuperação do nó.
-
Alto desempenho
Escale horizontalmente as réplicas de leitura para aumentar linearmente o desempenho geral de uma instância com separação de leitura e escrita. Otimizações no nível do source no processo de replicação do Redis maximizam a estabilidade do sistema durante a replicação linear e utilizam totalmente os recursos físicos de cada réplica de leitura.
Casos de uso
Este recurso é ideal para cenários com alto volume de consultas de leitura por segundo (QPS). Se sua aplicação tiver muitas leituras, uma instância que usa a arquitetura padrão pode não atender aos seus requisitos de QPS. Nesse caso, implante várias réplicas de leitura para superar o gargalo de desempenho de um único nó. Após ative a separação de leitura e escrita, o QPS de leitura de uma instância pode aumentar em até nove vezes.
Devido ao mecanismo de replicação assíncrona do Redis, pode ocorrer latência na replicação de dados durante períodos de alto volume de escrita. Se você usar esta arquitetura, sua aplicação deve tolerar um certo grau de desatualização dos dados.
Separação de leitura e escrita na arquitetura cluster
Em uma arquitetura cluster, ative a separação de leitura e escrita apenas para instâncias cloud-native executadas no modo proxy. A figura a seguir mostra um exemplo de arquitetura.
Descrições dos componentes
Componente | Descrição |
Servidor proxy | Após um cliente se conectar a um servidor proxy, o proxy identifica automaticamente as solicitações do cliente e as encaminha para os shards de dados apropriados e seus respectivos nós de leitura/escrita. Por exemplo, solicitações de escrita são encaminhadas para o nó mestre, e solicitações de leitura são balanceadas entre o nó mestre e as réplicas de leitura. |
Shard de dados | Cada shard de dados consiste em um nó mestre e até quatro réplicas de leitura.
|
Serviço de alta disponibilidade |
|
Se a instância for implantada em uma única zona de disponibilidade, todos os nós estarão localizados na zona primária, e a instância fornecerá apenas um endpoint para a zona primária.
Caso a instância seja implantada em uma configuração de zona dupla, endpoints separados serão fornecidos para as zonas primária e secundária. Ambos os endpoints suportam operações de leitura e escrita. Solicitações de leitura da zona primária são roteadas para o nó mestre ou réplicas de leitura dentro dessa zona. Solicitações de leitura da zona secundária são roteadas apenas para as réplicas de leitura nessa zona para garantir acesso baseado em proximidade. Todas as solicitações de escrita são roteadas para o nó mestre na zona primária. Se todas as réplicas de leitura na zona secundária ficarem indisponíveis, o sistema roteará as solicitações de leitura dessa zona para o nó mestre para garantir a continuidade dos negócios.
Recomendações e observações de uso
Se uma réplica de leitura falhar, as solicitações serão encaminhadas para outros nós. Caso todas as réplicas de leitura fiquem indisponíveis, todas as solicitações de leitura serão encaminhadas para o nó mestre. Quando réplicas de leitura falham, a carga no nó mestre aumenta, o que pode prolongar seu tempo de resposta. Portanto, recomendamos o uso de múltiplas réplicas de leitura para cargas de trabalho com muitas leituras.
Quando uma réplica de leitura falha, o sistema de alta disponibilidade suspende o serviço para o nó com falha e inicia uma nova réplica de leitura. Esse processo envolve alocação de recursos, crie de instância, sincronização de dados e carregamento de serviço. O tempo necessário depende da carga de trabalho e do volume de dados. O Tair (Redis OSS-compatible) não garante um objetivo de tempo de recuperação para réplicas de leitura.
Uma implantação de separação de leitura e escrita em zona dupla exige que a zona primária tenha pelo menos um nó mestre e uma réplica de leitura. Antes de ative a separação de leitura e escrita para uma instância de arquitetura padrão em zona dupla que possui um nó mestre na zona primária e um nó de réplica na zona secundária, adicione um nó de réplica à zona primária para garantir que ela contenha dois nós. Em seguida, ative a separação de leitura e escrita.
Alguns cenários, como um failover de alta disponibilidade do nó mestre, acionam uma sincronização completa de dados em uma réplica de leitura. Durante uma sincronização completa, a réplica de leitura fica indisponível e retorna a mensagem
-LOADING Redis is loading the dataset in memory\r\n.Alguns comandos de leitura possuem regras especiais de encaminhamento na arquitetura de separação de leitura e escrita. Por exemplo, o comando
SCANé encaminhado para o nó mestre para execute, enquanto o proxy distribui os comandosHSCAN,SSCANeZSCANuniformemente entre o nó mestre e as réplicas de leitura com base em um cálculo de módulo de slot. Para o conjunto completo de regras de encaminhamento, consulte Regras de roteamento do proxy.
Pré-requisitos
Antes de começar, certifique-se de que:
A instância esteja implantada no modo cloud-native
A instância seja uma instância Redis Open-Source Edition ou Tair (Enterprise Edition) otimizada para DRAM ou memória persistente
A instância tenha pelo menos 1 GB de memória
A instância seja de alta disponibilidade
Procedimento
Se você ainda não crie uma instância, ative a separação de leitura e escrita ao crie uma instância.
Se você já possui uma instância cloud-native, ative a separação de leitura e escrita diretamente.
FAQ
-
P: Ative a separação de leitura e escrita para uma instância de arquitetura padrão aumenta sua largura de banda geral?
R: Sim. Após ative a separação de leitura e escrita, a largura de banda total teórica da instância é a largura de banda da especificação da instância multiplicada pelo número total de nós (por exemplo, 96 MB/s × 3 nós = 288 MB/s). Os nós de proxy adicionados encaminham a maioria das solicitações de leitura para as réplicas de leitura, o que reduz a pressão de largura de banda no nó mestre. No entanto, a largura de banda real é afetada por fatores como solicitações de negócios e clientes. A largura de banda real está sujeita aos resultados de testes de estresse.
-
P: Depois de ative a separação de leitura e escrita para uma instância de arquitetura padrão, posso alterar sua arquitetura para a arquitetura cluster?
R: Sim. Primeiro, desative a separação de leitura e escrita e depois altere a arquitetura da instância.
-
P: Como verifico se a separação de leitura e escrita está ativada?
R: Acesse a página Node Management da instância para verificar se a opção read/write splitting está ativada.
-
P: Por que as solicitações de leitura não estão sendo roteadas para minhas réplicas de leitura?
R: Em uma arquitetura de separação de leitura e escrita em zona dupla, as zonas primária e secundária possuem endpoints separados. As solicitações de leitura são roteadas apenas para o nó mestre ou réplicas de leitura dentro da mesma zona. Se você usar apenas o endpoint da zona primária, nenhuma solicitação de leitura será roteada para as réplicas de leitura na zona secundária. Para ative o acesso baseado em proximidade e o balanceamento de carga, diferencie explicitamente os endpoints das zonas primária e secundária no código da sua aplicação e roteie as solicitações da zona secundária para seu endpoint específico.