Iniciante Arquitetura de Sistemas

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.