Redis Sharding

Redis Sharding
Quando você começa a usar o Redis, é fácil acreditar que você nunca precisará escalá -lo além das configurações padrão. A questão é que, à medida que seu aplicativo cresce, você acabará por precisar de mais memória, CPU e capacidade de transferência para apoiar suas necessidades de negócios. Neste artigo, mostraremos como o Redis Cluster escala com sharding para fornecer a capacidade extra necessária para administrar seu negócio sem problemas e crescer no futuro. Vamos aprender especificamente como o cluster Redis fornece alta taxa de transferência com sharding.

Escalabilidade

Existem duas abordagens comuns para escalar um servidor: escala vertical e escala horizontal. Escala vertical ou dimensionamento é onde você adiciona mais energia e recursos ao seu servidor, como mais CPUs, memória e armazenamento, o que é caro. Por outro lado, a escala horizontal está adicionando vários nós ao seu pool de recursos existente. Isso é chamado de escalar. Portanto, com base em suas limitações e requisitos, cabe a você ter uma única instância do servidor maior ou implantar vários nós do servidor.

Suponha que você tenha 100 GB de RAM e precise manter 200 GB de dados. Nesse caso, você tem duas opções:

  • Escala adicionando mais RAM ao sistema
  • Escala adicionando outra instância do servidor com 100 GB de RAM

Se você atingiu o limite máximo de RAM em sua infraestrutura, a expansão é a abordagem ideal. Além disso, a dimensionamento aumentará a taxa de transferência do banco de dados por uma margem enorme.

Redis Sharding

É um fato conhecido que Redis opera em um único tópico. Portanto, Redis não é capaz de utilizar vários núcleos da CPU do seu servidor para processar comandos. Portanto, a adição de mais núcleos da CPU não oferece muito taxa de transferência ou desempenho com Redis. Não é o caso de dividir seus dados entre várias instâncias de servidor. Adicionando vários servidores e distribuição do conjunto de dados entre os que permitem o processamento de solicitações de clientes paralelas, o que aumenta a taxa de transferência. Além disso, o desempenho geral pode aumentar perto de linearmente.

Essa abordagem de dividir ou distribuir dados entre vários servidores com escala em mente é chamada sharding. Todos os servidores que armazenam partes dos dados são chamados fragmentos.

Como o sharding é feito - sharding algorítmico

Uma das principais preocupações com o sharding foi como localizar uma determinada chave entre vários nós Redis. Como uma determinada chave pode ser armazenada em qualquer fragmento disponível, consultar todos os fragmentos para encontrar uma chave específica não é a melhor opção. Portanto, deve haver uma maneira de mapear cada chave para um fragmento específico, e Redis usa uma estratégia de sharding algorítmico.

A abordagem mais comum é calcular um valor de hash usando o nome de chave Redis e Modulo. Em seguida, divida -o pelos fragmentos Redis disponíveis no sistema.

Hash_slot = CRC16 (chave) Mod 16384

É uma solução bastante boa, desde que o número total de fragmentos seja constante. Sempre que você adiciona uma nova instância do servidor Reids, o valor resultante para uma determinada chave pode mudar, pois o número total de shards aumentou. Acabará consultando o shard Redis errado. Portanto, você deve seguir o processo de remodelação calculando o novo Shard para cada chave e transferindo dados para o servidor correto, que é complicado e não uma tarefa trivial se a sua contagem total de shard estiver aumentando de tempos em tempos.

Redis usa uma nova entidade lógica chamada A slot de hash Para evitar esse problema. Vários slots de hash estão disponíveis para um determinado fragmento, e um único slot de hash pode segurar várias chaves redis. Existem 16384 slots de hash em um cluster de banco de dados Redis que permanece inalterado. A divisão Modulo é feita com o número de slots de hash em vez da contagem de fragmentos. Ele fornece a posição correta do slot de hash para a chave especificada, mesmo quando o número de fragmentos aumentou. Ele simplifica o processo de reformulação, movendo os slots de hash de um fragmento para o novo que divide os dados nas diferentes instâncias do Redis, conforme o requisito.

Benefícios do sharding redis

Redis Sharding permite vários benefícios para o seu sistema de banco de dados com alterações mínimas.

Alta taxa de transferência

Como o Redis é um thread único, o processamento de várias solicitações de clientes não pode processar paralelo usando vários núcleos de CPU. Portanto, adicionar novos shards ou instâncias de servidor garante que você possa executar operações Redis em paralelo. Aumenta as operações por segundo no seu banco de dados Redis, que eventualmente oferece alta taxa de transferência.

Alta disponibilidade

Com a abordagem de sharding, o cluster Redis pode configurar uma arquitetura mestre-replica que garante alta disponibilidade e durabilidade.

Leia réplicas

O sharding permite que você mantenha uma cópia exata de seus dados e forneça operações de leitura por meio de instâncias Redis separadas, o que aumenta o desempenho da sua execução de consulta de leitura.

Além desses benefícios, o sharding pode causar situações de cérebro dividido quando você tem um número uniforme de fragmentos no cluster Redis. Portanto, manter um número estranho de fragmentos em seu cluster Redis é recomendado.

Conclusão

Para resumir, o Sharding Redis está dividindo dados entre vários servidores, o que permite a escala e a alta taxa de transferência para o seu banco de dados. Conforme discutido, Redis usa uma estratégia de sharding algorítmico para apontar as solicitações do cliente para o shard correto. Isso tem algumas desvantagens quando o número total de fragmentos aumenta. Então, em vez do número total de fragmentos, Redis usa o número de slots de hash para calcular o fragmento apropriado. Com o sharding introduzido, os bancos de dados Redis fornecem alta disponibilidade, alta taxa de transferência e alto desempenho.