Pular para o conteúdo

Conceitos

Shuffle sharding

Intuição

Imagine uma central de atendimento com oito atendentes, em que qualquer cliente pode cair com qualquer um deles: um único cliente problemático trava um atendente depois do outro e, no fim, ninguém é atendido. Agora dê a cada cliente uma dupla de atendentes sorteada entre as muitas combinações possíveis, de modo que duas duplas quaisquer raramente coincidam por inteiro. Se um cliente problemático travar a sua dupla, quase todos os outros clientes ainda têm ao menos um atendente livre e, se tentarem de novo, são atendidos.

Como funciona

Sem sharding, todos os workers atendem qualquer requisição: isso é eficiente, mas uma requisição venenosa ou uma enxurrada delas (como num DDoS) derruba o primeiro worker atingido e depois, em cascata, os demais, e o escopo do impacto é 100%. No sharding comum, a frota é dividida em shards fixos (por exemplo, oito workers em quatro shards de dois) e o escopo cai para 1/4, ao custo de mais capacidade ociosa por shard. No shuffle sharding, cada cliente (ou o que se queira isolar) recebe como shard virtual uma combinação de workers; com oito workers e dois por shard existem 28 combinações únicas. Um problema de um cliente atinge o shard virtual dele e, em qualquer outro shuffle shard, no máximo um worker é afetado. Se os solicitantes toleram falhas e contornam o problema, por exemplo com retentativas, os clientes dos demais shuffle shards seguem sem interrupção, porque ainda têm ao menos um worker saudável. Se houver centenas de clientes ou mais, cada um atribuído a um shuffle shard, o escopo do impacto é 1/28, contra 1/4 do sharding comum com quatro shards, ou seja, sete vezes melhor, e, segundo o autor, os números melhoram rapidamente (ele diz "exponencialmente") com mais workers e clientes.

Na prática

No Route 53, segundo o artigo de 2019, a capacidade foi organizada em 2048 servidores de nomes virtuais e cada domínio de cliente recebia um shuffle shard de quatro deles; o artigo fala em 730 bilhões de combinações possíveis, e a atribuição garante que nenhum domínio compartilhe mais de dois servidores virtuais com outro. Quando um domínio sofre DDoS, os quatro servidores virtuais dele recebem o pico de tráfego, mas nenhum outro domínio percebe. Segundo o autor, a AWS incorporou a técnica a muitos outros sistemas seus, e o shuffle sharding é uma forma de arranjar recursos existentes que, em geral, não tem custo adicional. Faz sentido quando uma falha pode ser disparada por um cliente ou tipo de requisição e os solicitantes toleram falhas e tentam de novo.

Use em um desenho

Pratique na escola de System Design os casos que dependem deste conceito.