<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('elbv2', region_name='us-east-1')
Criar um ALB
response = client.create_load_balancer(
Name='meu-alb',
Subnets=['subnet-12345678', 'subnet-87654321'],
SecurityGroups=['sg-12345678'],
Scheme='internet-facing',
Type='application',
IpAddressType='ipv4'
)
lb_arn = response['LoadBalancers'][0]['LoadBalancerArn']
Criar um target group
tg_response = client.create_target_group(
Name='meu-target-group',
Protocol='HTTP',
Port=80,
VpcId='vpc-12345678',
TargetType='instance',
HealthCheckProtocol='HTTP',
HealthCheckPath='/',
HealthCheckIntervalSeconds=30,
HealthCheckTimeoutSeconds=5,
HealthyThresholdCount=2,
UnhealthyThresholdCount=2
)
tg_arn = tg_response['TargetGroups'][0]['TargetGroupArn']
Registrar instâncias
client.register_targets(
TargetGroupArn=tg_arn,
Targets=[
{'Id': 'i-1234567890abcdef0', 'Port': 80},
{'Id': 'i-0987654321fedcba0', 'Port': 80}
]
)
Criar listener com roteamento por path
client.create_listener(
LoadBalancerArn=lb_arn,
Protocol='HTTP',
Port=80,
DefaultActions=[
{
'Type': 'forward',
'TargetGroupArn': tg_arn
}
]
)
print(f"ALB criado: {response['LoadBalancers'][0]['DNSName']}")</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('elbv2', region_name='us-east-1')
Criar um NLB
response = client.create_load_balancer(
Name='meu-nlb',
Subnets=['subnet-12345678', 'subnet-87654321'],
Type='network',
Scheme='internet-facing',
IpAddressType='ipv4'
)
lb_arn = response['LoadBalancers'][0]['LoadBalancerArn']
Criar target group com health check TCP
tg_response = client.create_target_group(
Name='nlb-targets',
Protocol='TCP',
Port=5000,
VpcId='vpc-12345678',
TargetType='instance',
HealthCheckProtocol='TCP',
HealthCheckPort='5000',
HealthCheckIntervalSeconds=10,
HealthyThresholdCount=2,
UnhealthyThresholdCount=2
)
tg_arn = tg_response['TargetGroups'][0]['TargetGroupArn']
Registrar targets
client.register_targets(
TargetGroupArn=tg_arn,
Targets=[
{'Id': 'i-1234567890abcdef0', 'Port': 5000},
{'Id': 'i-0987654321fedcba0', 'Port': 5000}
]
)
Criar listener com preservação de IP de origem
client.create_listener(
LoadBalancerArn=lb_arn,
Protocol='TCP',
Port=5000,
DefaultActions=[
{
'Type': 'forward',
'TargetGroupArn': tg_arn
}
]
)
print(f"NLB criado: {response['LoadBalancers'][0]['DNSName']}")</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('elbv2', region_name='us-east-1')
Criar um GLB
response = client.create_load_balancer(
Name='meu-glb',
Subnets=['subnet-12345678', 'subnet-87654321'],
Type='gateway',
Scheme='internal',
IpAddressType='ipv4'
)
lb_arn = response['LoadBalancers'][0]['LoadBalancerArn']
Criar target group para appliances
tg_response = client.create_target_group(
Name='glb-appliances',
Protocol='GENEVE',
Port=6081,
VpcId='vpc-12345678',
TargetType='instance',
HealthCheckProtocol='TCP',
HealthCheckPort='6081',
HealthCheckIntervalSeconds=10,
HealthyThresholdCount=2,
UnhealthyThresholdCount=2
)
tg_arn = tg_response['TargetGroups'][0]['TargetGroupArn']
Registrar appliances virtuais
client.register_targets(
TargetGroupArn=tg_arn,
Targets=[
{'Id': 'i-appliance-001', 'Port': 6081},
{'Id': 'i-appliance-002', 'Port': 6081}
]
)
Criar listener
client.create_listener(
LoadBalancerArn=lb_arn,
Protocol='GENEVE',
Port=6081,
DefaultActions=[
{
'Type': 'forward',
'TargetGroupArn': tg_arn
}
]
)
print(f"GLB criado: {response['LoadBalancers'][0]['DNSName']}")</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>