Chaves grandes e chaves quentes podem degradar o desempenho do service, causar timeouts em requisições ou até mesmo provocar falhas no sistema. Este tópico descreve como localizar e otimizar rapidamente essas chaves. Também analisa suas causas e efeitos, além de fornecer medidas preventivas para reduzir o impacto nos seus negócios.
Etapa 1: Localize rapidamente chaves grandes e quentes
Ferramentas do console Alibaba Cloud
Tair and Redis oferecem os recursos Top Key Statistics e Offline Full Key Analysis no console para ajudar você a identificar rapidamente chaves grandes e quentes.
|
Método |
Limites |
Descrição |
Procedimento |
|
Top Key Statistics (Recomendado) |
Este recurso é compatível apenas com o Redis Open-Source Edition 5.0 ou posterior e com instâncias de memória otimizada e memória persistente do Tair (Enterprise Edition). |
|
|
|
Este recurso não é compatível com instâncias baseadas em disco. |
|
Caso sua instância não seja compatível com esses recursos, utilize os métodos abaixo.
Outros métodos para localizar chaves grandes e quentes
Etapa 2: Otimize chaves grandes e quentes
Chaves grandes
|
Solução |
Cenários |
Ações recomendadas |
|
Limpe dados expirados |
Acúmulo de grande volume de dados expirados, como dados incrementais não limpos em um HASH. |
Utilize o comando HSCAN combinado com o comando HDEL para limpar dados inválidos. Isso evita o bloqueio da instância, que pode ocorrer ao limpar uma grande quantidade de dados de uma só vez. |
|
Comprima chaves grandes |
Dados compressíveis, como texto JSON e XML, incluindo logs e configurações. |
Nota
As operações de compactação e descompactação consomem recursos extras de CPU e podem afetar o desempenho do processamento. |
|
Divida chaves grandes |
Estruturas de dados como HASH e ZSET frequentemente acessadas, como tabelas de classificação. |
A divisão de chaves grandes previne eficazmente a distorção de dados. |
|
Descarregue chaves grandes |
Arquivos grandes ou Binary Large Objects (BLOBs) do tipo String. |
Armazene dados inadequados em outros sistemas de armazenamento, como o OSS, e exclua-os da instância.
|
Chaves quentes
|
Solução |
Cenários |
Ações recomendadas |
|
Replicar chaves quentes em arquitetura cluster |
Uma chave quente é armazenada integralmente em um único shard, e as requisições não podem ser distribuídas migrando dados parciais. |
Copie a chave quente e migre as réplicas para outros shards de dados. Por exemplo, copie uma chave quente chamada Nota
A desvantagem desta solução é a necessidade de modificar seu código para manter múltiplas réplicas, sendo difícil garantir a consistência de dados entre elas. Por exemplo, uma operação de atualização deve ser sincronizada em todas as réplicas. Utilize esta solução como medida temporária para mitigar problemas urgentes. |
|
Cargas de trabalho com muitas leituras e poucas escritas |
Se a carga de requisições de leitura ainda estiver alta após ativar este recurso, adicione mais nós somente leitura para aliviar ainda mais a carga. Nota
Em cenários com volumes de requisição extremamente altos, a sincronização primário/secundário inevitavelmente terá latência, o que pode causar leitura de dados inconsistentes. Portanto, não ative a divisão de leitura/escrita em cenários com alta pressão de leitura e escrita e requisitos rigorosos de consistência de dados. Após ativar a divisão de leitura/escrita, se a CPU do nó mestre permanecer alta enquanto os nós somente leitura ficarem ociosos, geralmente há dois motivos. Primeiro, a divisão de leitura/escrita descarrega apenas requisições de leitura — requisições de escrita (incluindo escritas em chaves quentes) são sempre tratadas pelo nó mestre. Segundo, alguns comandos de leitura seguem regras especiais de encaminhamento: por exemplo, o comando SCAN é sempre encaminhado para o nó mestre (enquanto HSCAN, SSCAN e ZSCAN são distribuídos uniformemente entre o mestre e os nós somente leitura por módulo de slot), então o uso intenso de SCAN mantém a CPU do nó mestre alta. Para as regras de roteamento, consulte Read/write splitting. Nesses casos, divida as chaves quentes, mude para comandos como HSCAN ou Change the shard count of a cluster instance para distribuir a pressão no nó mestre. |
Etapa 3: Evite que chaves grandes e quentes afetem seus negócios
Causas de chaves grandes e quentes
No Tair and Redis, a unidade mínima para distribuição de dados é a chave. Uma única chave é armazenada em um shard de dados específico e não é dividida. Fatores como planejamento insuficiente de negócios, acúmulo de dados inválidos e aumentos repentinos no volume de acesso podem levar à geração de chaves grandes e quentes em uma instância. Os exemplos incluem:
|
Categoria |
Causa |
|
Chave grande |
|
|
Chave quente |
|
Efeitos de chaves grandes e quentes
|
Categoria |
Efeito |
|
Chave grande |
|
|
Chave quente |
|
Estratégias de prevenção
|
Estratégia |
Descrição |
|
Defina limiares de alerta razoáveis para métricas como uso de CPU, uso de memória e Connections. Por exemplo, configure um alerta para quando o uso de memória exceder 70% ou quando a memória crescer mais de 20% em uma hora. Quando um alerta for acionado, siga as instruções nas Etapas 1 e 2 deste tópico para localizar e otimizar chaves grandes e quentes. Isso resolve o problema antes que ele afete seus negócios. |
|
|
Use o Tair (Enterprise Edition) para evitar a limpeza de dados inválidos |
Para cenários envolvendo chaves grandes do tipo hash, o Tair (Enterprise Edition) fornece uma estrutura de dados aprimorada, TairHash. Ela suporta a definição de tempo de expiração e versão para cada campo. Usando o TairHash corretamente, reduza significativamente a carga operacional, simplifique a complexidade do código da aplicação e lide eficazmente com problemas causados por chaves grandes e quentes. |