Load Balancer

Balanceador de carga para servidores web
Aqui nesse perfil já falamos sobre diversos assuntos, como, por exemplo:
- Licenças de software
- Cache em Aplicações Web
- Over Engineering
- e muito mais…
Mas hoje vamos falar sobre um assunto que é muito importante para a disponibilidade de aplicações web, o balanceamento de carga.
O que é balanceamento de carga?
Se você está começando a trabalhar com desenvolvimento web, provavelmente nunca ouviu falar sobre balanceamento de carga, e tenha calma, pois é um assunto bem simples.
Diferente do que aprendemos na faculdade ou em cursos, onde aprendemos a desenvolver aplicações web que rodam em um único servidor, na realidade, aplicações web rodam em mais de um servidor, e isso é necessário para que a aplicação tenha uma boa disponibilidade.
Por que utilizar mais de um servidor?
No início do desenvolvimento temos um servidor só, e isso é o suficiente para que a aplicação funcione corretamente, mas quando a aplicação começa a crescer, e o número de acessos aumenta, um único servidor não é mais o suficiente para atender a demanda, e é aí que entra um termo muito importante, escalabilidade.
A escalabilidade é a capacidade de uma aplicação de aumentar a sua capacidade de atender a demanda.
Existem dois tipos de escalabilidade, a vertical e a horizontal.
Escalabilidade vertical
A escalabilidade vertical é quando aumentamos a capacidade de um servidor, adicionando mais memória, processamento, etc.
Chamamos isso de escalabilidade vertical, pois estamos aumentando a capacidade de um único servidor.
Escalabilidade horizontal
A escalabilidade horizontal é quando aumentamos a capacidade de uma aplicação, adicionando mais servidores.
Chamamos isso de escalabilidade horizontal, seria algo como colocar mais servidores ao lado do servidor que já temos.
Como funciona o balanceamento de carga?
Quando temos mais de um servidor, precisamos de um mecanismo para distribuir as requisições entre os servidores, e esse mecanismo é o balanceador de carga.
O balanceador de carga é um servidor que fica na frente dos servidores que rodam a aplicação, e ele é responsável receber as requisições e distribuir.

Um detalhe importante é que o balanceador de carga não é um servidor comum, ele é um servidor especializado, que tem como única função, distribuir as requisições entre os servidores que rodam a aplicação.
Como funciona o balanceamento de carga?
Geralmente rodando na porta 80, o balanceador fica a frente dos servidores, nele é configurado o endereço de onde rodam a aplicação, e ele é responsável por distribuir as requisições entre os servidores conforme a sua configuração de balanceamento.
Existem vários tipos de balanceamento, mas os mais comuns são:
- Round Robin
- Least Connections
- Least Response Time
- Hash
- IP Hash
Round Robin
O balanceamento Round Robin é o mais simples, ele distribui as requisições entre os servidores de forma circular, ou seja, a primeira requisição vai para o servidor 1, a segunda para o servidor 2, a terceira para o servidor 3, e assim por diante.
Least Connections
Distribui as requisições entre os servidores conforme o número de conexões ativas em cada servidor, ou seja, se o servidor 1 tem 10 conexões ativas, e o servidor 2 tem 5 conexões ativas, a próxima requisição vai para o servidor 2, pois ele tem menos conexões ativas.
Least Response Time
Distribui as requisições entre os servidores segundo o tempo de resposta de cada servidor, ou seja, se o servidor 1 tem um tempo de resposta de 100ms, e o servidor 2 tem um tempo de resposta de 50ms, a próxima requisição vai para o servidor 2, pois ele tem um tempo de resposta menor.
Hash
Distribui as requisições entre os servidores de acordo com um hash gerado a partir de um parâmetro da requisição, por exemplo, se o parâmetro for TOKEN, e o valor do TOKEN for 123, o hash gerado será sempre o mesmo, e a requisição sempre vai para o mesmo servidor.
IP Hash
Distribui as requisições entre os servidores conforme o IP do cliente, ou seja, todas as requisições que vierem do mesmo IP, vão para o mesmo servidor.
Qual balanceamento utilizar?
Não existe um balanceamento melhor que o outro, cada um tem a sua aplicação, e o ideal é que você teste cada um deles, e veja qual se adapta melhor a sua aplicação.
Quando balancear a carga?
O balanceamento de carga é utilizado quando temos mais de um servidor, e precisamos distribuir as requisições entre eles, mas quando temos apenas um servidor, não temos a necessidade de utilizar um balanceador de carga, pois ele só iria adicionar mais um ponto de falha na aplicação.
Lembre-se que nos servidores devem rodar a mesma aplicação, e devem estar sincronizados, pois se um servidor estiver com uma versão diferente da aplicação, ele pode apresentar comportamentos inesperados.
Geralmente usa-se o balanceamento de carga quando temos mais de um droplet, e cada droplet roda a mesma aplicação, e temos um banco de dados centralizado, acessado por todos.
Serviços de balanceamento de carga
Existem vários serviços de balanceamento de carga, mas os mais conhecidos são:
- Nginx
- HAProxy
- Apache
- AWS Elastic Load Balancer
- Google Cloud Load Balancing
- Azure Load Balancer
- E muitos outros…
Todos eles são ótimos, e cada um tem a sua aplicação, mas o mais utilizado é o Nginx, pois ele é muito leve, e tem um ótimo desempenho.
Conclusão
O balanceamento de carga é um assunto muito importante, e é essencial para que a aplicação tenha uma boa disponibilidade, e não fique fora do ar.
Caso tenha alguma dúvida, ou queira contribuir com o artigo, deixe um comentário abaixo.





