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


0

Os balanceadores de carga são componentes de infraestrutura que distribuem o tráfego de rede de entrada entre 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.

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 rendimento do tráfego. Os balanceadores de carga geralmente são configuráveis ​​com vários tipos de algoritmo de roteamento para atender aos requisitos do seu 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 dos servidores do seu aplicativo. Todos os clientes se conectam a esse único proxy em vez das instâncias de back-end individuais. O balanceador de carga é responsável por selecionar um servidor para lidar com cada solicitação. Isso ocorre de forma invisível para o cliente externo.

Estão disponíveis implementações de balanceador de carga baseadas em hardware e software. No lado do software, a maioria dos servidores da Web, como Apache e NGINX, são capazes de cumprir a função. Os balanceadores de carga do tipo hardware são implantados como componentes de infraestrutura autônomos do seu provedor de hospedagem.

Os balanceadores de carga geralmente monitoram a integridade das instâncias em seu pool de servidores de back-end. Os back-ends que se tornam insalubres param de receber novo tráfego, reduzindo a falha 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 extra durante os horários de pico.

O objetivo principal de um balanceador de carga é maximizar a taxa de transferência e fazer o uso mais eficiente dos recursos disponíveis. Ser capaz de escalar horizontalmente em servidores físicos geralmente é mais eficaz do que aumentar verticalmente um único nó com CPU ou memória extra. 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 pelas quais isso pode ser alcançado. Antes de analisar estratégias específicas, é importante identificar os dois tipos fundamentais de algoritmo que você pode selecionar:

  • Balanceamento estático – Esses métodos funcionam a partir de valores de configuração codificados, tornando-os completamente previsíveis em sua operação. Esse tipo de algoritmo não leva em consideração o estado dos servidores backend para os quais ele pode encaminhar, portanto, pode continuar enviando novas solicitações para uma instância já congestionada.
  • Balanceamento dinâmico – Os algoritmos dinâmicos se ajustam em tempo real com base no fluxo de tráfego e na disponibilidade de servidores em seu pool. Essas estratégias são capazes de evitar automaticamente instâncias que já estão tratando de diversas requisições. O balanceamento de carga dinâmico pode aumentar marginalmente as sobrecargas, pois o balanceador de carga precisa rastrear o status de conclusão de cada solicitação.

Os sistemas de balanceamento estático geralmente são mais fáceis de configurar, testar e inspecionar. O balanceamento dinâmico é muito mais poderoso e geralmente é a escolha 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:

  • Rodízio – Round robin é um método de balanceamento estático que direciona as 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 iniciará novamente em A para a quarta solicitação.
  • Round Robin ponderado – Uma variação do algoritmo round robin em que os administradores definem as prioridades relativas de cada servidor no pool. Um servidor muito pesado será usado com mais frequência, recebendo uma parcela maior do tráfego. Esse método permite que você use a estratégia de rodízio quando o pool de servidores for composto por servidores com especificações desiguais.
  • Aleatório – Muitos balanceadores de carga incluem uma opção verdadeiramente aleatória como uma escolha estática alternativa.
  • Hash – Essa estratégia de balanceamento estático faz hash do endereço IP do cliente para determinar qual dos servidores de back-end manipulará 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 muitas aplicações, esta é 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 grandes quantidades de largura de banda, mesmo que a contagem total de solicitações permaneça 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. As consultas podem ser feitas em relação ao uso da CPU, consumo de memória e outras medidas críticas usando um mecanismo como o SNMP.

Outras características 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 balanceamento de hash ou uma opção semelhante baseada em cliente. Isso garante que as conexões do mesmo endereço IP terminem em um determinado servidor. 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 nomeado 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 de segurança. Os balanceadores de carga capazes de realizar a passagem SSL podem fornecer tráfego direto para seus servidores de back-end, sem descriptografar os dados primeiro. No entanto, isso restringe a funcionalidade de roteamento que você pode usar: como o balanceador de carga não pode descriptografar as solicitações de entrada, você não poderá realizar a correspondência 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 da rede da Camada 4 (L4) e da 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 da solicitação, como a porta TCP ou UDP que foi usada. Os dados específicos da solicitação não são considerados.

Um balanceador de carga de camada 7 está localizado adjacente à camada de aplicativo. Esses balanceadores de carga podem acessar dados complexos na solicitação e usá-los para informar as regras de roteamento específicas da carga de trabalho. É aqui que o balanceamento de carga que contabiliza 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. Ele precisa analisar e inspecionar o conteúdo de cada solicitação antes que possa ser passado para um back-end. A natureza baseada em pacotes dos balanceadores de carga da camada 4 oferece menos controle, mas tem um impacto correspondentemente reduzido na taxa de transferência. A camada 4 também não descriptografa o tráfego, portanto, um comprometimento 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 a opção de vários algoritmos diferentes, incluindo opções estáticas e dinâmicas. Muitos aplicativos são bem servidos por escolhas simples, como “menos conexões” ou “round robin”, mas opções mais complexas são úteis em situações específicas.

É uma boa prática executar todos os aplicativos de produção por trás de um balanceador de carga. Ele oferece flexibilidade para 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.


Like it? Share with your friends!

0

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win

0 Comments

Your email address will not be published. Required fields are marked *