Diferença entre replicação do Redis e fragmentação do Redis (cluster)
-
22-09-2019 - |
Pergunta
- Alguém sabe a diferença entre replicação redis e fragmentação redis?
- Para que servem?O Redis armazena dados na memória. Como isso afeta a replicação/fragmentação?
- É possível usar os dois juntos?
Obrigado!
Solução
O sharding é quase a antítese da replicação, embora sejam conceitos ortogonais e funcionem bem juntos.
Sharding, também conhecido como particionamento, está dividindo os dados por chave; Embora a replicação, também conhecida como espelhamento, é copiar todos os dados.
O sharding é útil para aumentar o desempenho, reduzindo a carga de acerto e memória em qualquer recurso. A replicação é útil para alta disponibilidade de leituras. Se você ler de várias réplicas, também reduzirá a taxa de acerto em todos os recursos, mas o requisito de memória para todos os recursos permanece o mesmo. Deve-se notar que, embora você possa escrever para um escravo, a replicação é mestre-> escravo. Portanto, você não pode escalar escreve dessa maneira.
Suponha que você tenha as seguintes tuplas: [1: Apple], [2: banana], [3: cereja], [4: durian] E temos duas máquinas A e B. Com sharding, podemos armazenar chaves 2,4 em máquina a; e chaves 1,3 na máquina B. Com replicação, armazenamos as chaves 1,2,3,4 na máquina A e 1,2,3,4 na máquina B.
O sharding é normalmente implementado executando um hash consistente na chave. O exemplo acima foi implementado com a seguinte função hash h (x) {return x%2 == 0? A: B}.
Para combinar os conceitos, podemos replicar cada fragmento. Nos casos acima, todos os dados (2,4) da máquina A podem ser replicados na máquina C e todos os dados (1,3) da máquina B podem ser replicados na máquina D.
Qualquer loja de valores-chave (da qual Redis é apenas um exemplo) suporta sharding, embora certas funções de chave cruzada não funcionem mais. Redis suporta a replicação pronta para fora.
Outras dicas
Em palavras simples, a diferença fundamental entre os dois conceitos é que Sharding é usado para dimensionar gravações, enquanto Replicação é usada para dimensionar leituras.Como Alex já mencionou, a Replicação também é uma das soluções para alcançar HA.
Sim, ambos normalmente são usados juntos se você considerar como os fragmentos podem ser replicados entre nós em um cluster.
Com relação à sua terceira pergunta, em vez da opção RAM-flush, é melhor usar o arquivo Redis Append Only (AOF).Com apenas um custo menor (em termos de velocidade de gravação), você obtém muito mais confiabilidade em suas gravações.É bem parecido com o log binário do mysql.O 1 fsync/segundo é a opção recomendada para uso.