Decisão: sharding ou replicação (escalabilidade)?
A decisão de escalabilidade do banco depende de o gargalo estar nas leituras ou nas gravações e de os dados caberem em um único nó. A estratégia errada significa complexidade desnecessária ou um gargalo não resolvido. Esta árvore primeiro lembra as opções mais baratas e simples (escala vertical, cache) e depois ajuda a escolher corretamente entre read replicas e sharding.
Você tentou primeiro o caminho mais simples: escala vertical e tuning de consultas?
Antes de partir para uma arquitetura distribuída, aproveite o ganho mais barato: aumentar o hardware (CPU/RAM/IOPS), adicionar índices ausentes e corrigir consultas caras resolve a maioria dos gargalos. Adicione complexidade somente quando essas opções se esgotarem.
- Não / ainda não cheguei ao limite
- Sim, escala vertical e tuning não bastam
O gargalo está nas leituras, ou nas gravações/volume de dados?
Isole a origem do problema de escalabilidade: muitas consultas de leitura estão sufocando um único nó (carga de leitura), ou a taxa de gravação ou o tamanho total dos dados excede a capacidade de um único nó (carga de gravação/volume)? Essa distinção é a diferença fundamental entre réplicas e sharding.
- O tráfego de leitura predomina, as gravações cabem em um único nó
- A taxa de gravação ou o volume de dados excede um único nó
As leituras são repetitivas/cacheáveis, ou atuais e variadas?
Divida o gargalo de leitura mais um passo: os mesmos resultados são lidos repetidamente (um cache é muito eficaz), ou as leituras pedem dados variados, amplos e atuais (é necessária capacidade de leitura extra)? Isso decide entre uma camada de cache e read replicas.
- Os mesmos dados são lidos repetidamente, uma leve defasagem é aceitável
- Leituras variadas/atuais, é necessária capacidade bruta de leitura
Recomendação: escala vertical + tuning de consultas primeiro
O primeiro e mais barato caminho antes de partir para uma arquitetura distribuída. Aumentar o hardware e corrigir consultas/índices resolve a maioria dos problemas de escalabilidade sem adicionar complexidade operacional.
Recomendação: read replicas (escala de leitura)
As gravações permanecem em um único nó (o primário) enquanto o tráfego de leitura é distribuído para uma ou mais réplicas. É a forma padrão de aumentar a capacidade bruta de leitura e a resiliência em cargas com muitas leituras.
Recomendação: camada de cache
Manter resultados relidos com frequência em uma camada rápida em memória reduz drasticamente a carga do banco. Com o padrão correto, responde sem ir ao banco, reduzindo tanto a latência quanto a carga.
Recomendação: sharding (escala de gravação/dados)
Os dados são divididos por uma shard key e distribuídos entre vários nós independentes; cada nó é dono de uma fatia dos dados e de suas gravações. É a forma de escalar a taxa de gravação e o volume total de dados, mas adiciona complexidade significativa.