Escalabilidade Horizontal
Escalar horizontalmente é adicionar mais máquinas que rodam a mesma aplicação, dividindo a carga entre elas. Também chamado de “scale out”. Em vez de uma máquina gigante, você usa várias menores trabalhando juntas.
A ideia
[ Load Balancer ]
/ | \
Servidor Servidor Servidor
1 2 3
Quando a demanda sobe, você liga mais servidores. Quando cai, desliga. A capacidade cresce somando máquinas.
Load balancer
O load balancer fica na frente e distribui as requisições entre os servidores. Ele evita que um fique sobrecarregado enquanto outro está ocioso e tira de circulação os que falharem.
GET /produtos HTTP/1.1
Host: loja.com
Essa requisição pode cair em qualquer servidor. Para o usuário, é transparente.
O problema do estado compartilhado
Se cada servidor guarda dados localmente, surge confusão: você faz login no servidor 1, mas a próxima requisição vai para o servidor 2, que não te conhece.
A solução é manter os servidores sem estado (stateless) e guardar o estado em um lugar central:
Servidores (stateless)
|
+---------+
| Sessão | (Redis, banco)
+---------+
Sessões, cache e arquivos ficam em serviços compartilhados, não na memória de cada máquina.
Vantagens
- Escala quase sem limite: é só adicionar máquinas.
- Sem ponto único de falha: se uma cai, as outras seguem.
- Pode usar máquinas comuns e baratas.
Desvantagens
- Mais complexo: load balancer, sincronização, deploy em várias máquinas.
- Exige código stateless e estado externo.
- Dados distribuídos trazem desafios de consistência.
Quando usar
Ideal para aplicações web com muito tráfego e variável, onde alta disponibilidade importa. É a base de sistemas que precisam crescer muito.