Escalabilidade
Escalabilidade é a capacidade de um sistema crescer para atender mais usuários e carga sem perder performance. Existem duas estratégias principais: escalar verticalmente ou horizontalmente.
O Restaurante Lotado
Quando o restaurante lota, você tem duas opções: colocar mesas maiores (escala vertical — máquina mais potente) ou abrir mais filiais (escala horizontal — mais instâncias). Mesas maiores têm limite físico; filiais podem crescer indefinidamente.
Horizontal vs Vertical
Escala vertical é aumentar CPU/RAM de um servidor — simples mas limitado. Escala horizontal é adicionar mais servidores — mais complexo mas praticamente ilimitado. Sistemas modernos preferem escala horizontal.
Sharding (Particionamento)
Sharding divide os dados entre múltiplos bancos. Exemplo: clientes A-M vão para o banco 1, N-Z para o banco 2. Cada banco processa menos dados, e o sistema escala adicionando mais shards.
Cache de Produtos
Ao invés de consultar o banco a cada requisição, guardamos produtos em cache. Isso reduz a carga no banco e acelera as respostas drasticamente.
const cache = new Map<string, { data: Produto; expiraEm: number }>();
async function buscarProduto(id: string): Promise<Produto> {
const cached = cache.get(id);
if (cached && cached.expiraEm > Date.now()) {
return cached.data; // resposta instantânea
}
const produto = await db.produtos.findById(id);
cache.set(id, {
data: produto,
expiraEm: Date.now() + 5 * 60 * 1000 // 5 minutos
});
return produto;
}Load Balancing
O load balancer distribui requisições entre múltiplas instâncias do servidor. Algoritmos comuns: round-robin (reveza), least connections (envia para o menos ocupado), ou weighted (servidores mais fortes recebem mais).
O Caixa do Supermercado
Quando a fila do supermercado cresce, abrem mais caixas (escala horizontal). O fiscal que direciona clientes para caixas vazios é o load balancer. Se um caixa quebra, os outros continuam atendendo normalmente.