Carregando
0x60Lição 7 de 13

Particione dados com sharding

Divida os dados entre máquinas e adicione nós sem reembaralhar tudo.

20 min Questionário com 6 perguntas
Ao final desta lição, você saberá
  • Comparar particionamento por intervalo e por hash.
  • Escolher uma chave de shard que evite pontos quentes.
  • Explicar como o hashing consistente limita a movimentação de dados.

Quando os dados ou o tráfego de escrita não cabem mais numa máquina, você faz sharding (particiona): cada nó guarda um subconjunto das linhas. A chave de shard decide onde cada linha fica, e é uma das escolhas de maior impacto num projeto. Uma boa chave tem muitos valores distintos, distribui a carga por igual e mantém no mesmo shard os dados que são consultados juntos.

Estratégias de particionamento

  • Particionamento por intervalo: divide por faixas de chave (A-F, G-M, …). Varreduras por intervalo são eficientes, mas chaves sequenciais, como timestamps, mandam todas as escritas novas para um único shard.
  • Particionamento por hash: coloca as linhas por hash(key). A carga se espalha por igual, mas consultas por intervalo precisam perguntar a todos os shards.
  • Baseado em diretório: um serviço de consulta mapeia chaves para shards. É flexível, mas o diretório precisa ser rápido e altamente disponível.

O esquema ingênuo hash(key) % N tem uma propriedade ruim: quando N muda, a maioria das chaves passa a apontar para outro nó, forçando uma migração enorme de dados.

Um exemplo: pegue 12 chaves distribuídas por key % 3 e passe para key % 4. 9 das 12 chaves mudam de lugar, embora você tenha adicionado só um nó.

O hashing consistente coloca nós e chaves num anel de valores de hash. Cada chave pertence ao primeiro nó no sentido horário a partir dela. Um nó novo só assume as chaves entre ele e o nó anterior - cerca de 1/N dos dados - e um nó removido entrega as suas chaves ao próximo. Cada nó físico costuma ter muitos nós virtuais no anel, para a carga ficar equilibrada. Sistemas como Cassandra e DynamoDB foram construídos sobre essa ideia.

Prática: escolha uma chave de shard

Experimente

Até 15 XP

Compare chaves de shard

Na entrevista, você precisa nomear e defender uma chave de shard. Teste cada uma e observe escritas e leituras juntas. Depois ative o cliente gigante.

Chave de particionamento
  • Shard 10%
  • Shard 20%
  • Shard 30%
  • Shard 4100%
Para ler os pedidos de um cliente
consultar 4 shards
Para ler os pedidos de uma semana
consultar 1 shard

Adicionando um shard: de 4 para 5

hash % número de shards
80% das chaves mudam de lugar
Hashing consistente
24% das chaves mudam de lugar

Prática: adicione um nó a um anel

Experimente

Até 15 XP

Quais chaves mudam de lugar?

Cada chave pertence ao primeiro nó no sentido horário a partir dela. Arraste o nó novo pelo anel e veja quais chaves mudam de dono. Por que tão poucas mudam?

Repare também como os arcos são desiguais. É esse o problema que os nós virtuais resolvem.

10508030

Círculos grandes são nós, e pontos pequenos são chaves, coloridos pelo dono. Chaves com contorno acabaram de mudar.

Chaves movidas no anel
3 de 17
Chaves movidas por hash % N, de 3 para 4
11 de 17

Principais conclusões

  • Escolha uma chave de shard de alta cardinalidade que combine com as suas consultas principais.

  • Particionar por intervalo ajuda nas varreduras, mas arrisca pontos quentes; o hash espalha a carga, mas espalha também os intervalos.

  • O hashing consistente com nós virtuais move só ~1/N das chaves quando entram ou saem nós.

Quiz da aula

6 perguntas · aprovação com 5 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…