Cloud & Infraestrutura

O que Todo Dev Deve Saber sobre Elastic Load Balancing: ALB, NLB e Gateway Load Balancer

9 min de leitura

O que Todo Dev Deve Saber sobre Elastic Load Balancing: ALB, NLB e Gateway Load Balancer

O que é Elastic Load Balancing? O Elastic Load Balancing (ELB) é um serviço da AWS que distribui automaticamente o tráfego de entrada entre múltiplos destinos, como instâncias EC2, containers e endereços IP. Ele garante alta disponibilidade, escalabilidade e tolerância a falhas. Existem três tipos principais: Application Load Balancer (ALB), Network Load Balancer (NLB) e Gateway Load Balancer (GLB), cada um otimizado para casos de uso específicos. Compreender quando usar cada um é essencial para arquitetar soluções robustas. O ELB opera em diferentes camadas do modelo OSI e oferece recursos como health checks automáticos, SSL/TLS termination, logging detalhado e integração nativa com Auto Scaling. A escolha correta impacta diretamente a performance, custo e confiabilidade da sua aplicação. Application Load Balancer (ALB) Características e Casos de Uso O ALB opera na camada 7 (Aplicação) e é ideal para aplicações web modernas, microserviços e arquiteturas baseadas em containers. Ele entende HTTP/HTTPS e permite roteamento avançado baseado em hostname, path, headers e query

<h2>O que é Elastic Load Balancing?</h2>

<p>O Elastic Load Balancing (ELB) é um serviço da AWS que distribui automaticamente o tráfego de entrada entre múltiplos destinos, como instâncias EC2, containers e endereços IP. Ele garante alta disponibilidade, escalabilidade e tolerância a falhas. Existem três tipos principais: Application Load Balancer (ALB), Network Load Balancer (NLB) e Gateway Load Balancer (GLB), cada um otimizado para casos de uso específicos. Compreender quando usar cada um é essencial para arquitetar soluções robustas.</p>

<p>O ELB opera em diferentes camadas do modelo OSI e oferece recursos como health checks automáticos, SSL/TLS termination, logging detalhado e integração nativa com Auto Scaling. A escolha correta impacta diretamente a performance, custo e confiabilidade da sua aplicação.</p>

<h2>Application Load Balancer (ALB)</h2>

<h3>Características e Casos de Uso</h3>

<p>O ALB opera na camada 7 (Aplicação) e é ideal para aplicações web modernas, microserviços e arquiteturas baseadas em containers. Ele entende HTTP/HTTPS e permite roteamento avançado baseado em hostname, path, headers e query parameters. Use ALB quando precisar de inteligência de roteamento ou trabalhar com múltiplos serviços em um único balanceador.</p>

<pre><code class="language-python">import boto3

client = boto3.client(&#039;elbv2&#039;, region_name=&#039;us-east-1&#039;)

Criar um ALB

response = client.create_load_balancer(

Name=&#039;meu-alb&#039;,

Subnets=[&#039;subnet-12345678&#039;, &#039;subnet-87654321&#039;],

SecurityGroups=[&#039;sg-12345678&#039;],

Scheme=&#039;internet-facing&#039;,

Type=&#039;application&#039;,

IpAddressType=&#039;ipv4&#039;

)

lb_arn = response[&#039;LoadBalancers&#039;][0][&#039;LoadBalancerArn&#039;]

Criar um target group

tg_response = client.create_target_group(

Name=&#039;meu-target-group&#039;,

Protocol=&#039;HTTP&#039;,

Port=80,

VpcId=&#039;vpc-12345678&#039;,

TargetType=&#039;instance&#039;,

HealthCheckProtocol=&#039;HTTP&#039;,

HealthCheckPath=&#039;/&#039;,

HealthCheckIntervalSeconds=30,

HealthCheckTimeoutSeconds=5,

HealthyThresholdCount=2,

UnhealthyThresholdCount=2

)

tg_arn = tg_response[&#039;TargetGroups&#039;][0][&#039;TargetGroupArn&#039;]

Registrar instâncias

client.register_targets(

TargetGroupArn=tg_arn,

Targets=[

{&#039;Id&#039;: &#039;i-1234567890abcdef0&#039;, &#039;Port&#039;: 80},

{&#039;Id&#039;: &#039;i-0987654321fedcba0&#039;, &#039;Port&#039;: 80}

]

)

Criar listener com roteamento por path

client.create_listener(

LoadBalancerArn=lb_arn,

Protocol=&#039;HTTP&#039;,

Port=80,

DefaultActions=[

{

&#039;Type&#039;: &#039;forward&#039;,

&#039;TargetGroupArn&#039;: tg_arn

}

]

)

print(f&quot;ALB criado: {response[&#039;LoadBalancers&#039;][0][&#039;DNSName&#039;]}&quot;)</code></pre>

<h2>Network Load Balancer (NLB)</h2>

<h3>Características e Casos de Uso</h3>

<p>O NLB opera na camada 4 (Transporte) e é projetado para throughput ultra-alto, latência extremamente baixa e protocolos não-HTTP (TCP, UDP). Processe milhões de requisições por segundo com latência inferior a 100 microsegundos. Use NLB para gaming em tempo real, IoT, streaming de vídeo ou qualquer aplicação sensível à latência.</p>

<p>O NLB suporta IP fixo, preservação de IP de origem e é compatível com protocolos customizados. Diferentemente do ALB, não realiza inspeção de payload HTTP, apenas roteamento baseado em endereço IP e porta.</p>

<pre><code class="language-python">import boto3

client = boto3.client(&#039;elbv2&#039;, region_name=&#039;us-east-1&#039;)

Criar um NLB

response = client.create_load_balancer(

Name=&#039;meu-nlb&#039;,

Subnets=[&#039;subnet-12345678&#039;, &#039;subnet-87654321&#039;],

Type=&#039;network&#039;,

Scheme=&#039;internet-facing&#039;,

IpAddressType=&#039;ipv4&#039;

)

lb_arn = response[&#039;LoadBalancers&#039;][0][&#039;LoadBalancerArn&#039;]

Criar target group com health check TCP

tg_response = client.create_target_group(

Name=&#039;nlb-targets&#039;,

Protocol=&#039;TCP&#039;,

Port=5000,

VpcId=&#039;vpc-12345678&#039;,

TargetType=&#039;instance&#039;,

HealthCheckProtocol=&#039;TCP&#039;,

HealthCheckPort=&#039;5000&#039;,

HealthCheckIntervalSeconds=10,

HealthyThresholdCount=2,

UnhealthyThresholdCount=2

)

tg_arn = tg_response[&#039;TargetGroups&#039;][0][&#039;TargetGroupArn&#039;]

Registrar targets

client.register_targets(

TargetGroupArn=tg_arn,

Targets=[

{&#039;Id&#039;: &#039;i-1234567890abcdef0&#039;, &#039;Port&#039;: 5000},

{&#039;Id&#039;: &#039;i-0987654321fedcba0&#039;, &#039;Port&#039;: 5000}

]

)

Criar listener com preservação de IP de origem

client.create_listener(

LoadBalancerArn=lb_arn,

Protocol=&#039;TCP&#039;,

Port=5000,

DefaultActions=[

{

&#039;Type&#039;: &#039;forward&#039;,

&#039;TargetGroupArn&#039;: tg_arn

}

]

)

print(f&quot;NLB criado: {response[&#039;LoadBalancers&#039;][0][&#039;DNSName&#039;]}&quot;)</code></pre>

<h2>Gateway Load Balancer (GLB)</h2>

<h3>Características e Casos de Uso</h3>

<p>O GLB é um tipo especializado que opera entre as camadas 3 e 4, projetado especificamente para distribuir tráfego para appliances virtuais (firewalls, WAF, sistemas de detecção de intrusão). Ele preserva o fluxo de tráfego intacto enquanto distribui a carga entre múltiplas instâncias de appliances usando o protocolo GENEVE.</p>

<p>Use GLB quando precisar de processamento de segurança centralizado, inspeção profunda de pacotes ou quando seus appliances precisam ver o tráfego original sem modificações. É ideal para arquiteturas de segurança em hub-and-spoke.</p>

<pre><code class="language-python">import boto3

client = boto3.client(&#039;elbv2&#039;, region_name=&#039;us-east-1&#039;)

Criar um GLB

response = client.create_load_balancer(

Name=&#039;meu-glb&#039;,

Subnets=[&#039;subnet-12345678&#039;, &#039;subnet-87654321&#039;],

Type=&#039;gateway&#039;,

Scheme=&#039;internal&#039;,

IpAddressType=&#039;ipv4&#039;

)

lb_arn = response[&#039;LoadBalancers&#039;][0][&#039;LoadBalancerArn&#039;]

Criar target group para appliances

tg_response = client.create_target_group(

Name=&#039;glb-appliances&#039;,

Protocol=&#039;GENEVE&#039;,

Port=6081,

VpcId=&#039;vpc-12345678&#039;,

TargetType=&#039;instance&#039;,

HealthCheckProtocol=&#039;TCP&#039;,

HealthCheckPort=&#039;6081&#039;,

HealthCheckIntervalSeconds=10,

HealthyThresholdCount=2,

UnhealthyThresholdCount=2

)

tg_arn = tg_response[&#039;TargetGroups&#039;][0][&#039;TargetGroupArn&#039;]

Registrar appliances virtuais

client.register_targets(

TargetGroupArn=tg_arn,

Targets=[

{&#039;Id&#039;: &#039;i-appliance-001&#039;, &#039;Port&#039;: 6081},

{&#039;Id&#039;: &#039;i-appliance-002&#039;, &#039;Port&#039;: 6081}

]

)

Criar listener

client.create_listener(

LoadBalancerArn=lb_arn,

Protocol=&#039;GENEVE&#039;,

Port=6081,

DefaultActions=[

{

&#039;Type&#039;: &#039;forward&#039;,

&#039;TargetGroupArn&#039;: tg_arn

}

]

)

print(f&quot;GLB criado: {response[&#039;LoadBalancers&#039;][0][&#039;DNSName&#039;]}&quot;)</code></pre>

<h2>Comparação Prática e Decisão</h2>

<div class="table-wrap"><table><thead><tr><th>Aspecto</th><th>ALB</th><th>NLB</th><th>GLB</th></tr></thead><tbody><tr><td><strong>Camada OSI</strong></td><td>7 (App)</td><td>4 (Transport)</td><td>3-4 (Network)</td></tr><tr><td><strong>Throughput</strong></td><td>Alto</td><td>Ultra-alto</td><td>Alto</td></tr><tr><td><strong>Latência</strong></td><td>Baixa</td><td>Ultra-baixa</td><td>Baixa</td></tr><tr><td><strong>Roteamento</strong></td><td>Path, Host, Headers</td><td>IP, Porta</td><td>Flow-based</td></tr><tr><td><strong>Use quando</strong></td><td>Web, Microserviços</td><td>Gaming, IoT, Tempo real</td><td>Segurança, Appliances</td></tr></tbody></table></div>

<p>A escolha depende da natureza do seu tráfego. ALB é a escolha padrão para a maioria das aplicações web. NLB quando performance extrema é crítica. GLB apenas para cenários de segurança especializada. Lembre-se: mais simples não é sempre melhor—escolha com base em requisitos reais.</p>

<h2>Conclusão</h2>

<p>Os três tipos de load balancers da AWS servem propósitos distintos. <strong>ALB</strong> oferece inteligência de roteamento em camada de aplicação, ideal para microsserviços. <strong>NLB</strong> fornece performance extrema em camada 4, essencial para workloads sensíveis à latência. <strong>GLB</strong> habilita arquiteturas de segurança centralizadas com appliances virtuais. Dominar essas distinções permite arquitetar soluções que balanceiam corretamente custo, performance e confiabilidade. Teste cada um em ambiente de não-produção antes de decidir.</p>

<h2>Referências</h2>

<ul>

<li><a href="https://docs.aws.amazon.com/elasticloadbalancing/" target="_blank" rel="noopener noreferrer">AWS Elastic Load Balancing Documentation</a></li>

<li><a href="https://aws.amazon.com/elasticloadbalancing/application-load-balancer/" target="_blank" rel="noopener noreferrer">ALB vs NLB: When to Use Each</a></li>

<li><a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/" target="_blank" rel="noopener noreferrer">Gateway Load Balancer User Guide</a></li>

<li><a href="https://docs.aws.amazon.com/whitepapers/latest/best-practices-elb/" target="_blank" rel="noopener noreferrer">AWS Load Balancing Best Practices</a></li>

<li><a href="https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/elbv2.html" target="_blank" rel="noopener noreferrer">Boto3 ELBv2 Client Reference</a></li>

</ul>

Comentários

Mais em Cloud & Infraestrutura

O que Todo Dev Deve Saber sobre EventBridge: Event Bus, Rules, Pipes e SaaS Integrations
O que Todo Dev Deve Saber sobre EventBridge: Event Bus, Rules, Pipes e SaaS Integrations

Event Bus: Fundação do EventBridge O Event Bus é o componente central do AWS...

Snow Family e Storage Gateway: Dados On-premises e Migração: Do Básico ao Avançado
Snow Family e Storage Gateway: Dados On-premises e Migração: Do Básico ao Avançado

Snow Family: Migração de Dados em Escala A AWS Snow Family é um conjunto de s...

O que Todo Dev Deve Saber sobre ElastiCache: Redis e Memcached para Cache em Alta Performance
O que Todo Dev Deve Saber sobre ElastiCache: Redis e Memcached para Cache em Alta Performance

ElastiCache: Fundamentos e Arquitetura ElastiCache é um serviço gerenciado da...