Como escolher o balanceador de carga ideal na Amazon: AWS Application Load Balancer vs. NGINX Plus

NGINX | 21 de julho de 2020

Em agosto de 2016, a Amazon Web Services (AWS) lançou o Application Load Balancer para o balanceamento de carga na camada 7 do tráfego HTTP e HTTPS. O novo produto adicionou vários recursos que não estavam disponíveis no balanceador de carga existente da AWS para as camadas 4 e 7, o Elastic Load Balancer, que foi oficialmente renomeado como Classic Load Balancer.

Um ano depois, a AWS lançou o Network Load Balancer para aprimorar o balanceamento de carga da camada 4. Assim, as opções disponíveis para usuários que executam aplicações altamente disponíveis e escaláveis na AWS incluem:

Neste post, analisamos os recursos do ALB e comparamos seus preços e recursos com o NGINX Open Source e o NGINX Plus.

Observações –

As informações sobre os recursos compatíveis estão atualizadas até julho de 2020, mas estão sujeitas a alterações. Para uma comparação direta entre o NGINX Plus e o Classic Load Balancer (anteriormente chamado de Elastic Load Balancer ou ELB), bem como informações sobre como usá-los em conjunto, consulte nossa publicação anterior no blog. Para obter informações sobre como usar o NLB em uma implantação de alta disponibilidade do NGINX Plus, consulte nossa publicação anterior no blog.

Recursos do Application Load Balancer

O ALB, assim como o Classic Load Balancer ou o NLB, é totalmente integrado à AWS. A Amazon o descreve como um balanceador de carga de camada 7, embora ele não ofereça toda a variedade de recursos, opções de ajuste e controle direto que um proxy reverso e balanceador de carga de camada 7 independente pode oferecer.

O ALB oferece os seguintes recursos que não estão disponíveis no Classic Load Balancer:

  • Roteamento baseado em conteúdo. O ALB oferece suporte ao roteamento baseado em conteúdo com base na URL da solicitação, Host e em campos da solicitação, incluindo cabeçalhos HTTP padrão e personalizados, métodos HTTP, parâmetros de consulta e endereço IP de origem. (Consulte “Benefícios da migração de um Classic Load Balancer” na documentação do ALB.)
  • Suporte a aplicações baseadas em contêineres. O ALB aprimora o suporte existente a contêineres hospedados no Amazon EC2 Container Service (ECS).
  • Mais métricas. Você pode coletar métricas para cada microsserviço.
  • Suporte a WebSocket. O ALB oferece suporte a conexões TCP persistentes entre um cliente e um servidor.
  • Suporte a HTTP/2. O ALB oferece suporte a HTTP/2, uma alternativa superior para a entrega de conteúdo protegido por SSL/TLS.

(Para uma comparação completa dos recursos do ALB e do Classic Load Balancer, consulte “Comparações de produtos” na documentação da AWS.)

O ALB foi uma atualização significativa para os usuários da AWS que enfrentavam dificuldades com o conjunto limitado de recursos do Classic Load Balancer e ajudou, em certa medida, a atender aos requisitos de usuários avançados que precisam proteger, otimizar e controlar o tráfego de suas aplicações web. No entanto, ele ainda não oferece todos os recursos de proxies reversos dedicados (como o NGINX) e balanceadores de carga (como o NGINX Plus).

Uma abordagem melhor para controlar o tráfego na AWS

Em vez de usar o Amazon ALB, os usuários podem implantar o NGINX Open Source ou o NGINX Plus na AWS para controlar e balancear o tráfego. Eles também podem implantar o Classic Load Balancer ou o Network Load Balancer como frontend para obter alta disponibilidade em várias zonas de disponibilidade. A tabela compara os recursos compatíveis com ALB, NGINX e NGINX Plus.

Observação: As informações na tabela a seguir estão corretas até julho de 2020, mas estão sujeitas a alterações.

 Amazon ALBNGINX Open SourceNGINX Plus
Métodos e recursos
de balanceamento de carga
Métodos Round_robin e least_outstanding_requests, com persistência de sessão baseada em cookies, grupos de destino ponderados e inicialização lentaVários métodos de balanceamento de carga (incluindo Round Robin, Menor Número de Conexões, Hash, Hash de IP e Aleatório) com servidores upstream ponderadosIgual ao NGINX Open Source, além do método Menor Tempo, mais métodos de persistência de sessão e inicialização lenta
Cache❌ Não há suporte a cache no balanceador de carga✅ Cache de arquivos estáticos e cache dinâmico (de aplicações)✅ Cache estático e dinâmico, além de recursos avançados
Verificações de integridadeAtivas (identificam servidores com falha verificando o código de status retornado em verificações assíncronas)Passivas (identificam servidores com falha verificando as respostas às solicitações dos clientes)Ativas e passivas — as verificações ativas são mais completas e configuráveis do que as do ALB
Alta disponibilidadeÉ possível implantar instâncias do ALB em várias Zonas de Disponibilidade para obter alta disponibilidade, mas não entre regiõesAlta disponibilidade ativa-ativa com NLB e alta disponibilidade ativa-passiva com endereços IP elásticosIgual ao NGINX Open Source, além do compartilhamento integrado do estado do cluster para alta disponibilidade contínua entre todas as instâncias do NGINX Plus
Suporte a todos os protocolos da suíte IP❌ Somente HTTP e HTTPS✅ Também TCP e UDP, com verificações passivas de integridade✅ Também TCP e UDP, com verificações ativas e passivas de integridade
Várias aplicações por instância do balanceador de carga✅✅
Roteamento baseado em conteúdo✅ Com base na URL da solicitação, no cabeçalho Host e nos campos da solicitação, incluindo cabeçalhos HTTP padrão e personalizados, métodos, parâmetros de consulta e endereço IP de origem✅ Com base nos mesmos fatores que o ALB, além de cookies e cálculos dinâmicos usando o módulo JavaScript do NGINX como mecanismo JavaScript incorporado✅ Com base nos mesmos fatores que o NGINX Open Source, além de declarações JWT e valores no armazenamento de chave-valor
Aplicações em contêineresPode balancear a carga entre IDs da Amazon, instâncias de contêiner do ECS, grupos do Auto Scaling e funções do AWS LambdaRequer configuração manual ou modelos de configuraçãoConfiguração automatizada usando DNS, incluindo registros SRV; funciona com os principais serviços de registro
Portabilidade❌ Todos os ambientes (desenvolvimento, teste e produção) devem estar na AWS✅ Qualquer ambiente pode estar em qualquer plataforma de implantação
SSL/TLS✅ Vários certificados SSL/TLS com suporte a SNI
❌ Não há suporte à validação de upstreams SSL/TLS
✅ Vários certificados SSL/TLS com suporte a SNI
✅ Liberdade total de escolha de cifras SSL/TLS
✅ Validação completa de upstreams SSL/TLS
HTTP/2 e WebSocket✅✅
Recursos de autenticação– Opções de autenticação OIDC, SAML, LDAP e IdP do AD
– Integração com AWS Cognito e CloudFront
Várias opções de autenticação
Recursos avançados❌ API básica✅ Fornecimento de conteúdo de origem, priorização, limitação de taxa e muito mais✅ Igual ao NGINX Open Source, além de API RESTful e armazenamento de chave-valor
Registro e depuração✅ Formato de log binário da Amazon✅ Arquivos de log personalizáveis e várias interfaces de depuração✅ Arquivos de log totalmente personalizáveis e várias interfaces de depuração, com suporte completo da NGINX
Ferramentas de monitoramento✅ Integração com o Amazon CloudWatch✅ NGINX Controller* e outras ferramentas de terceiros✅ NGINX Controller e outras ferramentas de terceiros; conjunto ampliado de estatísticas relatadas
Suporte técnico oficial✅ Por um custo adicional❌ Somente suporte da comunidade✅ Incluído no preço e fornecido diretamente pela NGINX
Nível gratuito✅ Primeiras 750 horas✅ Sempre gratuito✅ Assinatura de avaliação por 30 dias

* O NGINX Controller agora é o F5 NGINX Management Suite.

É claro que você deve avaliar sua escolha de balanceamento de carga não com base em uma lista de recursos, mas considerando as funcionalidades necessárias para disponibilizar suas aplicações sem falhas, com alta segurança, máxima disponibilidade e controle total.

Como lidar com picos de tráfego

O Classic Load Balancer da Amazon (anteriormente chamado de ELB) apresentava uma resposta insatisfatória a picos de tráfego. As instâncias do balanceador de carga eram dimensionadas automaticamente de acordo com o nível de tráfego atual, e o ELB podia levar vários minutos para responder e disponibilizar capacidade adicional quando ocorriam picos. Os usuários precisavam recorrer a um processo manual, baseado em formulários, para solicitar recursos adicionais antes dos picos de tráfego (prática conhecida como “pré-aquecimento”). Como o ALB é baseado no NGINX, suas instâncias conseguem processar um volume de tráfego muito maior, mas ainda é possível observar eventos de escalabilidade em resposta a picos de tráfego. Além disso, um pico de tráfego resulta automaticamente em um consumo maior de Unidades de Capacidade do Balanceador de Carga (LCUs) e, consequentemente, em um custo mais elevado.

Você pode ter controle total sobre a capacidade e os custos ao implantar e dimensionar por conta própria seus proxies de balanceamento de carga. O NGINX e o NGINX Plus são implantados em instâncias padrão da Amazon, e nosso guia de dimensionamento fornece uma estimativa do desempenho máximo potencial de tipos de instância com diferentes capacidades. O preço do NGINX Plus é o mesmo para todos os tamanhos de instância, portanto, é econômico implantar capacidade excedente para lidar com picos, além de ser rápido implantar mais instâncias – sem precisar preencher formulários – quando for necessária mais capacidade.

Detectando servidores com falha por meio de verificações de integridade

Nossos testes com o Amazon ALB indicam que ele não implementa verificações de integridade “passivas”. Um servidor só é identificado como inoperante quando um teste assíncrono confirma que ele não está retornando o código de status esperado.

Descobrimos isso ao criar uma instância do ALB para balancear a carga de um cluster de instâncias. Configuramos uma verificação de integridade com a frequência mínima de 5 segundos e o limite mínimo de 2 verificações com falha e enviamos um fluxo constante de solicitações ao ALB. Quando interrompemos uma das instâncias, para algumas solicitações o ALB retornou um erro 502 Bad Gateway por vários segundos, até que a verificação de integridade detectasse que a instância estava inativa. As verificações passivas de integridade (compatíveis com o NGINX e o NGINX Plus) evitam que esses tipos de erro sejam vistos pelos usuários finais.

As verificações de integridade do ALB só conseguem determinar a integridade de uma instância inspecionando o código de status HTTP (como 200 OK ou 404 Not Found). Essas verificações de integridade não são confiáveis; por exemplo, algumas aplicações web substituem erros gerados pelo servidor por páginas mais amigáveis ao usuário, e alguns erros são informados apenas no corpo de uma página web.

O NGINX Plus oferece suporte a verificações de integridade passivas e verificações de integridade ativas, sendo estas últimas mais avançadas do que as do ALB, pois podem verificar tanto o corpo de uma resposta quanto o código de status.

Preços

Por fim, a principal questão ao implantar o ALB é o custo. O balanceamento de carga pode representar uma parcela significativa da sua fatura da Amazon.

A AWS usa um algoritmo complexo para determinar os preços. A menos que você saiba exatamente quantas novas conexões e quantas conexões simultâneas haverá, além do volume de dados que você gerenciará por mês – algo muito difícil de prever –, e consiga fazer o cálculo de LCU da mesma forma que a Amazon, você ficará apreensivo com a fatura da Amazon todos os meses.

O NGINX Plus na AWS oferece total previsibilidade. Por um custo fixo por hora, acrescido das tarifas de hospedagem da AWS, você obtém uma solução de balanceamento de carga significativamente mais avançada e com suporte completo.

Conclusão

O NGINX Plus é uma solução comprovada para balanceamento de carga na Camada 7, que também oferece recursos de balanceamento de carga na Camada 4. Ele funciona bem em conjunto com o Classic Load Balancer ou o NLB da própria Amazon.

Incentivamos o uso contínuo e crescente do NGINX e do NGINX Plus no ambiente da AWS, onde já são soluções muito populares. Se você ainda não usa o NGINX Plus, inicie hoje mesmo sua avaliação gratuita de 30 dias ou entre em contato conosco para conversar sobre seus casos de uso.


Compartilhar
Tags: 2020, Tech

Sobre o autor

Owen Garrett
Owen GarrettDiretor Sênior de Gestão de Produtos

Mais publicações de Owen Garrett

Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
NGINX | 10/10/2024

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade

Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
NGINX | 17/06/2024

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa

Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
NGINX | 14/07/2021

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor

Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
NGINX | 02/04/2019

Distribuição segura de chaves privadas SSL com o NGINX

Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
NGINX | 24/05/2018

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX

O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
NGINX | 19/04/2016

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus

Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.