PERF05-BP04 Utilizar o balanceamento de carga e o descarregamento da criptografia - AWS Well-Architected Framework

PERF05-BP04 Utilizar o balanceamento de carga e o descarregamento da criptografia

Use balanceadores de carga para obter eficiência de desempenho ideal de seus recursos de destino e melhore a capacidade de resposta do seu sistema.

Resultado desejado: reduza o número de recursos de computação para atender o tráfego. Evite o desequilíbrio do consumo de recursos em seus destinos. Descarregue tarefas com uso intenso de computação para o balanceador de carga. Utilize a elasticidade e a flexibilidade da nuvem para melhorar o desempenho e otimizar a arquitetura.

Antipadrões comuns:

  • Você não considera os requisitos da workload ao escolher o tipo de balanceador de carga.

  • Você não utiliza os recursos do balanceador de carga para otimização do desempenho.

  • A workload é exposta diretamente para a internet sem um balanceador de carga.

Nível de exposição a riscos quando esta prática recomendada não é estabelecida: alto

Orientações para a implementação

Os balanceadores de carga atuam como ponto de entrada para a workload e, de lá, distribuem o tráfego para seus destinos de back-end, como contêineres ou instâncias de computação. Escolher o tipo certo de balanceador de carga é a primeira etapa para otimizar sua arquitetura.

Comece listando as características da workload, como protocolo (como TCP, HTTP, TLS ou WebSockets), o tipo de destino (como instâncias, contêineres ou tecnologia sem servidor), requisitos da aplicação (como conexões de execução longa, autenticação de usuários ou adesão) e posicionamento (como região, zona local, Outpost ou isolamento por zona).

Depois de escolher o balanceador de carga certo, você pode começar a utilizar seus recursos para reduzir a quantidade de esforço que seu back-end precisa fazer para atender o tráfego.

Por exemplo, ao usar tanto o Application Load Balancer (ALB) como o Network Load Balancer (NLB), é possível realizar a descarregamento de criptografia SSL/TLS, que é uma oportunidade de evitar que o handshake TLS com uso intenso da CPU seja concluído pelos destinos e também melhorar o gerenciamento de certificados.

Ao configurar o descarregamento de SSL/TLS no balanceador de carga, ele se torna responsável pela criptografia do tráfego de e para os clientes enquanto entrega o tráfego não criptografado aos back-ends, liberando os recursos de back-end e melhorando o tempo de resposta para os clientes.

O Application Load Balancer também pode fornecer tráfego HTTP2 sem precisar comportá-lo em seus destinos. Essa simples decisão pode melhorar o tempo de resposta da aplicação, já que o HTTP2 usa conexões TCP de forma mais eficiente.

Os balanceadores de carga também podem ser usados para tornar a arquitetura mais flexível distribuindo o tráfego por diferentes tipos de back-end, como contêineres e tecnologia sem servidor. Por exemplo, o Application Load Balancer pode ser configurado com regras de receptor que encaminham o tráfego para diferentes grupos de destino com base nos parâmetros da solicitação, como cabeçalho, método ou padrão.

Os requisitos de latência da workload também devem ser considerados ao definir a arquitetura. Como exemplo, se você tiver uma aplicação sensível à latência, poderá decidir usar o Network Load Balancer, que oferece latências extremamente baixas. Como alternativa, você pode decidir aproximar a workload dos clientes utilizando o Application Load Balancer em zonas locais da AWS ou até mesmo em AWS Outposts.

Outra consideração para workloads sensíveis à latência é o balanceamento de carga entre zonas. Com o balanceamento de carga entre zonas, cada nó do balanceador de carga distribui o tráfego entre os destinos registrados em todas as zonas de disponibilidade habilitadas. Isso melhora a disponibilidade, embora possa adicionar um milissegundo de um dígito à latência de ida e volta.

Por fim, tanto o ALB como o NLB oferecem recursos de monitoramento como logs e métricas. Configurar o monitoramento corretamente pode ajudar a coletar informações de desempenho da aplicação. Por exemplo, é possível usar os logs de acesso do ALB para encontrar quais solicitações estão levando mais tempo para serem atendidas ou quais destinos de back-end estão causando problemas de desempenho.

Etapas da implementação

  1. Escolha o balanceador de carga certo para a workload.

    1. Use o Application Load Balancer para workloads HTTP/HTTPS.

    2. Use o Network Load Balancer para workloads que não são HTTP que executam TCP ou UDP.

    3. Use uma combinação de ambos (ALB como destino do NLB) se quiser utilizar os recursos dos dois produtos. Por exemplo, é possível fazer isso se você quiser usar os IPs estáticos do NLB junto com o roteamento baseado em cabeçalho HTTP da ALB, ou se quiser expor a workload HTTP em um AWS PrivateLink.

    4. Para ver uma comparação entre balanceadores de carga, consulte a comparação de produtos do ELB.

  2. Use o descarregamento de SSL/TLS.

    1. Configure receptores HTTPS/TLS tanto com Application Load Balancer como com Network Load Balancer integrados ao AWS Certificate Manager.

    2. Observe que algumas workloads podem exigir criptografia completa por motivos de conformidade. Nesse caso, é um requisito para habilitar a criptografia nos destinos.

    3. Para consultar as práticas recomendadas de segurança, consulte SEC09-BP02 Aplicar criptografia a dados em trânsito.

  3. Escolha o algoritmo de roteamento certo.

    1. O algoritmo de roteamento pode fazer a diferença em como os destinos de back-end são bem-utilizados e, portanto, na forma em como afetam o desempenho. Por exemplo, o ALB fornece duas opções para algoritmos de roteamento:

    2. Menos solicitações pendentes: use para obter uma melhor distribuição de carga para seus destinos de back-end em casos nos quais as solicitações para a aplicação variam em complexidade ou os destinos variam na capacidade de processamento.

    3. Distribuição equilibrada: use quando as solicitações e os destinos forem semelhantes, ou se você precisar distribuir as solicitações igualmente entre os destinos.

  4. Considere isolamento por zona ou entre zonas.

    1. Desative a opção entre zonas (isolamento por zona) para melhorias de latência e domínios com falha de zona. Ela está desativada por padrão no NLB e no ALB é possível ativá-la por grupo de destino.

    2. Ative a opção entre zonas para maior disponibilidade e flexibilidade. Por padrão, a opção entre zonas está ativada para o ALB e no NLB é possível ativá-la por grupo de destino.

  5. Ative as manutenções de funcionamento de HTTP para as workloads HTTP.

    1. Para workloads HTTP, ative a manutenção de funcionamento de HTTP nas configurações do servidor web para os destinos de back-end. Com esse recurso, o balanceador de carga pode reutilizar as conexões de back-end até expirar o tempo limite da manutenção de funcionamento, melhorando a solicitação HTTP e o tempo de resposta, além de reduzir a utilização de recursos nos destinos de back-end. Para obter detalhes de como fazer isso para o Apache e o Nginx, consulte What are the optimal settings for using Apache or NGINX as a backend server for ELB? (Quais são as configurações ideais para usar o Apache ou o NGINX como um servidor de back-end para o ELB?)

  6. Use integrações do Elastic Load Balancing para melhor orquestração dos recursos de computação.

    1. Use o Auto Scaling integrado ao balanceador de carga. Um dos principais aspectos de um sistema com desempenho eficiente está relacionado ao dimensionamento correto dos recursos de back-end. Para fazer isso, é possível utilizar as integrações do balanceador de carga para os recursos de destino de back-end. Ao usar a integração do balanceador de carga com os grupos do Auto Scaling, os destinos serão adicionados ou removidos do balanceador de carga conforme exigido em resposta ao tráfego recebido.

    2. Os balanceadores de carga também podem ser integrados ao Amazon ECS e ao Amazon EKS para workloads em contêineres.

  7. Monitore o balanceador de carga para encontrar gargalos de desempenho.

    1. Habilite os logs de acesso para o Application Load Balancer e o Network Load Balancer.

    2. Os principais campos a considerar para o ALB são request_processing_time, o request_processing_timee o response_processing_time.

    3. Os principais campos a considerar para o NLB são connection_time e o tls_handshake_time.

    4. Esteja pronto para consultar os logs quando precisar deles. É possível usar o Amazon Athena para consultar tanto os logs do ALB como os logs do NLB.

    5. Crie alarmes para métricas relacionadas ao desempenho, como TargetResponseTime para o ALB.

Recursos

Práticas recomendadas relacionadas:

Documentos relacionados:

Vídeos relacionados:

Exemplos relacionados: