Marcio Cunha

Database Sharding vs Read Replicas: Como Escalar Bancos de Dados Relacionais

Descubra quando utilizar réplicas de leitura para aliviar consultas ou recorrer ao sharding para distribuir dados e alcançar milhões de requisições com bancos relacionais.

Marcio Cunha12 min
Também disponível em:EnglishEspañol
Resumo
  • Read replicas reduzem a carga de leitura no banco principal ao duplicar dados de forma assíncrona para outros servidores.
  • A replicação assíncrona gera o problema de lag de replicação, onde dados recentes podem não aparecer imediatamente nas consultas.
  • Database sharding divide fatias de dados entre servidores independentes para resolver limites físicos de escrita e armazenamento.
  • O roteamento de consultas em ambientes fragmentados exige chaves de partição bem planejadas para evitar gargalos em hotspots.
  • Sistemas de alta escala combinam as duas abordagens, aplicando fragmentação para gravações pesadas e réplicas para leituras intensivas.

O Dilema da Escalabilidade em Bancos Relacionais

Quando uma aplicação digital cresce e atinge milhões de usuários ativos, o banco de dados costuma ser o primeiro componente a sofrer com a lentidão. Sistemas relacionais tradicionais, como PostgreSQL e MySQL, funcionam incrivelmente bem em servidores únicos até que o volume de acessos esgote a capacidade de processamento da CPU, a memória RAM ou o espaço em disco. Na prática, isso significa que a sua aplicação começa a demorar segundos para responder a um simples clique, gerando frustração e abandono de usuários.

Para contornar esse problema sem precisar migrar para bancos de dados não relacionais complexos, os engenheiros recorrem a duas estratégias principais de arquitetura de dados: read replicas e database sharding. Ambas resolvem o gargalo de desempenho, mas abordam a carga de trabalho de maneiras completamente diferentes. Entender os trade-offs, ou seja, as vantagens e desvantagens de cada escolha, é o que separa um sistema que cai na Black Friday de uma plataforma que roda de forma estável.

Como Funcionam as Read Replicas para Distribuir Consultas

A estratégia de read replicas, ou réplicas de leitura, baseia-se no conceito de divisão de tarefas entre o servidor principal e cópias secundárias dele. O banco de dados principal, conhecido como master ou gravador, lida com todas as operações de escrita, como cadastros de usuários, compras e atualizações de perfil. Em seguida, os dados alterados são copiados de forma automatizada para outras máquinas chamadas de réplicas, que ficam responsáveis exclusivamente por atender às consultas de leitura, como exibir feeds ou relatórios.

Na prática, se o seu site recebe cem leituras para cada gravação realizada, direcionar essas cem leituras para três servidores secundários alivia drasticamente a pressão sobre o banco principal. No entanto, surge um fenômeno conhecido como lag de replicação, que é o pequeno atraso temporal entre a gravação no master e a sincronização na réplica. Se um usuário altera o nome no perfil e atualiza a página imediatamente, ele pode ver o nome antigo caso a requisição caia em uma réplica que ainda não recebeu a atualização.

O Impacto do Lag de Replicação e Como Mitigá-lo

Lidar com o atraso na sincronização exige decisões inteligentes de roteamento de tráfego na camada de aplicação. Quando a consistência imediata é mandatória, como no processo de checkout de um e-commerce ou na confirmação de uma transferência bancária, a requisição deve ser direcionada obrigatoriamente para o servidor principal. Para leituras tolerantes a pequenos atrasos, como a listagem de produtos ou o histórico de navegação, as réplicas entram em ação com total eficiência.

Alguns sistemas modernos utilizam estratégias de leitura baseadas em sessão, garantindo que, após uma escrita, o usuário seja direcionado por alguns segundos para o próprio banco principal ou para uma réplica já atualizada. Essa engenharia evita que o cliente perceba inconsistências visuais, mantendo a experiência fluida sem sobrecarregar o núcleo do sistema de armazenamento relacional.

O que é Database Sharding e Quando Ele se Torna Necessário

Quando nem mesmo dezenas de réplicas de leitura dão conta do volume de dados, ou quando o gargalo principal passa a ser a gravação e o armazenamento físico, entra em cena o database sharding, ou fragmentação de banco de dados. Sharding consiste em dividir a base de dados gigante em pedaços menores e gerenciáveis chamados shards, onde cada pedaço reside em um servidor de banco de dados totalmente independente e separado dos demais.

Para ilustrar com um exemplo prático, imagine uma tabela de usuários com bilhões de linhas. Em vez de guardar tudo no mesmo servidor, você pode fragmentar os dados com base na região geográfica do usuário: clientes da América do Norte ficam armazenados no shard A, enquanto clientes da Europa ficam no shard B. Dessa forma, as operações de leitura e escrita distribuem-se fisicamente entre hardwares distintos, eliminando o limite de capacidade de uma única máquina.

Os Desafios Arquiteturais e Operacionais do Sharding

Apesar de resolver o problema de escala de escrita e armazenamento, o sharding introduz uma complexidade operacional severa na arquitetura da aplicação. Executar consultas complexas que cruzam dados de diferentes shards, como um relatório global de vendas que envolve clientes de várias regiões, torna-se uma tarefa computacionalmente custosa e lenta, exigindo que a aplicação faça buscas paralelas e consolide os resultados na memória.

Outro risco crítico é a criação de hotspots, que ocorrem quando uma chave de partição é mal escolhida. Se você dividir os dados pelo domínio de e-mail e noventa por cento dos seus usuários utilizarem o mesmo provedor de e-mail popular, quase todo o tráfego do sistema continuará concentrado em um único shard, anulando os benefícios da distribuição e sobrecarregando novamente um único servidor.

Estratégias de Roteamento e Escolha da Chave de Partição

O sucesso de uma arquitetura fragmentada depende diretamente da escolha correta da chave de partição, que é o campo utilizado para determinar em qual servidor cada registro será armazenado. Chaves baseadas em identificadores únicos sequenciais ou em hashes bem distribuídos evitam que determinados servidores fiquem sobrecarregados enquanto outros permanecem ociosos.

Além disso, a camada de acesso a dados precisa ser inteligente para saber exatamente para qual endereço de rede enviar cada consulta SQL. Muitas empresas utilizam proxies de banco de dados dedicados ou bibliotecas customizadas no código da aplicação para interceptar as chamadas e roteá-las instantaneamente para o shard correto, blindando a lógica de negócio dessa complexidade de infraestrutura.

Conclusão: Como Escolher a Abordagem Ideal para Seu Sistema

A escolha entre read replicas e database sharding não precisa ser excludente, pois grande parte das empresas de tecnologia de grande porte utiliza ambas as abordagens em conjunto. As réplicas de leitura resolvem o problema imediato de tráfego intenso de consultas com baixo custo operacional e implementação rápida, sendo o primeiro passo natural para qualquer sistema em crescimento acelerado.

Por outro lado, o database sharding é a ferramenta definitiva para quando o volume de dados e a taxa de escrita ultrapassam os limites físicos do hardware moderno. Compreender o perfil de uso da sua aplicação, monitorar gargalos de I/O e planejar a arquitetura de dados com antecedência garantem que o sistema suporte o crescimento contínuo sem surpresas desagradáveis em produção.