O que são balanceadores de carga? Como distribuir efetivamente o tráfego de entrada

0
39


Os balanceadores de carga são componentes de infraestrutura que distribuem o tráfego de rede de entrada em vários servidores de back-end. Eles melhoram a capacidade e adicionam redundância, mantendo os serviços acessíveis se um de seus servidores falhar.

Receita de Loção para o Rosto com...
Receita de Loção para o Rosto com Aveia

Os balanceadores de carga atuam como o gateway público para seu aplicativo. Eles são especializados em sua função, para que possam ser altamente otimizados para maximizar o desempenho do tráfego. Normalmente, os balanceadores de carga podem ser configurados com vários tipos de algoritmos de roteamento para atender aos requisitos do aplicativo.

Neste artigo, exploraremos o que são balanceadores de carga, como eles funcionam e algumas das complicações que podem causar. Também explicaremos as diferenças entre os algoritmos de balanceamento de carga mais comuns.

O que os balanceadores de carga fazem?

Os balanceadores de carga são responsáveis ​​por fornecer um proxy reverso na frente de seus servidores de aplicativos. Todos os clientes se conectam a esse único proxy em vez de instâncias de back-end individuais. O balanceador de carga é responsável por selecionar um servidor para lidar com cada solicitação. Isso acontece de forma invisível para o cliente externo.

Estão disponíveis implementações de balanceador de carga baseadas em hardware e software. Do lado do software, a maioria dos servidores web, como Apache e NGINX, são capazes de cumprir a função. Os balanceadores de carga de hardware são implementados como componentes de infraestrutura independentes do seu provedor de hospedagem.

Os balanceadores de carga normalmente monitoram a integridade das instâncias em seu pool de back-end. Os back-ends que se tornam instáveis ​​param de receber novo tráfego, reduzindo a instabilidade e o tempo de inatividade do serviço. Da mesma forma, os load balancers geralmente permitem adicionar novas instâncias de back-end a qualquer momento, para que você possa dimensionar seu serviço com capacidade adicional durante os horários de pico.

O objetivo principal de um balanceador de carga é maximizar o desempenho e fazer o uso mais eficiente dos recursos disponíveis. A capacidade de escalar horizontalmente em servidores físicos geralmente é mais eficaz do que aumentar verticalmente um único nó com CPU ou memória adicional. O dimensionamento horizontal oferece mais redundância e capacidade, enquanto a sobrecarga incorrida pela camada do balanceador de carga geralmente é nominal.

Algoritmos de balanceamento de carga

Embora o objetivo do balanceamento de carga seja sempre distribuir o tráfego entre vários servidores, existem várias maneiras de conseguir isso. Antes de discutir estratégias específicas, é importante identificar os dois tipos fundamentais de algoritmo que você pode selecionar:

  • equilíbrio estático – Esses métodos funcionam a partir de valores de configuração codificados, o que os torna completamente previsíveis em sua operação. Esse tipo de algoritmo não leva em consideração o estado dos servidores back-end para os quais ele pode encaminhar, portanto, pode continuar enviando novas solicitações para uma instância já congestionada.
  • equilíbrio dinâmico – Algoritmos dinâmicos se ajustam em tempo real com base no fluxo de tráfego e disponibilidade de servidores em seu pool. Essas estratégias podem evitar automaticamente instâncias que já estão processando várias solicitações. O balanceamento de carga dinâmico pode aumentar marginalmente a sobrecarga porque o balanceador de carga precisa acompanhar o status de conclusão de cada solicitação.

Os sistemas de equilíbrio estático geralmente são mais fáceis de configurar, testar e inspecionar. O balanceamento dinâmico é muito mais poderoso e geralmente é a opção preferida para aplicativos de produção. Dentro de cada uma dessas classes, existem várias estratégias de roteamento específicas que você pode escolher:

  • todos contra todos – Round robin é um método de balanceamento estático que roteia solicitações para cada servidor por vez. Se você tiver três servidores A, B e C, a primeira solicitação de entrada irá para A, a segunda para B e a terceira para C. O balanceador de carga será reiniciado em A para a quarta solicitação.
  • deslocamento rotativo ponderado – Uma variação do algoritmo round robin onde os administradores definem as prioridades relativas de cada servidor no grupo. Um servidor pesado será usado com mais frequência e receberá uma parcela maior de tráfego. Esse método permite que você use a estratégia round robin quando seu grupo de servidores inclui servidores com especificações desiguais.
  • Aleatório – Muitos balanceadores de carga incluem uma opção verdadeiramente aleatória como uma opção estática alternativa.
  • fatiado – Essa estratégia de balanceamento estático gera um hash do endereço IP do cliente para determinar qual dos servidores de back-end tratará a solicitação. Isso garante que a mesma instância atenda a todas as conexões originadas desse cliente.
  • menos conexões – Este é um algoritmo dinâmico popular que sempre direciona as solicitações recebidas para o servidor com o menor número de conexões abertas. Em muitos aplicativos, essa é a maneira mais eficaz de maximizar o desempenho geral.
  • Maior disponibilidade de largura de banda – Este método envia novo tráfego para o servidor com a maior largura de banda disponível. Isso é ideal em situações em que as solicitações individuais provavelmente usarão uma grande quantidade de largura de banda, mesmo que a contagem total de solicitações ainda seja baixa.
  • Ponto de extremidade de integridade/carregamento personalizado – Muitos balanceadores de carga incluem uma maneira de tomar decisões de distribuição de tráfego com base em métricas personalizadas expostas por seus servidores de back-end. Uso de CPU, consumo de memória e outras métricas críticas podem ser consultadas usando um mecanismo como SNMP.

Outros recursos do balanceador de carga

Os balanceadores de carga podem criar algumas complicações para seu aplicativo. Um dos mais prevalentes é o desafio de alcançar sessões de back-end rígidas. É comum que os sistemas mantenham o estado no servidor e precisem persistir entre as conexões do cliente.

Você pode atenuar isso usando o algoritmo de saldo de hash ou uma opção semelhante baseada no cliente. Isso garante que as conexões do mesmo endereço IP terminem em um servidor específico. A maioria dos balanceadores de carga também oferece uma opção de sessões fixas explícitas que procura um cabeçalho ou cookie designado em uma solicitação HTTP. Esse valor pode ser usado para direcionar consistentemente solicitações para o mesmo servidor após a conexão inicial do cliente.

Os balanceadores de carga também podem criar complexidade em torno do SSL. Muitas organizações configuram o SSL para encerrar no balanceador de carga. As conexões entre o balanceador de carga e seus servidores de back-end são feitas por meio de HTTP normal. Isso geralmente resulta em uma experiência de configuração mais simples com demandas de manutenção reduzidas.

O uso de conexões somente HTTP na direção direta nem sempre é aceitável para cargas de trabalho críticas à segurança. Os balanceadores de carga com capacidade de passagem SSL podem enviar tráfego diretamente para seus servidores de back-end, sem primeiro descriptografar os dados. No entanto, isso restringe a funcionalidade de roteamento que você pode usar: como o balanceador de carga não pode descriptografar solicitações de entrada, ele não poderá corresponder com base em atributos como cabeçalhos e cookies.

Balanceadores de carga de camada 4 e camada 7

O balanceamento de carga é frequentemente discutido no contexto das redes de Camada 4 (L4) e Camada 7 (L7). Esses termos descrevem o ponto em que o balanceador de carga roteia o tráfego dentro do ciclo de vida de uma solicitação de rede.

Um recurso de camada 4 opera no nível de transporte de rede. Esses balanceadores de carga tomam decisões de roteamento com base nas características do transporte de solicitação, como a porta TCP ou UDP que foi usada. Os dados específicos da solicitação não são levados em consideração.

Um balanceador de carga de camada 7 fica ao lado da camada de aplicativo. Esses balanceadores de carga podem acessar dados complexos na solicitação e usá-los para informar regras de roteamento específicas para a carga de trabalho. É aqui que o balanceamento de carga que representa um ID de sessão em um cabeçalho ou cookie HTTP pode ocorrer.

O balanceamento de carga da camada 7 é poderoso, mas relativamente intensivo em recursos. Você precisa analisar e inspecionar o conteúdo de cada solicitação antes que ela possa ser passada para um back-end. A natureza baseada em pacotes dos balanceadores de carga da camada 4 oferece menos controle, mas tem um impacto correspondentemente baixo no desempenho. A camada 4 também não descriptografa o tráfego, portanto, uma confirmação do balanceador de carga neste estágio não exporá os dados da solicitação.

conclusão

Os balanceadores de carga permitem rotear o tráfego de entrada entre seus servidores. Eles são um componente crítico de arquiteturas de rede altamente disponíveis que permitem a execução transparente de várias instâncias de back-end. Isso aumenta a capacidade do serviço e evita uma interrupção total se um servidor ficar offline.

A maioria das implementações do balanceador de carga oferece várias opções de algoritmos diferentes, incluindo opções estáticas e dinâmicas. Muitos aplicativos são bem servidos por opções simples como “menos conexões” ou “tomada de turnos”, mas opções mais complexas são úteis em situações específicas.

É uma boa prática executar cada aplicativo de produção atrás de um balanceador de carga. Ele oferece a flexibilidade de dimensionar sob demanda e reagir a servidores insalubres. O balanceamento de carga geralmente é fácil de configurar em sua pilha de hospedagem ou na infraestrutura de rede do provedor de nuvem.