Pular para o conteudo principal

Consistent hashing na prática

Como consistent hashing reduz o caos de redistribuir chaves quando um no entra ou sai do cluster.

Andrews Ribeiro

Andrews Ribeiro

Founder & Engineer

O problema

Imagine um cluster de cache com 10 servidores.

Você manda cada chave para um servidor usando:

hash(chave) % 10

Funciona bem até o dia em que entra mais um servidor.

Agora a conta vira:

hash(chave) % 11

Resultado: uma quantidade enorme de chaves muda de lugar. O cache praticamente invalida inteiro. O banco toma a pancada.

Esse e o problema que consistent hashing tenta resolver.

Modelo mental

Consistent hashing tenta fazer duas coisas ao mesmo tempo:

  • distribuir chaves
  • mexer no menor número possível delas quando o cluster muda

Em vez de pensar em “servidor 1, 2, 3”, pense em um anel.

Tanto os servidores quanto as chaves sao posicionados nesse anel por uma função de hash. Cada chave vai para o primeiro servidor encontrado no sentido horario.

Quando um servidor entra ou sai, só as chaves daquela vizinhanca precisam ser movidas. O resto continua onde estava.

Essa e a ideia central.

Nao significa “nenhuma chave se move”. Significa “um pedaco bem menor se move”. E exatamente isso que torna a tecnica valiosa.

Quebrando o problema

O problema do hashing simples

Hash simples com % N depende diretamente do número de nos.

Se N muda, a conta muda para quase todo mundo. E por isso que quase todas as chaves pulam de servidor.

Para carga distribuida isso e ruim porque:

  • inválida cache em massa
  • gera pico na origem
  • torna reequilibrio muito caro

Como funciona o anel de consistent hashing

No anel, você não pensa “essa chave vai para o servidor 3”. Você pensa “essa chave cai em um ponto do anel e anda no sentido horario até encontrar um servidor”.

Se um novo servidor entra entre dois pontos, só as chaves daquele trecho passam a apontar para ele.

Essa propriedade e o coracao do tema.

Virtual nodes: por que e como

Se voce tiver poucos servidores fisicos, o anel pode ficar desigual. Um no pode acabar com uma faixa grande demais.

Virtual node e a ideia de colocar vários pontos do mesmo servidor no anel.

Em portugues simples:

  • um servidor fisico aparece várias vezes no anel
  • isso ajuda a espalhar melhor a carga
  • quando um servidor sai, a redistribuição fica mais suave

Onde consistent hashing e usado na prática

Ele aparece muito em:

  • cache distribuido
  • particionamento por chave
  • roteamento de dados por dono
  • alguns bancos e sistemas de armazenamento

Nao e um tema de concurso. E um mecanismo pratico para fazer cluster crescer sem jogar tudo para cima.

Também vale lembrar o que ele não resolve sozinho:

  • hot key
  • no lento
  • desbalanceamento causado por chave ruim de negócio

Consistent hashing melhora redistribuição. Não apaga todos os problemas de distribuição.

Como consistent hashing aparece em entrevistas

Geralmente aparece quando o entrevistador percebe que você propoe vários nos e quer saber como as chaves vao parar em cada um.

Se você disser só “divido por hash” e parar ali, pode perder um ponto importante: o que acontece quando o cluster muda.

Exemplo simples

Imagine um cache distribuido para perfil de usuário.

Com % N, adicionar um servidor numa promocao grande pode mover quase tudo. O cache esquenta do zero. A origem sofre.

Com consistent hashing, a entrada do novo servidor move só uma parte das chaves. O resto do cluster continua atendendo normalmente. O aquecimento acontece em pedaco menor e com menos trauma.

Nao e magia. Ainda existe redistribuicao. So deixa de ser uma avalanche.

Erros comuns

  • Explicar só o anel sem antes mostrar o problema do % N.
  • Ignorar o papel de virtual nodes.
  • Falar de consistent hashing como se resolvesse tudo sozinho.
  • Usar o termo para parecer profundo sem ligar a um caso concreto.
  • Esquecer que hot key continua sendo problema mesmo com distribuição boa.

Como um senior pensa

Quem tem mais experiencia costuma comecar pelo motivo de existir:

“Eu não quero que mudar o tamanho do cluster invalide quase todas as chaves.”

Só depois entra no anel, nos virtuais e detalhes.

Isso melhora muito a explicacao porque o leitor entende primeiro a dor e depois a tecnica.

Em trabalho real, isso também ajuda a evitar uso teatral. Se o cluster quase nunca muda ou se a redistribuição não e cara, talvez o ganho não pague a complexidade. O tema vale quando o custo de mexer em muitas chaves ao mesmo tempo realmente machuca.

O que o entrevistador quer ver

Em entrevista, consistent hashing fica forte quando você:

  • explica o fracasso do % N
  • mostra por que o anel reduz redistribuição
  • cita virtual nodes sem transformar isso em ritual
  • conecta o tema a cache ou sharding real

Consistent hashing nao e sobre desenhar um circulo bonito. E sobre crescer um cluster sem chacoalhar quase todas as chaves junto.

Resumo rápido

O que vale manter na cabeça

Checklist de pratica

Use isto ao responder

Você concluiu este artigo

Próximo artigo Bugs assíncronos e race conditions Artigo anterior Idempotência em APIs

Continue explorando

Artigos relacionados