Desmistificando o AWS LoadBalancer
Published: 2024-05-03 16:32:11

Você já quebrou a cabeça para compreender a ideia do que é balanceamento de carga da AWS? Se sim, relaxe! Você não está sozinho, isso aconteceu comigo no passado e agora vou te ajudar a entender o que é o AWS LB.

**LOAD BALANCER: O QUE É ISSO?**
Imagine que você foi em um supermercado fazer suas compras do mês e quando você chega para pagar, repara que tem vários caixas para fazer o seu pagamento. Quando as filas começam a se formar, um funcionário do supermercado orienta os clientes até os caixas disponíveis para garantir um atendimento rápido e eficaz a todos. O load balancer funciona da mesma forma que os checkouts e pagamentos de compras em um caixa de supermercado, ao invés de caixas e clientes a gente tem solicitações e servidores.

Os clientes são como as requisições que são enviadas, o supermercado é como nossa aplicação e os caixas são como os servidores que processam as nossas requisições. Se o fluxo de clientes (requisições) não for bem distribuído, alguns caixas podem ficar completamente sobrecarregados, enquanto outros podem ficar parados, o que deixaria vários clientes nervososos.

De forma mais técnica, o balanceamento de carga (load balancer) distribui o tráfego de rede entre vários servidores, garantindo uma distribuição eficaz de tarefas e evitando servidores sobrecarregados. O objetivo é evitar gargalos, distribuir a carga de trabalho e, assim, aumentar a disponibilidade e confiabilidade do serviço.

---

**AWS LOAD BALANCER**
Voltando ali na nossa história do supermercado, o AWS Load Balancer opera de forma semelhante a um gerente de supermercado, identifica o gargalo e atribui funções aos caixas de acordo com a quantidade de produtos e clientes que consegue atender e seu nível de disponibilidade.

Agora que entendemos o que é o LB, podemos citar alguns serviços onde o mesmo é responsável por toda essa distribuição de tráfego. Vale lembrar que ele é compatível e trabalha com diversos serviços e que vou falar somente de alguns aqui:

- EC2: Nas instancias do EC2, o AWS LB consegue distribuir o tráfego que chega entre várias, uma ou mais AZ’s.
- ECS: Quando a gente fala sobre o ECS, o load balancer tem um papel super importante na distribuição o tráfego entre os containers desse serviço, o que facilita o desenvolvimento e a execução das nossas aplicações que são baseadas em micro-serviços.
- EKS: Falando de EKS o AWS load balancer funciona de forma super similar ao que acontece no ECS, o que muda mesmo é só o destino que são os containers do kubernetes.

Dentro da nuvem AWS o load balancer é divido entre 04 tipos e devemos nos atentar quando formos usar, pois cada um tem um uso e necessidades diferentes.
Os tipos são:

- Application Load Balancer (ALB)
- Network Load Balancer (NLB)
- Classic Load Balancer (CLB)
- Gateway Load Balancer (GWLB)


_**APPLICATION LOAD BALANCER (ALB)**_

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6jgdcw2xwo7zq2rwf8sy.png)


O Application Load Balancer é um dos mais utilizados atualmente, pois trabalha ali no de aplicação, sendo exclusivo para tráfego HTTP e HTTPS. Além de balancear a carga, ele examina o conteúdo das solicitações para encaminhá-las aos servidores corretos. Isso faz com que possamos ter o uso de roteamento baseado em conteúdo, permitindo a escolha de servidores com base na natureza da solicitação e outros fatores.

**_Exemplo:_**
Imagine que você tenha uma aplicação que oferece você tem diversos serviços, como um chat para o pessoal conversar sobre seus posts, uma loja para vender seus produtos e um blog somente de videos. Usando nesse cenário o ALB, consiguimos fazer a distribuição da nossa carga de trabalho, otimizando-a e assim, consequentemente deixando a experiência do usuário da aplicação melhor. O que acontece é que quando alguém entra em algum desses serviços da sua aplicação, as requisições são enviadas são direcionadas acordo com o serviço acessado. Então, desta forma o ALB envia as requisições do blog para um conjunto de servidores X, as loja para um Y e do chat para um conjuntos de servidores Z.


**_NETWORK LOAD BALANCER (NLB)_**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ejd2f72vapayo2qpebhq.png)


Ao contrário de ALB, o NLB não lida com tráfego que responde a protocolos de níveis mais alto como o HTTP e o HTTPS, ele trabalha ali a camada de conexão de transporte do modelo OSI, tendo atuação nos protocolos TCP/UDP. Quando pensamos em um tráfego mais alto a melhor opção seria esse tipo de balanceador de carga, pois consegue lidar com um fluxo alto e traz um latência extremamente baixa. Os maiores usos do NLB são aplicações que precisam de um alto desempenho e distribuição de tráfego em tempo real.

**_Exemplo:_**
Vamos pensar no seguinte cenário, você quer muito ver um filme e percebe que pode ver esse filme em um determinado provedor de streaming. Esse provedor de streaming é super famoso e recebe milhares de pessoas todos os dias para assistem ao filmes em seu catálogo e tudo isso ao mesmo tempo. Para que você consiga ver seu conteúdo sem interrupções e de forma lisa, o NLB entra em cena e faz ali todo o balanceamento da carga entre vários servidores de streaming. Ele é super importante nessa situação, pois a demanda é alta e afinal, tem várias pessoas vendo simultanemente.


**_CLASSIC LOAD BALANCER (CLB)_**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4wcia7rvr02cozecn3j1.png)


O Classic Load Balancer é um balanceador mais antigo e em breve entrará em desuso pois ele funciona nos níveis de aplicativo e rede, mas não conta com recursos mais sofisticados como os encontrados nos ALBs e NLBs. Ele pode ser útil em situações onde temos o tráfego é bem modero, mas ainda sim vale a pena considerar um dos dois balanceadores anteriores.

**_Exemplo:_**
Para ilustrarmos esse caso, podemos pensar em uma aplicação web que tenha um trafego baixo, não necessita de roteamento baseado em conteúdo ou de baixa latência. Da mesma forma que os anterioresm, ele distribui a carga entre os servidores dessa aplicação para que não tenhamos gargalos.


**_GATEWAY LOAD BALANCER (GWLB)_**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zdp3ojbl7too9q3w9h82.png)


Esse tipo de load balancer é bem novo e foi lançando em 2020. Conforme diz a AWS, ele basicamente combina um gateway de rede com um único ponto de entrada e com a saída para todo o tráfego junto de um balanceador de carga. Essa balanceador distribui o tráfego e dimensiona seus appliances virtuais de acordo com a demanda recebida.

Esse LB é tem a proposta de trabalho voltado para os appliances de rede, que são ferramentas ou softwares redes que podem ser usados para filtragem de dados, otimização de desempenho da rede, detecção e prevenção de intrusões, etc. Um exemplo são os firewalls, WAF’s, IDS/IPS, entre outros.

O Uso dele pode ser recomendado quando a gente tem um tráfego bem alto chegando em nossa rede. Assim, o GWLB distribuirá as solicitações entre as nossas diferentes ferramentas de rede, o que evita a sobrecarga em alguma delas. Outro ponto bem interessante é que ele faz com que essas ferramentas abosrvam as solicitações da maneira que foram enviadas, o que pode ser bem importante quando falamos de segurança e otimização, onde os detalhes do tráfego de rede precisam ser lidos para funcionar corretamente.

**_Exemplo:_**
Imagine que sua empresa pensa muito em segurança e configura ali firewalls de ponta e tem também um grande sistemas de prevenção contra invasões para analisar e filtrar o tráfego de rede. Essas ferramentas precisam de um alto nível de segurança e controle, o que pode ser difícil controlar devido ao tamanho e a disponibilidade desses appliances de rede. É aqui que o Gateway Load Balancer entra. Ele faz com que nossas ferramentas funcionem sem sobrecarga, pois distribui igualmente nossas solicitações de entrada entre os nossos appliances rede. Isso faz com a sobrecarga seja eliminada. Se caso algum appliance falhar ou estar sendo atualizado, o GWLB redireciona o tráfego para as outras ferramentas e assim a nossa aplicação continua segura e healty.

---

**VANTAGENS DO USO DE LOAD BALANCERS**
Agora que entendemos o que é e vimos os diferentes tipos de balanceadores de carga na AWS, vamos expor e relembrar as maiores vantagens de fazer o uso dessa ferramenta poderosa:

- **Alta Disponibilidade:** Uma das maiores vantagens de usar os balanceadores de carga é o redirecionamento das requisições quando um servidor falha ou fica indisponivel. Desta forma, ele manda o trafego para um que esteja saudável e assim sua aplicação não fica indisponível.
- **Escalabilidade:** Quando a gente tem um fluxo muito alto ali na nossa aplicação o ELB consegue adicionar mais servidores para atender esse fluxo de acorodo com o que é necessário e quando normalizar, esses servidores adicionais serão removidos. É uma funcionalidade essencial para que a aplicação possa continuar disponível após um grande tráfego.
- **Distribuição do Tráfego Balanceada:** Quando é necessário realizar a distribuição de um determinado tráfego, o load balancer faz isso de forma balanceada para que nenhum servidor fique sobrecarregado, o que traz um desempenho melhor pra nossa aplicação.
- **Flexibilidade:** Uma coisa bem interessante é a possibiliade de distribuir o tráfego de conforme a criação de algumas regras, fazendo com que a gente possa direcionar determinados tipos de requisições para servidores específicos.
- **Integração com Serviços AWS:** O LB da AWS é compatível e bem fácil de ser utilizado com outros serviços, como o Auto Scaling, RDS, WAF, EC2, ECS, EKS, Lambda, etc.

---

**CUSTOS**
Como a gente sabe, na AWS a gente paga somente pelo o que usamos e a precificação do Elastic Load Balancer depende do tempo, requisições e tipo.

No Application Load Balancer e no Network Load Balancer o preço é definido por hora utilizada e uma métrica composta por novas conexões por segundo, conexões ativas por minuto, bytes processados ​​por hora e avaliações das regras do seu listener por segundo.

A cobrança no Classic Load Balancer é mais simples e composta pela quantidade de GB de dados transferidos por esse LB e também por hora utilizada.

O Gateway Load Balancer possui um modelo de precificação onde temos 02 tipos de cobranças simultâneas. A primeira é igual a que acontece no ALB e no NLB e a segunda é pelo VPC Enpoint desse load balancer.

Você pode simular os custos desses load balancers com a calculadora da AWS [clicando aqui](https://calculator.aws/#/addService/ElasticLoadBalancing).

**CONCLUSÃO**
Fazer o uso de um load balancer com toda certeza é importante quando falamos de disponibilidade, escalabilidade e desempenho das nossas aplicações nesse provedor. Quando a gente entende como funciona cada tipo, a implementação fica mais fácil e o resultado sempre é recompensador, mas é necessário que as configurações do mesmo sejam feitas de forma adequada para garantir que sua aplicação possa lidar com tráfego esperado, ser consitente e confiável.

É importante lembrar de analisar o seu cenário e escolher do tipo load balancer que mais se adequa a sua aplicaçõe e as suas necessidades.