Escalonamento do Sistema
Aprenda estratégias para escalar sistemas de backend para lidar com o crescimento de tráfego, dados e complexidade.
Por que os sistemas precisam escalar
À medida que as aplicações crescem, o aumento de usuários, requisições e dados acaba sobrecarregando um único servidor, exigindo que os sistemas escalem.
- Mais usuários geram mais requisições simultâneas, aumentando a carga do sistema.
- Volumes crescentes de dados tornam as operações de processamento e armazenamento mais lentas.
- Um único servidor se torna um gargalo de desempenho sob demanda contínua.
Detalhes
Todos os sistemas começam de forma simples, muitas vezes executando em uma única máquina. Em baixa escala, isso funciona bem porque o servidor consegue lidar com as requisições recebidas, processar a lógica e gerenciar os dados sem esforço significativo.
À medida que a aplicação cresce, a demanda aumenta. Mais usuários significam mais requisições simultâneas, o que pressiona os recursos de CPU, memória e rede.
O crescimento dos dados adiciona outra camada de estresse. Conjuntos de dados maiores exigem mais armazenamento e tornam as consultas mais lentas, aumentando ainda mais o tempo de resposta.
Eventualmente, o sistema chega a um ponto em que uma única máquina não consegue mais acompanhar. Escalar se torna necessário para manter o desempenho, evitar lentidão e garantir que o sistema continue operando de forma confiável sob carga crescente.
Escalonamento Vertical
O escalonamento vertical aumenta a capacidade de uma única máquina adicionando mais recursos, como CPU, memória e armazenamento.
- Atualizar o hardware permite que um único servidor lide com mais carga.
- Não há necessidade de gerenciar várias máquinas ou coordenação distribuída.
- O escalonamento é limitado por restrições de hardware e pelo aumento dos custos.
Detalhes
O escalonamento vertical, também conhecido como scaling up, melhora a capacidade do sistema ao atualizar um único servidor. Isso normalmente envolve adicionar mais núcleos de CPU, aumentar a RAM ou expandir o armazenamento.
Essa abordagem é direta. A arquitetura do sistema permanece inalterada, e não há necessidade de introduzir a complexidade de sistemas distribuídos, como comunicação em rede ou sincronização de dados.
No entanto, o escalonamento vertical tem limites rígidos. Máquinas físicas só podem ser atualizadas até certo ponto, e hardware de alto desempenho se torna cada vez mais caro.
Por causa desses limites, o escalonamento vertical funciona bem nas fases iniciais, mas eventualmente se torna insuficiente para sistemas em grande escala.
Escalonamento Horizontal
O escalonamento horizontal aumenta a capacidade do sistema adicionando mais servidores e distribuindo a carga de trabalho entre eles.
- A carga de trabalho é distribuída entre várias máquinas em vez de uma só.
- O sistema pode lidar com tráfego significativamente maior ao escalar horizontalmente.
- A falha de um servidor não derruba todo o sistema.
Detalhes
O escalonamento horizontal, também conhecido como scale out, melhora a capacidade do sistema adicionando mais servidores em vez de atualizar um único servidor. Cada servidor processa uma parte da carga de trabalho total.
O tráfego de entrada é distribuído entre esses servidores, permitindo que o sistema processe muito mais requisições em paralelo em comparação com uma configuração de máquina única.
Essa abordagem também melhora a confiabilidade. Se um servidor falhar, outros podem continuar processando requisições, reduzindo o impacto das falhas.
No entanto, o escalonamento horizontal introduz a complexidade de sistemas distribuídos, exigindo coordenação, balanceamento de carga e mecanismos de consistência de dados.
Balanceamento de Carga
Um balanceador de carga distribui as requisições recebidas entre vários servidores para melhorar o desempenho e a confiabilidade.
- As requisições são distribuídas entre os servidores para evitar sobrecarga em uma única máquina.
- Servidores com problemas são detectados e removidos do roteamento de tráfego.
- A confiabilidade do sistema melhora ao evitar pontos únicos de falha.
Detalhes
À medida que os sistemas escalam horizontalmente, o tráfego de entrada precisa ser distribuído entre vários servidores. Um balanceador de carga fica na frente desses servidores e atua como ponto de entrada para todas as requisições.
Em vez de enviar todo o tráfego para uma única máquina, o balanceador de carga usa algoritmos como round-robin ou least connections para distribuir as requisições de forma equilibrada. Isso evita que qualquer servidor se torne um gargalo.
Os balanceadores de carga também verificam continuamente a saúde dos servidores. Se um servidor ficar lento, cair ou falhar nas verificações de saúde, ele é removido automaticamente do pool para que os usuários não sejam direcionados para uma instância com problemas.
Além disso, os balanceadores de carga podem lidar com tarefas como terminação SSL, roteamento de requisições com base em caminhos e modelagem de tráfego. Ferramentas como Nginx, HAProxy e balanceadores de carga gerenciados na nuvem são amplamente usadas para implementar essa camada em sistemas modernos.
Estratégias de Balanceamento de Carga
Diferentes estratégias de balanceamento de carga determinam como o tráfego é distribuído, impactando diretamente o desempenho, a justiça e a estabilidade do sistema.
- Round-robin distribui as requisições de forma uniforme, mas ignora a carga do servidor.
- Least connections envia o tráfego para o servidor menos ocupado.
- Sticky sessions mantêm os usuários vinculados ao mesmo servidor quando necessário.
Detalhes
Um load balancer não é apenas um divisor de tráfego — a forma como ele distribui o tráfego importa.
A estratégia mais simples é round-robin, em que cada requisição vai para o próximo servidor na sequência. Isso funciona quando os servidores são idênticos, mas falha quando as cargas de trabalho variam.
Least connections melhora isso roteando o tráfego para o servidor que está processando o menor número de requisições ativas, reduzindo sobrecarga e melhorando os tempos de resposta.
Sticky sessions mantêm um usuário vinculado ao mesmo servidor. Isso ajuda quando os dados de sessão são armazenados localmente, mas reduz a flexibilidade e pode criar uma carga desigual.
Sistemas modernos combinam estratégias com health checks e weights. Servidores mais fortes podem receber mais tráfego, enquanto os que falham são removidos automaticamente.
A escolha inadequada da estratégia leva a carga desigual, maior latência e infraestrutura desperdiçada, mesmo quando há um load balancer presente.
Servidores sem estado
Servidores sem estado não armazenam dados específicos do cliente localmente, permitindo que qualquer servidor processe qualquer solicitação.
- Os servidores não retêm dados de sessão entre solicitações.
- O estado é armazenado externamente em bancos de dados, caches ou armazenamentos de sessão.
- As solicitações podem ser roteadas para qualquer servidor sem depender de interações anteriores.
Detalhes
Em um sistema sem estado, cada solicitação é independente. O servidor não armazena informações sobre solicitações anteriores ou sessões de usuário em sua memória local.
Em vez disso, qualquer estado necessário — como sessões de usuário ou dados de autenticação — é armazenado em sistemas externos, como bancos de dados, caches ou armazenamentos de sessão dedicados.
Esse design torna o escalonamento horizontal muito mais fácil. Como nenhum servidor mantém dados exclusivos de sessão, as solicitações podem ser roteadas para qualquer servidor disponível sem preocupação com onde as solicitações anteriores foram processadas.
A arquitetura sem estado também melhora a confiabilidade e a flexibilidade, pois os servidores podem ser adicionados, removidos ou substituídos sem interromper as interações do usuário.
Escalonamento automático
O escalonamento automático ajusta dinamicamente o número de servidores com base no tráfego para manter o desempenho e a eficiência.
- O sistema adiciona servidores automaticamente quando o tráfego aumenta.
- Os servidores são removidos quando a demanda diminui para reduzir o uso de recursos.
- As decisões de escalonamento são baseadas em métricas como uso de CPU ou taxa de requisições.
Detalhes
O tráfego em sistemas reais não é constante. O uso pode aumentar durante os horários de pico e cair fora desses períodos, tornando a infraestrutura fixa ineficiente.
O escalonamento automático resolve isso ajustando automaticamente a capacidade do sistema. Quando o tráfego aumenta, novos servidores são adicionados para lidar com a carga. Quando o tráfego diminui, os servidores não utilizados são removidos.
Esse processo normalmente é guiado por métricas como utilização de CPU, uso de memória ou taxa de requisições. Limiares são definidos para que o sistema possa reagir rapidamente às mudanças na demanda.
O escalonamento automático melhora tanto o desempenho quanto a eficiência de custos. Os sistemas conseguem lidar com picos repentinos sem intervenção manual, ao mesmo tempo em que evitam custos desnecessários de infraestrutura durante períodos de baixo uso.
Redes de Distribuição de Conteúdo (CDNs)
CDNs armazenam conteúdo em cache mais perto dos usuários para reduzir a latência e aliviar o tráfego dos servidores da aplicação.
- Conteúdo estático é armazenado em cache em servidores de borda localizados perto dos usuários.
- As requisições são atendidas a partir da localização mais próxima, em vez do servidor de origem.
- Reduz a latência e diminui a carga na infraestrutura de backend.
Detalhes
Quando os usuários acessam uma aplicação, os dados normalmente viajam de um servidor central, que pode estar geograficamente distante. Essa distância introduz latência e torna os tempos de resposta mais lentos.
As CDNs resolvem isso armazenando em cache conteúdo estático — como imagens, scripts e folhas de estilo — em servidores de borda distribuídos pelo mundo. Quando um usuário faz uma requisição, ela é atendida pela localização de borda mais próxima.
Isso reduz significativamente a distância que os dados precisam percorrer, resultando em tempos de carregamento mais rápidos e melhor experiência do usuário.
As CDNs também reduzem a carga nos servidores de origem ao lidar com uma grande parte do tráfego. Serviços como Cloudflare, AWS CloudFront e Fastly são comumente usados para implementar essa camada em sistemas escaláveis.
Arquitetura de Sistema Escalável
Sistemas escaláveis são construídos como arquiteturas em camadas, onde cada componente lida com uma parte específica da carga de trabalho.
- O tráfego flui por várias camadas, cada uma projetada para lidar com escala de forma eficiente.
- A carga é distribuída entre servidores de aplicação e bancos de dados.
- Cada camada pode escalar de forma independente com base na demanda do sistema.
Detalhes
Um sistema escalável não é um único componente, mas uma combinação de camadas trabalhando juntas para lidar com o aumento da demanda. Cada camada é responsável por uma função específica no fluxo da requisição.
Os usuários interagem primeiro com uma CDN, que entrega conteúdo em cache e reduz a latência. As requisições que exigem processamento dinâmico são encaminhadas para um load balancer.
O load balancer distribui o tráfego entre vários servidores de aplicação, permitindo que o sistema processe muitas requisições em paralelo.
Os servidores de aplicação interagem com um banco de dados distribuído, onde os dados são particionados ou replicados para lidar com grandes conjuntos de dados e altos volumes de consultas.
Essa abordagem em camadas permite que cada parte do sistema escale de forma independente, tornando possível lidar com o crescimento de usuários, tráfego e dados sem redesenhar todo o sistema.
Seção de Perguntas
1 / 5
Esta lição faz parte do conteúdo premium
Faça upgrade para o plano premium para remover o desfoque e liberar a leitura completa.