Pular para o conteúdo

Arquitetura real · Sênior

Sharding por cliente e o shard 1 que cresceu demais

Uma decisão e uma dívida documentadas: o shard 1 concentrou os early adopters. Depois, a separação de contas AWS e um ETL de quotas. Bom para "escolha a shard key" e "estime o que estoura primeiro".

17 min de leitura · Fonte: Nubank · Conteúdo revisado em 23 de outubro de 2026

Resposta curta

Uma decisão e uma dívida documentadas: o shard 1 concentrou os early adopters. Depois, a separação de contas AWS e um ETL de quotas. Bom para "escolha a shard key" e "estime o que estoura primeiro". No podcast da InfoQ, Lucas Cavalcanti, do Nubank, conta que a arquitetura inicial de implantação comportava 500.000 clientes com folga e que a equipe…

01 · CONTEXTO

Uma arquitetura que não durou o previsto

No podcast da InfoQ, Lucas Cavalcanti, do Nubank, conta que a arquitetura inicial de implantação comportava 500.000 clientes com folga e que a equipe achava que viveria com ela por alguns anos.

Segundo ele, quando a empresa começou não havia Kubernetes nem Docker, e a empresa cresceu mais rápido do que o projeto de migrar tudo para Docker ou para estruturas melhores na AWS. O projeto de sharding nasceu daí, da escolha inicial de implantação na AWS.

A nuvem permite escalar na vertical e, em alguns casos, na horizontal, mas ele diz que se chega a um limite, e foi por causa dele que o sharding precisou ser feito. Esse é o ponto de partida do caso: escalar na vertical e na horizontal tem teto.

  1. O diagrama mostra uma única implantação dos serviços atendendo todos os clientes.

    Diagrama da arquitetura: Implantação única para todos os clientes
    CLTodos os clientes
    CPImplantação única dos serviços
    DBBanco de dados
  2. A mesma implantação lê e grava em um único banco de dados.

    Diagrama da arquitetura: Implantação única para todos os clientes
    CLTodos os clientes
    CPImplantação única dos serviços
    DBBanco de dados
  3. Escalar esse bloco na vertical, ou algumas instâncias na horizontal, chega a um limite na nuvem, e o relato liga o projeto de sharding a esse limite.

    Diagrama da arquitetura: Implantação única para todos os clientes
    CLTodos os clientes
    CPImplantação única dos serviçoschega ao limite
    DBBanco de dados

02 · A DECISÃO

Separar por cliente

A decisão de sharding foi separar por cliente: um shard guarda um conjunto de clientes e todos os dados desses clientes, e outro shard pode ter um conjunto diferente.

  1. No diagrama com shards, cada grupo de clientes tem a sua própria pilha: serviços, banco e Kafka.

    Diagrama da arquitetura: Shards por cliente
    CLClientes do primeiro shard
    CPServiços do primeiro shard
    DBBanco do primeiro shard
    QKafka do primeiro shard
    CLClientes do segundo shard
    CPServiços do segundo shard
    DBBanco do segundo shard
    QKafka do segundo shard
    CLClientes do terceiro shard
    CPServiços do terceiro shard
    DBBanco do terceiro shard
    QKafka do terceiro shard
  2. O segundo shard guarda um conjunto diferente de clientes e todos os dados deles.

    Diagrama da arquitetura: Shards por cliente
    CLClientes do primeiro shard
    CPServiços do primeiro shard
    DBBanco do primeiro shard
    QKafka do primeiro shard
    CLClientes do segundo shard
    CPServiços do segundo shard
    DBBanco do segundo sharddados do conjunto
    QKafka do segundo shard
    CLClientes do terceiro shard
    CPServiços do terceiro shard
    DBBanco do terceiro shard
    QKafka do terceiro shard
  3. O terceiro shard repete a mesma estrutura, de modo que o desenho cresce por cópias.

    Diagrama da arquitetura: Shards por cliente
    CLClientes do primeiro shard
    CPServiços do primeiro shard
    DBBanco do primeiro shard
    QKafka do primeiro shard
    CLClientes do segundo shard
    CPServiços do segundo shard
    DBBanco do segundo shard
    QKafka do segundo shard
    CLClientes do terceiro shard
    CPServiços do terceiro shard
    DBBanco do terceiro shard
    QKafka do terceiro shard

Na palestra publicada pela InfoQ, ele diz que o sharding ajudou muito a escalar na fase de consolidação, quando um caso raro que afetava 0,1% dos clientes passou a atingir milhares de clientes.

03 · A DÍVIDA

O primeiro shard que cresceu demais

Quando o projeto de sharding terminou, o primeiro shard estava maior do que deveria. Cavalcanti explica que não só o número de clientes pesa, mas também o tempo de casa de cada um.

Os primeiros clientes de uma startup são early adopters e os que mais usam o produto. O primeiro shard acabou com os clientes mais engajados, mais dados e mais clientes, porque o projeto de sharding demorou demais.

  1. O primeiro shard reúne os clientes mais antigos, os early adopters, que mais usam o produto.

    Diagrama da arquitetura: Shards por cliente
    CLClientes do primeiro shardearly adopters
    CPServiços do primeiro shard
    DBBanco do primeiro shard
    QKafka do primeiro shard
    CLClientes do segundo shard
    CPServiços do segundo shard
    DBBanco do segundo shard
    QKafka do segundo shard
    CLClientes do terceiro shard
    CPServiços do terceiro shard
    DBBanco do terceiro shard
    QKafka do terceiro shard
  2. O provisionamento desse shard era de quatro a cinco vezes o dos shards criados depois.

    Diagrama da arquitetura: Shards por cliente
    CLClientes do primeiro shard
    CPServiços do primeiro shardprovisionamento maior
    DBBanco do primeiro shardprovisionamento maior
    QKafka do primeiro shard
    CLClientes do segundo shard
    CPServiços do segundo shard
    DBBanco do segundo shard
    QKafka do segundo shard
    CLClientes do terceiro shard
    CPServiços do terceiro shard
    DBBanco do terceiro shard
    QKafka do terceiro shard
  3. Esse shard exigiu ajuste fino de desempenho.

    Diagrama da arquitetura: Shards por cliente
    CLClientes do primeiro shard
    CPServiços do primeiro shardajuste de desempenho
    DBBanco do primeiro shard
    QKafka do primeiro shard
    CLClientes do segundo shard
    CPServiços do segundo shard
    DBBanco do segundo shard
    QKafka do segundo shard
    CLClientes do terceiro shard
    CPServiços do terceiro shard
    DBBanco do terceiro shard
    QKafka do terceiro shard
  4. O diagrama mostra os outros shards com a mesma estrutura do primeiro.

    Diagrama da arquitetura: Shards por cliente
    CLClientes do primeiro shard
    CPServiços do primeiro shard
    DBBanco do primeiro shard
    QKafka do primeiro shard
    CLClientes do segundo shard
    CPServiços do segundo shard
    DBBanco do segundo shard
    QKafka do segundo shard
    CLClientes do terceiro shard
    CPServiços do terceiro shard
    DBBanco do terceiro shard
    QKafka do terceiro shard
  5. Com o tempo foi possível deixar todos os shards com tamanho parecido.

    Diagrama da arquitetura: Shards por cliente
    CLClientes do primeiro shard
    CPServiços do primeiro shardtamanho parecido
    DBBanco do primeiro shard
    QKafka do primeiro shard
    CLClientes do segundo shard
    CPServiços do segundo shardtamanho parecido
    DBBanco do segundo shard
    QKafka do segundo shard
    CLClientes do terceiro shard
    CPServiços do terceiro shardtamanho parecido
    DBBanco do terceiro shard
    QKafka do terceiro shard

Segundo ele, a ideia do sharding no início era evitar ajuste de desempenho, e ainda assim o primeiro shard exigiu ajuste fino.

Sobre clientes fora da curva, a palestra diz que há clientes com 10x ou 100x mais transações que os outros. Para ele, isso afeta basicamente aquele cliente e não os demais, porque a maior parte das operações já é em lote.

Na palestra, ele também diz que o primeiro shard demorou mais que o esperado para ser montado e ficou com clientes antigos demais.

04 · ISOLAMENTO

O shard como unidade de isolamento e de previsão

Um post do blog de engenharia do Nubank descreve que o sharding foi além do banco: atinge bancos, serviços-chave e clusters inteiros de microsserviços. O Datomic roda vários transactors no Kubernetes, cada um com um subconjunto dos dados, e há vários clusters Kafka para diferentes shards, para espalhar a carga de mensagens.

O post aponta dois objetivos. O primeiro é impedir que problemas localizados se espalhem, porque cada shard é relativamente independente; é uma forma de isolar falhas. O segundo é prever capacidade em unidades menores e mais previsíveis, já que o uso de um shard ajuda a projetar os outros.

AspectoContas enormes (Pangeia)Multi-conta
Organização das contas AWSPoucas contas AWS enormesDomínios e times podem ter a própria conta
Efeito de um incidente pequenoPodia causar uma grande quedaO raio de impacto foi reduzido de forma drástica

05 · QUOTAS

O que estoura primeiro na nuvem

O mesmo post lembra que todo provedor de nuvem impõe limites ou quotas, de balanceadores e instâncias EC2 a armazenamento, e que na escala do Nubank as quotas podem virar gargalo se não forem monitoradas.

  1. O diagrama parte das contas AWS do Nubank.

    Diagrama da arquitetura: Monitoramento de quotas da nuvem
    CPContas AWS
    CPPipeline de ETL
    DBBigQuery
    NWDashboards e mensagens
    CLTimes de domínio
  2. O AWS Limit Smoke Detector é um pipeline de ETL que coleta uso, quota e custo de todas as contas AWS e agrega no BigQuery.

    Diagrama da arquitetura: Monitoramento de quotas da nuvem
    CPContas AWS
    CPPipeline de ETLcoleta
    DBBigQueryagrega
    NWDashboards e mensagens
    CLTimes de domínio
  3. A ferramenta compara continuamente o uso real com as quotas atribuídas e aponta problemas antes de um limite crítico.

    Diagrama da arquitetura: Monitoramento de quotas da nuvem
    CPContas AWS
    CPPipeline de ETLcompara uso e quota
    DBBigQuery
    NWDashboards e mensagens
    CLTimes de domínio
  4. Quando o uso sobe rápido, o Smoke Detector alerta por dashboards e mensagens automáticas, e o time aumenta a quota ou otimiza o consumo do serviço.

    Diagrama da arquitetura: Monitoramento de quotas da nuvem
    CPContas AWS
    CPPipeline de ETL
    DBBigQuery
    NWDashboards e mensagensalerta
    CLTimes de domínioage

06 · NA ENTREVISTA

Como usar o caso

Ao escolher uma chave de shard, pergunte se o tamanho de um shard depende só da contagem de clientes ou também de como eles usam o produto, e se há como distribuir os clientes mais ativos entre os shards.

Ao estimar o que estoura primeiro, liste os recursos que têm quota ou teto, compare o uso atual com cada um e diga como você seria avisado antes de chegar lá.

Perguntas frequentes

O que é Sharding por cliente e o shard 1 que cresceu demais?

Uma decisão e uma dívida documentadas: o shard 1 concentrou os early adopters. Depois, a separação de contas AWS e um ETL de quotas. Bom para "escolha a shard key" e "estime o que estoura primeiro".

O que o design de Sharding por cliente e o shard 1 que cresceu demais cobre?

Ele está organizado nestas seções: Uma arquitetura que não durou o previsto, Separar por cliente, O primeiro shard que cresceu demais, O shard como unidade de isolamento e de previsão, O que estoura primeiro na nuvem e Como usar o caso.

Quanto tempo leva Sharding por cliente e o shard 1 que cresceu demais e qual é o nível?

Leva cerca de 17 minutos para ler e tem nível Sênior.

Agora projete você mesmo

Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.