Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Hash consistente como forma de dimensionar gravações


Há dois motivos para usar vários nós em um cluster:
  • Fragmentação para limitar a quantidade de dados armazenados em cada nó
  • Duplicação para reduzir a carga de leitura e permitir que um nó seja removido sem perda de dados.

Os dois são fundamentalmente diferentes, mas você pode implementar ambos - use hash consistente para apontar para um conjunto de nós com uma configuração mestre/escravo padrão em vez de um único nó.

Se o cluster for seu armazenamento de dados primário em vez de um cache, você precisará de uma estratégia de redistribuição diferente que inclua a cópia dos dados.

Minha implementação é baseada em fazer com que o cliente escolha um dos 64k buckets para um hash e ter uma tabela que mapeie esse bucket para um nó. Inicialmente, todos mapeiam para o nó #1.

Quando o nó #1 fica muito grande, seu escravo se torna o nó #2 mestre e a tabela é atualizada para mapear metade das chaves do nó #1 para o nó #2. Neste ponto, todas as leituras e gravações funcionarão com o novo mapeamento e você só precisa limpar as chaves que agora estão no nó errado. Dependendo dos requisitos de desempenho, você pode verificar todas as chaves de uma vez ou verificar uma seleção aleatória de chaves como o sistema de expiração faz.