Conteúdo[Esconder][Mostrar]
A disponibilidade de aplicativos nunca foi levada tão a sério quanto hoje, quando usamos aplicativos para mais do que apenas comunicação, seja pessoal ou profissional e quando os aplicativos são o negócio.
Aplicativos que não estão constantemente online, ou são instáveis, perdem seus usuários e relevância, eventualmente se tornando obsoletos. Aconteceu em um flash. Como a internet nunca dorme e funciona 24 horas por dia, 7 dias por semana, a mesma ideia deve valer para os aplicativos.
A escalabilidade é fundamental para fazer isso e garantir a disponibilidade do aplicativo. O balanceamento de carga é um dos componentes mais importantes para garantir a disponibilidade. Muitas pessoas ainda acreditam que o balanceamento de carga pode ser realizado com um script simples.
No entanto, este não é o caso. Só ele fornece acesso a programas em todo o mundo — a qualquer hora e de qualquer dispositivo.
Nesta postagem, analisaremos detalhadamente o balanceamento de carga, seus algoritmos e como ele se relaciona com microsserviços, entre outras coisas. Vamos começar!
O que é balanceamento de carga?
À medida que a demanda por um site ou aplicativo de negócios cresce, um único servidor logo não conseguirá lidar com toda a carga. As organizações distribuem a carga de trabalho em vários servidores para atender à demanda. Esse método, conhecido como “balanceamento de carga”, evita que um único servidor fique sobrecarregado, o que pode causar lentidão, descartar solicitações ou até travar.
O balanceamento de carga distribui o tráfego de rede igualmente para evitar falhas devido à sobrecarga de recursos. Aplicativos, sites, bancos de dados e outros recursos de computador têm melhor desempenho e estão mais disponíveis usando esse método. Também ajuda no processamento adequado e oportuno das solicitações do usuário.
Do ponto de vista do usuário, o balanceamento de carga serve como um intermediário invisível entre um cliente e uma coleção de servidores, garantindo que as solicitações de conexão não sejam descartadas. Aplicativos, sites, bancos de dados e serviços online provavelmente entrariam em colapso se a demanda se tornasse muito grande sem balanceamento de carga.
Centenas de milhares de solicitações de usuários podem ser enviadas para um único site de alto tráfego ao mesmo tempo. Vários servidores são necessários para preencher corretamente as páginas da Web com o conteúdo solicitado, como texto, imagens, vídeo e streaming de áudio. O balanceamento de carga é comumente empregado em farms de servidores de sites de alto tráfego, bem como em servidores DNS, bancos de dados e sites de protocolo de transferência de arquivos (FTP).
Se um único servidor estiver sobrecarregado, isso pode funcionar mal ou até travar. Os balanceadores de carga reduzem a chance de tempo de inatividade distribuindo as solicitações do usuário uniformemente entre uma coleção de servidores. Se um dos servidores do grupo falhar, o tráfego será redirecionado para outros servidores do grupo. Um balanceador de carga adiciona automaticamente novos servidores no processo de distribuição de tráfego quando são adicionados ao pool de servidores.
Como funciona o balanceamento de carga?
Funciona da seguinte maneira:
- Quando um cliente recebe uma solicitação, como por meio de um navegador ou aplicativo, ele tenta se conectar ao servidor.
- Quando um balanceador de carga recebe uma solicitação, ele a roteia para um dos servidores em um grupo de servidores com base nos padrões estabelecidos pelo algoritmo (ou farm).
- O servidor recebe a solicitação de conexão e responde ao cliente por meio do balanceador de carga.
- Quando o balanceador de carga recebe a resposta, ele corresponde ao endereço IP do cliente com o endereço IP do servidor selecionado. Em seguida, a resposta é transmitida com o pacote.
- O descarregamento SSL é o processo de descriptografar dados usando o protocolo de criptografia Security Socket Layer para que os servidores não precisem.
- O processo é repetido até que a sessão termine.
Métodos de balanceamento de carga
Para selecionar qual dos servidores em um farm de servidores recebe a próxima solicitação, cada técnica de balanceamento de carga usa um conjunto de critérios. Existem cinco abordagens típicas para balanceamento de carga:
- Round Robin: esta é a abordagem padrão e funciona exatamente como parece. O balanceador de carga distribui as solicitações em um padrão rotativo, começando com o primeiro servidor do grupo e descendo até o final, onde espera ser chamado novamente. Esse método garante que cada servidor esteja lidando com aproximadamente o mesmo número de conexões.
- Round Robin ponderado: essa abordagem atribui a cada servidor um peso (ou preferência) que geralmente é proporcional à sua capacidade. Quanto mais solicitações um servidor recebe, maior o peso. Por exemplo, um servidor com um valor de peso de dois recebe o dobro de solicitações que um servidor com um valor de peso de um.
- Sessão Fixa: essa abordagem, também conhecida como persistência de sessão, conecta determinados clientes e servidores durante uma sessão. Para estabelecer o link, o balanceador de carga usa um cookie ou o endereço IP do usuário para identificar um atributo do usuário. Uma vez que a conexão é estabelecida, as requisições do usuário são direcionadas para o mesmo servidor até que a sessão termine. Isso otimiza os recursos da rede e, ao mesmo tempo, melhora a experiência do usuário.
- Menos conexões: essa estratégia pressupõe que todas as solicitações resultem em uma carga de servidor igual. Como resultado, o servidor com o menor número de solicitações recebe a próxima solicitação.
- Hash de IP: esse algoritmo gera uma chave de hash exclusiva com base nos endereços IP de origem e destino do cliente e do servidor. A chave é usada para rotear a solicitação e permite que uma conexão perdida com o mesmo servidor seja retomada.
Hardware vs. Balanceadores de carga de software
Balanceador de carga de hardware
O hardware físico, como um dispositivo, compõe os balanceadores de carga de hardware. Eles roteiam o tráfego para os servidores dependendo de fatores como o número de conexões existentes, uso do processador e desempenho do servidor. Os balanceadores de carga de hardware têm firmware proprietário que deve ser mantido e atualizado quando novas versões e correções de segurança estiverem disponíveis.
Os balanceadores de carga de hardware geralmente oferecem maior desempenho e controle, bem como uma ampla variedade de recursos, como autenticação Kerberos e aceleração de hardware SSL, mas exigem algum nível de experiência em gerenciamento e manutenção. Como os balanceadores de carga de hardware são menos flexíveis e escalonáveis do que os balanceadores de carga de software, há uma propensão a superprovisionar balanceadores de carga de hardware.
Balanceador de carga de software
Os balanceadores de carga de software geralmente são mais fáceis de configurar do que seus equivalentes de hardware. Eles também são mais econômicos e adaptáveis, e funcionam bem com ambientes de desenvolvimento de software. O método de software permite que você personalize o balanceador de carga de acordo com os requisitos exatos do seu ambiente. O aumento da flexibilidade pode ocorrer à custa do tempo adicional gasto na configuração do balanceador de carga.
Os balanceadores de software oferecem maior flexibilidade para fazer modificações e atualizações do que os de hardware, que têm uma abordagem mais fechada. Máquinas virtuais pré-empacotadas podem ser usadas como balanceadores de carga de software (VMs). As máquinas virtuais economizarão algum tempo de configuração, mas podem não ter todas as funcionalidades disponíveis em suas contrapartes de hardware.
Implementação de balanceamento de carga simples
Usaremos a biblioteca Spring Cloud para construir aplicativos que se conectam a outros aplicativos com balanceamento de carga. Ao processar solicitações de serviço remoto, podemos construir facilmente o balanceamento de carga usando qualquer técnica que desejarmos. Considere o código a seguir como um exemplo. Começaremos com um aplicativo de servidor básico.
O servidor terá apenas um endpoint HTTP e será operado em várias instâncias. Em seguida, criaremos um aplicativo cliente que usa o Load Balancer para distribuir solicitações em várias instâncias de servidor.
servidor
Começamos com uma base Bota de mola aplicação para o nosso servidor de exemplo:
Para começar, injetamos uma variável personalizável chamada instance_ID. Isso nos ajuda a distinguir entre várias instâncias que estão operando. Depois disso, criamos um único endpoint HTTP GET que retorna uma mensagem e um ID de instância.
A instância padrão com ID 1 operará na porta 8080. Precisamos apenas adicionar alguns parâmetros de programa para iniciar uma segunda instância:
Cliente
Vamos agora dar uma olhada no código do cliente. É aí que entra o Load Balancer, então vamos começar incorporando-o ao nosso aplicativo:
Em seguida, desenvolvemos uma implementação de ServiceInstanceListSupplier. Esta é uma das interfaces mais importantes no Load Balancer. Ele especifica como localizamos instâncias de serviço acessíveis.
Vamos codificar duas instâncias separadas de nosso servidor de exemplo em nosso aplicativo de exemplo. Eles são executados no mesmo sistema, mas utilizam portas separadas:
Crie uma classe LoadBalancerConfiguration agora:
Essa classe tem apenas uma finalidade: ela cria um construtor WebClient com balanceamento de carga para fazer solicitações remotas. Nossa anotação emprega um nome fictício para o serviço.
Isso se deve ao fato de que provavelmente não saberemos os nomes de host e as portas precisos para executar instâncias com antecedência. Como resultado, utilizamos um nome fictício como espaço reservado e a estrutura substituirá as informações reais quando selecionar uma instância em execução.
Em seguida, vamos criar uma classe Configuration que será usada para instanciar nosso fornecimento de instâncias de serviço. Observe que usamos o mesmo alias de antes:
Agora podemos construir o aplicativo cliente real. Vamos enviar 10 consultas para o servidor de amostra usando o bean WebClient anterior:
Podemos ver na saída que estamos fazendo o balanceamento de carga entre duas instâncias separadas:
Balanceamento de carga em microsserviços
A arquitetura de microsserviços está sendo usada por várias empresas, como Netflix e Amazon, para desenvolver aplicativos de negócios como um conjunto de serviços fracamente conectados. A entrega contínua e em hiperescala para aplicativos complicados são apenas duas das razões para migrar para essa arquitetura distribuída e fracamente conectada.
As equipes dessas empresas implementaram estratégias Agile e DevOps para produzir aplicativos mais rapidamente e com menor taxa de falhas do que os métodos tradicionais. No entanto, você deve encontrar um equilíbrio entre a complexidade da arquitetura distribuída e as demandas do aplicativo, requisitos de escala e limitações de tempo de lançamento no mercado.
Por muitos anos, os controladores de entrega de aplicativos (ADCs) têm sido essenciais para atender aos requisitos de nível de serviço para aplicativos corporativos hospedados no local ou na nuvem. Um cliente que se envolve com um aplicativo baseado em microsserviços não precisa saber sobre as instâncias que o estão fornecendo para aumentar o cliente e os microsserviços de forma independente.
Este é precisamente o desacoplamento fornecido por um proxy reverso ou um balanceador de carga. Novamente, o balanceamento de carga é a solução para garantir que os microsserviços possam lidar com demanda, segurança e disponibilidade.
Ao combinar o balanceamento de carga tradicional Norte-Sul entre aplicativos baseados em cliente e microsserviços com a implantação Leste-Oeste para escalabilidade horizontal, você obtém um aumento substancial. O objetivo é manter o ambiente seguro e regulamentado exigido pela TI sem sacrificar a agilidade de desenvolvimento ou Automação DevOps .
Benefícios
O balanceamento de carga oferece vários benefícios ao melhorar a utilização de recursos, entrega de dados e tempo de resposta para sites e aplicativos de alto tráfego, bem como bancos de dados que recebem um grande número de consultas. O balanceamento de carga garante que as solicitações do usuário sejam atendidas de forma rápida e correta em cenários de alto tráfego.
Eles poupam aos usuários o aborrecimento de lidar com programas e recursos lentos. O balanceamento de carga também ajuda a evitar o tempo de inatividade e simplificar a segurança, reduzindo o risco de perda de produtividade e ganhos para sua empresa.
- O balanceamento de carga oferece a flexibilidade de adicionar e remover servidores conforme a demanda, além de gerenciar o tráfego com eficiência ideal. Como o tráfego é desviado para outros servidores durante a manutenção, também é viável realizar a manutenção do servidor sem interromper os usuários.
- O balanceamento de carga fornece redundância integrada ao dividir o tráfego entre um conjunto de servidores. Você pode desviar imediatamente a carga para outros servidores se um deles falhar, minimizando o impacto sobre os usuários.
- Se o uso de um aplicativo ou site crescer, o aumento do tráfego pode degradar seu desempenho se não for tratado de forma eficaz. Com o balanceamento de carga, você pode adicionar um servidor real ou virtual para atender à demanda sem interromper o serviço. O balanceador de carga identifica novos servidores à medida que eles ficam online e os incorpora sem esforço à operação. Esse método é preferível a migrar um site de um servidor sobrecarregado para um novo, o que geralmente envolve algum tempo de inatividade.
Conclusão
O balanceamento de carga é um componente crítico de sistemas contemporâneos tolerantes a falhas. Podemos simplesmente construir aplicativos que distribuem solicitações para várias instâncias de serviço usando várias abordagens de balanceamento de carga. As empresas devem suportar sistemas de TI complicados para fornecer aplicativos com segurança.
A configuração, a implantação e a manutenção de microsserviços entre domínios podem ser propensas a erros, caras e demoradas. A TI deve usar as melhores práticas e tecnologias de automação, visibilidade, análise e orquestração que sejam compatíveis com seus processos ágeis e DevOps para facilitar a configuração e a manutenção desses microsserviços.
Deixe um comentário