Balanceamento de Carga (IV)

Balanceamento de Carga por hardware


 Um dispositivo de hardware para balanceamento de carga, também conhecido como um router de camada de 4-7, é uma appliance que é usada para dividir a carga da rede por vários servidores com base em factores tais como a utilização dos processadores, o número de ligações ou o desempenho geral do servidor.

O uso de uma appliance deste tipo minimiza a probabilidade de qualquer servidor ser sobrecarregado e optimiza a largura de banda disponível para cada computador ou terminal. Além disso, o uso de hardware para balancear a carga  pode minimizar quebras de rede, facilitar a priorização de tráfego, fornecer monitorização de aplicações, fornecer autenticação de utilizadores, e ajudar a proteger contra actividades maliciosas tais como ataques de negação de serviço (DoS).

O princípio básico é que o tráfego de rede é enviado para um endereço IP partilhado, chamado IP virtual (VIP) e este está atribuído ao balanceador de carga. Assim que o balanceador de carga recebe uma solicitação neste VIP terá que tomar uma decisão sobre para onde encaminhá-lo e esta decisão normalmente é controlada por um algoritmo de balanceamento de carga, uma verificação do estado do servidor ou um conjunto de regras.

O pedido é então enviado para o servidor apropriado e este produzirá uma resposta que, dependendo do tipo de balanceador utilizado, será enviada ou para o balanceador de carga, no caso de um dispositivo de Camada 7, ou, mais geralmente com um dispositivo de Camada 4, directamente para o utilizador final (normalmente através de seu default gateway).

No caso de um balanceador de carga por proxy, o pedido do servidor web pode ser retornado para o balanceador de carga e manipulado antes de ser enviado de volta para o utilizador. Esta manipulação pode envolver a substituição de conteúdo ou compressão e alguns dispositivos de topo de gama dispõem de total capacidade de processamento de scripts.


Algoritmos de Balanceamento de Carga


Os balanceadores de carga usam diversos tipos de algoritmos para controlar o tráfego com o objectivo específico de distribuir a carga de forma inteligente e / ou maximizar a utilização de todos os servidores no cluster.


Distribuição Aleatória


Numa distribuição aleatória, o tráfego é atribuído a um servidor escolhido aleatoriamente entre o grupo de servidores de destino. Neste caso, podem ser atribuídas muito mais solicitações a um dos servidores, enquanto os outros servidores estão de parados. No entanto, em média, cada servidor recebe uma quota aproximadamente igual de carga devido à selecção aleatória. Embora simples de implementar, pode levar à sobrecarga de um servidor ou mais e simultaneamente à subutilização dos outros.

Balanceamento de Carga (III)

Antes de mergulharmos mais fundo no abismo de todas as técnicas e algoritmos utilizados no mundo do balanceamento de carga, é importante esclarecer alguns conceitos e noções e dar uma espreitadela à terminologia mais utilizada no balanceamento de carga. O público-alvo deste blog é suposto saber o que é o modelo OSI e, portanto, eu não me vou preocupar com explicações acerca das camadas ou níveis...

Verificação do estado do servidor


A verificação do estado ou saúde do servidor (server health checking ) é a capacidade do balanceador de carga para executar testes aos servidores para determinar se eles estão ou não a fornecer os serviços:

  • Ping: Este é o método mais simples, porém não é muito fiável porque o servidor pode responder enquanto, por exemplo, o serviço web está em baixo;

  • TCP connect: Este é um método mais sofisticado que pode verificar se um serviço está instalado e a funcionar, como um serviço web na porta 80 ou seja, tentar abrir uma ligação para a porta no servidor real;

  • HTTP GET HEADER: Isso irá fazer uma solicitação HTTP GET para o servidor web e, normalmente, verificar se há um cabeçalho resposta, como 200 OK;

  • HTTP GET CONTENTS: Isto fará um HTTP GET seguido de uma verificação do conteúdo real em busca de uma resposta correcta. Pode ser útil para verificar uma página dinâmica que retorna 'OK' somente se alguns testes de verificação de aplicação funcionam, por exemplo, validação de consultas a bases de dados. Este recurso só está disponível nalguns dos produtos mais avançados, mas é o método mais fiável para aplicações web porque verifica se a aplicação está de facto disponível.

Balanceamento de carga na camada 2


Balanceamento de carga na camada 2 (também conhecido como agregação de ligações ou agregação de portas) é unir duas ou mais ligações numa única ligação lógica com maior largura de banda. As ligações agregadas também fornecem redundância e tolerância a falhas, se cada uma das ligações seguir um caminho físico diferente.

Balanceamento de Carga (II)

Balanceamento de Carga no Cliente


Pode ser mais fácil tornar o código e recursos do cliente altamente disponíveis e escaláveis do que fazê-lo para os servidores uma vez que servir conteúdo estático requer menos recursos no servidor. Antes de entrar em detalhes, vamos considerar uma aplicação que precisa ligar-se a servidores na Internet para aceder a dados. Se esta aplicação teórica gerar mais pedidos ao servidor remoto que aqueles que ele pode manipular, vamos precisar de uma solução de balanceamento de carga.

Balanceamento de carga no servidor 
Em vez de dar a conhecer ao cliente apenas um servidor a partir do qual pode aceder aos dados, podemos fornecer-lhe muitos servidores, por exemplo s1.meusite.com, s2.meusite.com, e assim por diante. O cliente selecciona aleatoriamente um servidor e tenta aceder aos dados. Se o servidor não estiver disponível, ou não responder num período de tempo pré-definido, o cliente pode escolher outro servidor até conseguir os dados.

Ao contrário das aplicações Web, que armazenam o código do cliente (o código JavaScript ou Flash SWF) no mesmo servidor que fornece dados e recursos, o cliente é independente do servidor e capaz de utilizar servidores de  balanceamento de carga a partir do seu lado (cliente) para obter escalabilidade para a aplicação.

Balanceamento de carga no cliente