1

Sharding na entrevista de System Design: você sabe explicar o que acontece quando entra mais um servidor?

Uma das partes mais interessantes de estudar sharding é perceber que distribuir os dados não resolve sozinho o problema de crescer. A regra que você usa para distribuir também precisa aguentar esse crescimento.

Pensa numa estratégia simples: escolher o servidor usando hash(id) % quantidade_de_servidores.

Com quatro servidores, você calcula % 4. Quando adiciona o quinto, passa a calcular % 5. Parece uma mudança pequena, mas boa parte das chaves passa a apontar para outro lugar. Agora você precisa mover dados enquanto o sistema continua recebendo leituras e escritas.

E essa nem é a única dificuldade:

  • Distribuir por faixa facilita algumas consultas, mas pode concentrar as escritas numa única partição. Se a divisão acompanha uma data crescente, por exemplo, os registros novos acabam indo para o mesmo lugar.
  • Usar hash ajuda a espalhar as chaves, mas não garante uma distribuição equilibrada de carga. Um único usuário muito acessado pode continuar sobrecarregando uma partição.
  • Usar hash consistente reduz a redistribuição quando entram ou saem servidores, mas ainda exige cuidar da movimentação dos dados e do balanceamento.

Uma ideia que ajuda a organizar isso é separar as partições lógicas das máquinas físicas. Você distribui os dados em vários grupos e depois associa esses grupos aos servidores. Assim, consegue mover alguns grupos sem precisar redefinir o destino de todas as chaves.

Ainda sobra uma pergunta importante: o que precisa ficar junto? Distribuir por usuário pode facilitar a busca dos dados daquele usuário, mas tornar mais trabalhosa uma consulta que atravessa vários deles. A escolha da chave de particionamento acaba sendo também uma escolha sobre quais operações serão simples e quais ficarão caras.

Preparei um vídeo sobre esse caminho, de particionamento por faixa até hash consistente e partições lógicas, usando exemplos de supermercado, baralho e caixas de mudança. É o quarto episódio de uma série que estou produzindo sobre fundamentos de programação na era da IA.

Vídeo: “Seu sistema fez SUCESSO e foi isso que derrubou seu banco de dados.”
Assistir no YouTube

Pra quem já trabalhou com isso em produção: o que deu mais trabalho, escolher a chave de particionamento, mover os dados ou lidar com as consultas depois?

Carregando publicação patrocinada...