# Load Balancer

### Balanceador de carga para servidores web

Aqui nesse perfil já falamos sobre diversos assuntos, como, por exemplo:

*   [Licenças de software](https://medium.com/@sschonss/licen%C3%A7as-de-software-ff0b2bcfbde8)
*   [Cache em Aplicações Web](https://medium.com/@sschonss/uso-de-cache-em-aplica%C3%A7%C3%B5es-web-836f71f4ac4b)
*   [Over Engineering](https://medium.com/@sschonss/over-engineering-105683129610)
*   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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1728586117006/08ffecf3-d19f-40ad-b89c-620267b359fc.png)

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](https://www.nginx.com/)
*   [HAProxy](http://www.haproxy.org/)
*   [Apache](https://httpd.apache.org/)
*   [AWS Elastic Load Balancer](https://aws.amazon.com/pt/elasticloadbalancing/)
*   [Google Cloud Load Balancing](https://cloud.google.com/load-balancing/?hl=pt-br)
*   [Azure Load Balancer](https://azure.microsoft.com/pt-br/services/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.
