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.
Distribuição Rotativa
Neste caso em que é utilizado um algoritmo rotativo (round-robin), o tráfego é enviado para o servidor de destino de forma rotativa numa tentativa de distribuir a carga igualmente para cada servidor, independentemente do número actual de ligações ou do tempo de resposta. O primeiro pedido é atribuído a um servidor escolhido aleatoriamente a partir do grupo dos servidores de destino e para as solicitações subsequentes, o algoritmo segue a ordem pela qual são listados os restantes servidores.
Quando um servidor recebe um pedido, esse servidor é movido para o final da lista e o próximo servidor é escolhido para o seguinte pedido, mantendo assim todos os servidores em pé uniformemente carregados.
O algoritmo round-robin só é adequado quando os todos servidores no cluster têm igual capacidade de processamento, caso contrário, alguns servidores podem receber mais pedidos que aqueles que podem processar, enquanto outros utilizam apenas uma parte dos seus recursos. Obviamente, é muito melhor do que a distribuição aleatória, porque as solicitações são divididas igualmente entre os servidores disponíveis de forma ordenada, mas não é suficientemente bom se as especificações técnicas dos servidores de destino forem muito diferentes.
Distribuição Rotativa Ponderada
Esta é uma versão avançada do round robin e que leva em consideração as diferentes capacidades de processamento de cada servidor. É possível atribuir manualmente um factor de desempenho para cada servidor no grupo de destino gerando assim automaticamente uma sequência de programação de acordo com o peso do servidor. Os pedidos são então direccionados para os diferentes servidores de acordo com uma sequência de distribuição rotativa (round-robin).
Por exemplo, se o grupo de servidores é composto por 2 servidores e um servidor é capaz de lidar com o dobro da carga do outro, o servidor mais poderoso recebe duas vezes o factor de desempenho e em tal caso, o balanceador de carga atribuiria dois pedidos para o servidor potente para cada solicitação atribuída ao mais fraco. Este algoritmo tem a vantagem de ter em conta a capacidade dos servidores do grupo, mas ainda lhe faltam requisitos avançados de balanceamento de carga tais como tempo de processamento de cada pedido individual.
Menos Ligações
Um algoritmo de menos ligações envia pedidos para o servidor que está actualmente a atender o menor número de ligações. O balanceador de carga irá monitorizar o número de ligações que os servidores têm e enviar o pedido para o servidor com menos ligações.
Agente no Servidor
Neste caso é instalado um cliente no servidor para comunicar com o balanceador de carga. Isto às vezes é necessário quando se utiliza um balanceador de carga básico que tem um retorno directo do servidor. Ou seja, ele não sabe quantas ligações reais o servidor tem ou quão bem ele está a responder porque não recebe as respostas dos servidores.
Métodos de Balanceamento de Carga
Vou agora ilustrar alguns dos métodos de balanceamento de carga disponível nos modernos balanceadores. Notem que eu não estou a mostrar exemplos reais nem estou a considerar especificações de projecto de rede como servidores numa DMZ ou numa Intranet. O meu objectivo é apenas ilustrar os conceitos básicos, ok?
Encaminhamento Directo
O modo de encaminhamento directo é uma solução de alto desempenho com poucas alterações na infra-estrutura existente e que funciona pela alteração do endereço MAC de destino do pacote no momento em que chega, o que é muito rápido.
No entanto, isso significa que quando o pacote chega ao servidor real, espera que ele tenha o IP virtual (VIP) o que implica a necessidade de garantir que o verdadeiro servidor responde ao VIP, mas não responde aos pedidos ARP. O modo de encaminhamento directo permite que os servidores numa rede acedam quer aos VIPs ou aos IPs reais sem necessidade de quaisquer subnets ou caminhos extra mas o servidor real deve ser configurado para responder tanto ao VIP como ao seu próprio endereço IP.
Network Address Translation
Por vezes não é possível usar o modo de encaminhamento directo; seja porque a aplicação não se consegue ligar ao RIP e VIP ao mesmo tempo ou porque o sistema operativo do host não pode ser modificado para lidar com o problema do ARP. Nestes casos é possível utilizar o modo Network Address Translation (NAT) que é também uma solução de desempenho bastante alto, mas requer a implementação de uma infra-estrutura com uma sub-rede interna e externa para realizar a “tradução”.
Neste modo, o balanceador de carga traduz todas as solicitações do servidor virtual externo para os servidores reais internos e estes devem ter a sua gateway configurada para apontar para o balanceador de carga. Se os servidores reais tiverem que estar acessíveis no seu próprio endereço IP para serviços de carga não-balanceada, por exemplo SMTP, será necessário configurar regras de firewall individuais para cada servidor real.
Source Network Address Translation
Se a aplicação requer que o balanceador de carga trate da inserção de cookies, então há necessidade de utilizar o Source Network Address Translation (SNAT) que não exige qualquer alteração para os servidores da aplicação. No entanto, como o balanceador de carga está a funcionar como um full proxy não tem o mesmo rendimento bruto que os métodos anteriores.
SNAT Transparente
Se for exigido conhecer o endereço de origem do cliente, então o balanceador pode ser forçada a trabalhar em modo transparente, exigindo que os servidores reais usem o balanceador de carga como o gateway (como no modo NAT) e funcionando apenas para sub-redes directamente ligadas (também como em modo NAT).
Aceleração SSL
Todos os métodos de balanceamento de carga nas Camadas 4 e 7 podem lidar com o tráfego SSL num modo em que os servidores back-end tratem de toda a criptografia do tráfego. No entanto, inspeccionar o tráfego HTTPS para ler ou inserir cookies requer descodificar (terminar) o tráfego SSL no balanceador de carga e isto pode ser feito através da importação da chave seguro e certificado assinado para o balanceador de carga que lhe confere autoridade para decifrar o tráfego.