AWS

22 set, 2016

Conheça a novidade AWS Application Load Balancer

Publicidade

Lançamos o Elastic Load Balancing (ELB) para AWS na primavera de 2009 (veja New Features for Amazon EC2: Elastic Load Balancing, Auto Scaling, and Amazon CloudWatch para ver o quão longe a AWS tem ido desde então). O Elastic Load Balancing tornou-se um componente de arquitetura fundamental para muitas aplicações executadas na AWS. Em conjunto com o Auto Scaling, o Elastic Load Balancing simplifica a tarefa de construção de aplicações que podem escalar para cima e para baixo, mantendo uma alta disponibilidade.

No nível

Per o modelo OSI bem conhecido, balanceadores de carga são geralmente executados na camada 4 (transporte) ou na camada 7 (aplicação).

Um balanceador de carga de camada 4 funciona no nível de protocolo de rede e não olha para dentro dos pacotes de rede reais, mantendo as especificidades de HTTP e HTTPS desconhecidas. Em outras palavras, ele equilibra a carga sem necessariamente saber muita coisa sobre ela.

O balanceador de carga de camada 7 é mais sofisticado e mais poderoso. Ele inspeciona os pacotes, tem acesso aos cabeçalhos HTTP e HTTPS, e (munido de mais informações) pode fazer um trabalho mais inteligente de espalhar a carga para fora do alvo.

Application Load Balancing para AWS

aws-1Recentemente, lançamos a nova opção Application Load Balancer do ELB. Essa opção é executada na camada 7 e suporta algumas características avançadas. A opção original (agora chamada de Classic Load Balancer) ainda está disponível para você e continua a oferecer as funcionalidades das camadas 4 e 7.

O Application Load Balancer suporta roteamento baseado em conteúdo e suporte para aplicativos que são executados em containers. Eles suportam dois protocolos padrão da indústria (WebSocket e HTTP/2) e também proporcionam visibilidade adicional para a saúde das instâncias-alvo e containers. Sites e aplicativos móveis, executando em containers ou em instâncias EC2, irão se beneficiar da utilização do Application Load Balancer.

Vamos dar uma olhada em cada um desses recursos e, em seguida, criar nós mesmos um novo Application Load Balancer!

Roteamento baseado em conteúdo

Um Application Load Balancer tem acesso a cabeçalhos HTTP e permite encaminhar as solicitações para diferentes serviços de back-end em conformidade. Por exemplo, você pode querer enviar solicitações que incluem /api no caminho de URL a um grupo de servidores (que nós chamamos de grupos-alvo) e os pedidos que incluem /mobile para outros. Encaminhamento de solicitações dessa forma permite construir aplicações que são compostos de vários microservices que podem rodar e ser dimensionados de forma independente.

Como você verá em um momento, cada Application Load Balancer permite definir até 10 regras com base em URL para encaminhar pedidos de grupos-alvo. Ao longo do tempo, pretendemos dar-lhe acesso a outros métodos de encaminhamento.

Suporte para aplicações baseados em container

Muitos clientes da AWS estão empacotando suas microservices em recipientes e hospedando-os no Amazon EC2 Container Service. Isso permite que uma única instância EC2 execute um ou mais serviços, mas pode apresentar alguns desafios interessantes para o equilíbrio da carga tradicional no que diz respeito aos controles de mapeamento de portas e de saúde.

O Application Load Balancer reconhece e suporta aplicações baseadas em containers. Ele permite que uma instância hospede vários containers que conversam com várias portas do mesmo grupo-alvo e também executa exames de saúde refinados no nível de porta.

Métricas melhores

O Application Load Balancer pode executar e informar sobre exames de saúde em uma base por porta. Os exames de saúde podem especificar um intervalo de respostas HTTP aceitáveis, e são acompanhados por códigos de erro detalhados.

Como um subproduto do roteamento baseado em conteúdo, você também tem a oportunidade de coletar métricas sobre cada um de seus microservices. Esse é um efeito colateral muito bom; cada um dos microservices pode ser executado em seu próprio grupo-alvo, em um conjunto específico de instâncias de EC2. Essa maior visibilidade lhe permitirá fazer um trabalho melhor de escalar para cima e para baixo em resposta à carga em serviços individuais.

O Application Load Balancer oferece várias métricas novas do CloudWatch, incluindo o tráfego total (em GB), o número de conexões ativas e a taxa de conexão por hora.

Suporte para protocolos e cargas de trabalho adicionais

O Application Load Balancer suporta dois protocolos adicionais: WebSocket e HTTP/2.

O WebSocket permite configurar conexões TCP de longa data entre o cliente e o servidor. Essa é uma alternativa mais eficiente para o método old-school que envolveu conexões HTTP que foram realizadas abertas com uma “pulsação” por um longo período de tempo. O WebSocket é ótimo para dispositivos móveis e pode ser usado para entregar cotações de ações, resultados esportivos e outros dados dinâmicos, minimizando o consumo de energia. O ALB fornece suporte nativo para WebSocket através dos protocolos ws:// e wss://.

O HTTP/2 é uma melhoria significativa do protocolo original HTTP 1.1. O novo recurso do protocolo suporta pedidos multiplexados através de uma única conexão. Isso reduz o tráfego da rede, tal como a natureza binária do protocolo.

O Application Load Balancer é projetado para lidar com streaming, em tempo real e com as cargas de trabalho WebSocket de forma otimizada. Em vez de bufferizar os pedidos e as respostas, ele lida com eles na forma de streaming. Isso reduz a latência e aumenta o desempenho percebido de sua aplicação.

Criando um ALB

Vamos criar e configurar um Application Load Balancer para processar algum tráfego!

O Console do Elastic Load Balancing permite criar qualquer tipo de balanceador de carga:

aws-2

Eu clico em Application load balancer, digito um nome (MyALB) e escolho internet-facing. Então, eu adiciono um ouvinte HTTPS:

aws-3

Na mesma tela, eu escolho o meu VPC (esse é um recurso VPC-only) e uma sub-rede em cada zona de disponibilidade desejada, marco o meu Application Load Balancer, e prossigo para Configure Security Settings:

aws-4

Uma vez que eu criei um ouvinte HTTPS, meu Application Load Balancer precisa de um certificado. Eu posso escolher um certificado existente que já está em IAM ou AWS Certificate Manager (ACM), fazer upload de um certificado local, ou solicitar um novo:

aws-5

Seguindo em frente, eu monto o meu grupo de segurança. Nesse caso, eu decidi criar um novo. Eu poderia ter usado um dos meus grupos de segurança EC2 ou VPC existentes com a mesma facilidade:

aws-6

O próximo passo é criar o meu primeiro grupo-alvo (main) e configurar as respectivas verificações de saúde (vou usar as configurações padrão):

aws-7

Agora estou pronto para escolher os alvos – o conjunto de instâncias EC2 que receberão o tráfego através do meu Application Load Balancer. Aqui, eu escolhi os alvos que estão escutando na porta 80:

aws-8

O último passo é rever minhas escolhas e para Create o meu ALB:

aws-9

Depois que eu clicar em Create, o Application Load Balancer é provisionado e se torna ativo dentro de um minuto ou algo assim:

aws-10

Eu posso criar grupos-alvo adicionais:

aws-11

E então eu posso adicionar uma nova regra que encaminha solicitações /api para o alvo:

aws-12

O Application Load Balancers trabalha com vários serviços da AWS, incluindo Auto Scaling, Amazon ECS, AWS CloudFormation, AWS CodeDeploy e AWS Certificate Manager (ACM). O suporte para outros serviços está em andamento.

Moving on Up

Se você está usando um balanceador de carga clássico e gostaria de migrar para um Application Load Balancer, dê uma olhada em nosso novo Load Balancer Copy Utility. Essa ferramenta Python vai ajudar você a criar um Application Load Balancer com a mesma configuração como um balanceador de carga clássico existente. Ela também pode registrar suas instâncias EC2 existentes com o novo balanceador de carga.

Disponibilidade e preços

O Application Load Balancer já está disponível em todas as regiões comerciais da AWS, e você já pode começar a usá-lo!

A taxa horária para o uso de um Application Load Balancer é 10% menor do que o custo de um Classic Load Balancer.

Quando você usa um Application Load Balancer, você será cobrado por hora e para o uso de unidades de capacidade do Load Balancer, também conhecido como LCU. Um LCU mede o número de novas conexões por segundo, o número de conexões ativas e transferência de dados. Medimos em todas as três dimensões, mas a cobrança é feita com base na mais alta. Um LCU é suficiente para suportar qualquer uma:

  • 25 conexões/segundo com um certificado de 2 KB, 3.000 conexões ativas e 2,22 Mbps de transferência de dados ou
  • 5 conexões/segundo com um certificado de 4 KB, 3.000 conexões ativas e 2,22 Mbps de transferência de dados.

A cobrança para uso LCU é fracionada, e é cobrado em US $ 0,008 por LCU por hora. Com base em nossos cálculos, acreditamos que praticamente todos os nossos clientes podem obter uma redução líquida em seus custos de balanceamento de carga, passando de um Classic Load Balancer para um Application Load Balancer.

Deixe suas dúvidas e/ou comentários aqui ou escreva diretamente para o autor (em inglês).