Cloud Computing

Ξ Deixe um comentário

AWS ELB – Como fornecer uma experiência mais consistente?

publicado por Guilherme Teles

Balanceamento de Carga Elástico

Uma vantagem de ter acesso a um grande número de servidores na nuvem, como instâncias do Amazon EC2 na AWS, é a capacidade de fornecer uma experiência mais consistente para o usuário final.

Uma maneira de garantir consistência é equilibrar a carga da solicitação em mais de um servidor. Um balanceador de carga é um mecanismo que distribui automaticamente o tráfego entre várias instâncias do Amazon EC2.

Você pode gerenciar seus próprios balanceadores de carga virtuais nas instâncias do Amazon EC2 ou aproveitar um serviço da AWS chamado Elastic Load Balancing, que fornece um balanceador de carga gerenciado para você.

O serviço Elastic Load Balancing permite distribuir o tráfego entre um grupo de instâncias do Amazon EC2 em uma ou mais zonas de disponibilidade, permitindo obter alta disponibilidade em seus aplicativos. O Balanceamento de carga elástico oferece suporte ao roteamento e balanceamento de carga do HTTP (Hypertext Transfer Protocol), HTTPS (Hypertext Transfer Protocol Secure), Transmission Control Protocol (TCP) e Secure Sockets Layer (SSL) para instâncias do Amazon EC2.

O Elastic Load Balancing fornece um ponto de entrada único e estável de registro de nome canônico (CNAME) para a configuração do DNS (Sistema de Nome de Domínio) e suporta balanceadores de carga voltados para a Internet e internos para aplicativos.

O Elastic Load Balancing suporta verificações de integridade para instâncias do Amazon EC2 para garantir que o tráfego não seja roteado para instâncias não íntegras ou com falha. Além disso, o Elastic Load Balancing pode ser dimensionado automaticamente com base nas métricas coletadas.

Existem várias vantagens em usar o Elastic Load Balancing. Como o Elastic Load Balancing é um serviço gerenciado, ele entra e sai automaticamente para atender às demandas do aumento do tráfego de aplicativos e está altamente disponível na própria região como serviço.

O Elastic Load Balancing ajuda a obter alta disponibilidade para seus aplicativos, distribuindo o tráfego entre instâncias íntegras em várias zonas de disponibilidade. Além disso, o Elastic Load Balancing se integra perfeitamente ao serviço Auto Scaling para dimensionar automaticamente as instâncias do Amazon EC2 atrás do balanceador de carga.

Por fim, o Elastic Load Balancing é seguro, trabalhando com o Amazon Virtual Private Cloud (Amazon VPC) para rotear o tráfego internamente entre as camadas de aplicativos, permitindo expor apenas endereços IP públicos da Internet. O Elastic Load Balancing também suporta gerenciamento de certificado integrado e terminação SSL.

Tipos de Balanceadores de Carga

O Elastic Load Balancing fornece vários tipos de balanceadores de carga para lidar com diferentes tipos de conexões, incluindo balanceadores voltados para a Internet, internos e que suportam conexões criptografadas.

Balanceadores de Carga Voltados para a Internet

Um balanceador de carga voltado para a Internet é, como o nome indica, um balanceador de carga que recebe solicitações de clientes pela Internet e as distribui para instâncias do Amazon EC2 que são registrado com o balanceador de carga.

Quando você configura um balanceador de carga, ele recebe um nome DNS público que os clientes podem usar para enviar solicitações ao seu aplicativo. Os servidores DNS resolvem o nome DNS para o endereço IP público do seu balanceador de carga, que pode ser visível para aplicativos clientes.

Uma prática recomendada da AWS é sempre fazer referência a um balanceador de carga pelo nome DNS, em vez do endereço IP do balanceador de carga, a fim de fornecer um ponto de entrada único e estável. Como o Elastic Load Balancing é expandido para atender à demanda de tráfego, não é recomendável vincular um aplicativo a um endereço IP que pode não fazer mais parte do pool de recursos de um balanceador de carga. Pontos importantes a serem lembrados:

  • O Elastic Load Balancing no Amazon VPC suporta apenas endereços IPv4.
  • O Balanceamento de carga elástico no EC2-Classic suporta endereços IPv4 e IPv6.

Balanceadores de Carga Internos

Em um aplicativo de várias camadas, geralmente é útil carregar o equilíbrio entre as camadas do aplicativo.

Por exemplo, um balanceador de carga voltado para a Internet pode receber e equilibrar o tráfego externo para a apresentação ou camada da Web cujas instâncias do Amazon EC2 enviam suas solicitações para um balanceador de carga sentado na frente da camada de aplicativo. Você pode usar balanceadores de carga internos para rotear o tráfego para suas instâncias do Amazon EC2 em VPCs com sub-redes privadas.

Balanceadores de Carga HTTPS

Você pode criar um balanceador de carga que use o protocolo SSL / Transport Layer Security (TLS) para conexões criptografadas (também conhecidas como descarga SSL). Esse recurso permite a criptografia de tráfego entre o seu balanceador de carga e os clientes que iniciam sessões HTTPS e para conexões entre seu balanceador de carga e suas instâncias de back-end.

O Elastic Load Balancing fornece políticas de segurança que têm configurações predefinidas de negociação SSL a serem usadas para negociar conexões entre clientes e o balanceador de carga.

Para usar o SSL, você deve instalar um certificado SSL no balanceador de carga usado para encerrar a conexão e descriptografar solicitações de clientes antes de enviar solicitações para as instâncias de backend do Amazon EC2. Opcionalmente, você pode optar por ativar a autenticação em suas instâncias de back-end.

O Elastic Load Balancing não suporta SNI (Server Name Indication) no seu balanceador de carga. Isso significa que, se você deseja hospedar vários sites em uma frota de instâncias do Amazon EC2 por trás do Elastic Load Balancing com um único certificado SSL, será necessário adicionar um nome alternativo do assunto (SAN) para cada site ao certificado para evitar que os usuários do site vejam uma mensagem de aviso quando o site é acessado.

Listeners (Ouvintes)

Todo balanceador de carga deve ter um ou mais listeners configurados. Um listener é um processo que verifica solicitações de conexão – por exemplo, um CNAME configurado com o nome de registro A de balanceador de carga.

Todo listener é configurado com um protocolo e uma porta (cliente para balanceador de carga) para uma conexão front-end e um protocolo e uma porta para a conexão back-end (balanceador de carga para instância do Amazon EC2).

O Elastic Load Balancing suporta os seguintes protocolos:

  • HTTP
  • HTTPS
  • TCP
  • SSL

O Elastic Load Balancing suporta protocolos que operam em duas camadas diferentes de OSI (Open System Interconnection).

No modelo OSI, a Camada 4 é a camada de transporte que descreve a conexão TCP entre o cliente e sua instância de back-end por meio do balanceador de carga. A camada 4 é o nível mais baixo configurável para o seu balanceador de carga.

A camada 7 é a camada de aplicativo que descreve o uso de conexões HTTP e HTTPS dos clientes para o balanceador de carga e do balanceador de carga para sua instância de back-end. O protocolo SSL é usado principalmente para criptografar dados confidenciais em redes inseguras, como a Internet.

O protocolo SSL estabelece uma conexão segura entre um cliente e o servidor back-end e garante que todos os dados passados ​​entre o cliente e o servidor sejam privados.

Configurando o Balanceamento de Carga Elástico

O Elastic Load Balancing permite configurar muitos aspectos do balanceador de carga, incluindo tempo limite de conexão inativa, balanceamento de carga entre zonas, drenagem de conexão, protocolo proxy, sessões permanentes e verificações de integridade. As definições de configuração podem ser modificadas usando o AWS Management Console ou uma interface de linha de comando (CLI). Algumas das opções são descritas a seguir.

Tempo limite de conexão inativa

Para cada solicitação que um cliente faz por meio de um balanceador de carga, o balanceador de carga mantém duas conexões. Uma conexão é com o cliente e a outra é com a instância de back-end.

Para cada conexão, o balanceador de carga gerencia um tempo limite inativo que é acionado quando nenhum dado é enviado pela conexão por um período especificado.

Após o período de tempo limite inativo, se nenhum dado foi enviado ou recebido, o balanceador de carga fecha a conexão. Por padrão, o Elastic Load Balancing define o tempo limite inativo para 60 segundos nas duas conexões.

Se uma solicitação HTTP não for concluída dentro do período de tempo limite inativo, o balanceador de carga fechará a conexão, mesmo se os dados ainda estiverem sendo transferidos.

Você pode alterar a configuração de tempo limite ocioso das conexões para garantir que operações demoradas, como upload de arquivos, tenham tempo para serem concluídas. Se você usa listeners HTTP e HTTPS, recomendamos que você ative a opção keep-alive para suas instâncias do Amazon EC2.

Você pode ativar o keep-alive nas configurações do servidor da web ou nas configurações do kernel para as instâncias do Amazon EC2. Manter ativo (keepalive), quando ativado, permite que o balanceador de carga reutilize conexões com sua instância de back-end, o que reduz a utilização da CPU.

Para garantir que o balanceador de carga seja responsável por fechar as conexões com sua instância de backend, verifique se o valor definido para o tempo de manutenção é maior que a configuração de tempo limite inativo no seu balanceador de carga

Balanceamento de Carga entre Zonas (CrossZone)

Para garantir que o tráfego de solicitação seja roteado uniformemente em todas as instâncias de back-end para o seu balanceador de carga, independentemente da zona de disponibilidade em que elas estão localizadas, você deve habilitar o balanceamento de carga entre zonas no seu balanceador de carga.

O balanceamento de carga entre zonas reduz a necessidade de manter números equivalentes de instâncias de back-end em cada zona de disponibilidade e melhora a capacidade do seu aplicativo de lidar com a perda de uma ou mais instâncias de back-end. No entanto, ainda é recomendável que você mantenha um número aproximadamente equivalente de instâncias em cada zona de disponibilidade para obter maior tolerância a falhas.

Para ambientes em que os clientes armazenam em cache pesquisas de DNS, as solicitações recebidas podem favorecer uma das zonas de disponibilidade. Usando o balanceamento de carga entre zonas, esse desequilíbrio na carga de solicitação é espalhado por todas as instâncias de back-end disponíveis na região, reduzindo o impacto de clientes mal configurados.

Drenagem de Conexão (Connection Draining)

Você deve ativar a drenagem de conexão para garantir que o balanceador de carga pare de enviar solicitações para instâncias que estão com cancelamento de registro ou não estão íntegras, mantendo as conexões existentes abertas. Isso permite que o balanceador de carga conclua as solicitações de bordo feitas para essas instâncias.

Ao ativar a drenagem de conexão, é possível especificar um tempo máximo para o balanceador de carga manter as conexões ativas antes de relatar a instância como cancelada o registro.

O valor máximo do tempo limite pode ser definido entre 1 e 3.600 segundos (o padrão é 300 segundos). Quando o limite de tempo máximo é atingido, o balanceador de carga fecha forçosamente as conexões com a instância de cancelamento de registro.

Protocolo Proxy

Quando você usa TCP ou SSL para conexões de front-end e back-end, seu balanceador de carga encaminha solicitações para as instâncias de back-end sem modificar os cabeçalhos de solicitação.

Se você ativar o Protocolo Proxy, um cabeçalho legível por humanos será adicionado ao cabeçalho da solicitação com informações de conexão, como endereço IP de origem, endereço IP de destino e números de porta. O cabeçalho é então enviado para a instância de back-end como parte da solicitação.

Antes de usar o Proxy Protocol, verifique se o seu balanceador de carga não está atrás de um servidor proxy com o Proxy Protocol ativado. Se o Protocolo Proxy estiver ativado no servidor proxy e no balanceador, o balanceador de carga adiciona outro cabeçalho à solicitação, que já possui um cabeçalho do servidor proxy.

Dependendo de como sua instância de back-end estiver configurada, essa duplicação pode resultar em erros.

Sessões de aderência (Sticky Sessions)

Por padrão, um balanceador de carga roteia cada solicitação independentemente para a instância registrada com a menor carga.

No entanto, você pode usar o recurso de sessão permanente (também conhecido como afinidade da sessão), que permite ao balanceador de carga vincular a sessão de um usuário a uma instância específica. Isso garante que todas as solicitações do usuário durante a sessão sejam enviadas para a mesma instância.

A chave para gerenciar sessões persistentes é determinar por quanto tempo seu balanceador de carga deve encaminhar consistentemente a solicitação do usuário para a mesma instância.

Se seu aplicativo tiver seu próprio cookie de sessão, você poderá configurar o Elastic Load Balancing para que o cookie de sessão siga a duração especificada pelo cookie de sessão do aplicativo. Se seu aplicativo não tiver seu próprio cookie de sessão, você poderá configurar o Elastic Load Balancing para criar um cookie de sessão especificando sua própria duração de aderência.

O Elastic Load Balancing cria um cookie chamado AWSELB que é usado para mapear a sessão para a instância.

Verificações de Saúde

O Elastic Load Balancing suporta verificações de integridade para testar o status das instâncias do Amazon EC2 atrás de um balanceador de carga do Elastic Load Balancing.

O status das instâncias que estão em boas condições no momento da verificação de integridade é InService.

O status de todas as instâncias que não são íntegras no momento da verificação de integridade é OutOfService.

O balanceador de carga executa verificações de integridade em todas as instâncias registradas para determinar se a instância está em um estado íntegro ou não íntegro.

Uma verificação de integridade é um ping, uma tentativa de conexão ou uma página que é verificada periodicamente. Você pode definir o intervalo de tempo entre as verificações de integridade e também o tempo de espera para responder, caso a página de verificação de integridade inclua um aspecto computacional.

Por fim, você pode definir um limite para o número de falhas consecutivas na verificação de integridade antes que uma instância seja marcada como não íntegra.

Atualizações por trás de um Balanceador de Carga Elástico

Aplicativos de execução demorada precisarão ser mantidos e atualizados com uma versão mais recente do aplicativo.

Ao usar instâncias do Amazon EC2 executando atrás de um balanceador de carga do Elastic Load Balancing, você pode cancelar o registro manual dessas instâncias de longa duração do Amazon EC2 associadas a um balanceador de carga e registrar manualmente as instâncias do Amazon EC2 recém-iniciadas que você iniciou com as novas atualizações instaladas.

Autor

Você também pode me encontrar ↴ Facebook ☛ https://www.facebook.com/guilhermetelestech Instagram ☛  http://instagram.com/guilhermeteles__ Conheça o meu site ↴ http://www.guilhermeteles.com.br.com.br/

Guilherme Teles

Comentários

You must be logged in to post a comment.

Busca

Patrocínio

Publicidade



Siga-nos!

Newsletter: Inscreva-se

Para se inscrever em nossa newsletter preencha o formulário.

Artigos Recentes