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
Muitas aplicações hoje em dia só fazem chamadas remotas em AJAX ou Flash e na verdade, há muita semelhança na forma como as aplicações desktop normais e as aplicações Web fazem chamadas remotas.
Para efeitos do balanceamento de carga do lado do cliente, existem três componentes principais para uma aplicação web moderna:
  1. Código do lado do cliente: JavaScript e / ou SWF (para clientes flash);
  2. Recursos: imagens, CSS (Cascading Style Sheets), vídeo, áudio e documentos HTML;
  3. Código do lado do servidor: a lógica de back-end que gera os dados solicitados pelo cliente.

Tal como o cliente de desktop acima, podemos inserir a nossa lista de servidores de aplicação para o código do cliente. O cliente da Web contém um arquivo chamado "servers.xml", que tem uma lista de servidores disponíveis. O cliente tenta comunicar (seja via AJAX ou Flash) com todos os servidores na lista até encontrar aquele que responde.

Balanceamento de carga no cliente

O processo do lado do cliente é, portanto:
  1. Carregar o ficheiro www.meusite.com/servers.xml, que é armazenado com o código do cliente e outros recursos, e contém a lista de servidores disponíveis, por exemplo:
    <servers>
    <server> s1.meusite.com </server>
    <server> s2.meusite.com </server>
    <server> s3.meusite.com </server>
    <server> s4.meusite.com </server>
    </servers>
  2. O código do cliente selecciona aleatoriamente os servidores a chamar com um tempo limite pré-definido para cada chamada. Se a chamada demorar mais do que o tempo definido, o cliente selecciona aleatoriamente um outro servidor até encontrar um que responda, e usa esse servidor para todas as chamadas subsequentes.

Balanceamento de Carga no servidor


O balanceamento baseado no servidor pode fazer com que vários servidores apareçam como um único servidor - um único serviço virtual - distribuindo de forma transparente os pedidos dos utilizadores entre os servidores. O balanceamento de carga impede que as paralisações planeadas para manutenção de hardware ou software interrompam o serviço para os utilizadores finais e também pode fornecer serviços de recuperação de desastres, redireccionando as solicitações de serviço para um local de backup quando uma falha catastrófica desactiva o site principal.
As duas categorias de implementação de balanceamento de carga no servidor são:

  • Balanceamento de carga por software: Consiste num software especial que é instalado nos servidores num cluster com balanceamento de carga. O software envia ou aceita pedidos dos clientes para os servidores, baseado em diferentes algoritmos que podem ser um simples round-robin ou um algoritmo muito mais complicado que entra em linha de conta com a considera a afinidade do servidor. Por exemplo, o Microsoft Network Load Balancing é um software de balanceamento de carga para Web farms e o Microsoft Component Load Balancing é um software de balanceamento de carga para application farms.

  • Balanceamento de carga por hardware: Consiste num switch ou router especializados com software para lhe dar funcionalidades de balanceamento de carga. Esta solução integra comutação e balanceamento de carga num único dispositivo, o que reduz a quantidade de hardware adicional necessário para implementar o balanceamento de carga. Os modernos balanceadores de carga por hardware são appliances conhecidas como Application Delivery Controllers (ADC) e iremos examinar as suas capacidades com mais detalhe nos artigos seguintes.

Balanceamento de carga em servidores web


Um servidor web lida com pedidos HTTP (Hypertext Transfer Protocol) enviados pelos browsers. Quando se digita um URL, por exemplo http://www.meusite.com, o PC cliente envia um pedido para procurar os servidores necessários para lidar com esse pedido e enviar respostas de volta rapidamente.

Balanceamento de carga de servidores web

Balanceamento de carga em servidores de dados


Vamos discutir agora um cenário diferente, onde pretendemos alcançar escalabilidade, comparando uma solução não-balanceada, que contém um sistema único (único ponto de falha) na camada de aplicações, com uma solução altamente escalável, que mantém o desempenho e aumenta a disponibilidade.

Sem balanceamento de carga


Inicialmente uma organização pode começar com uma arquitectura, como a exemplificada na figura seguinte, que pode responder às expectativas de desempenho inicial. No entanto, com o aumento da carga, a camada de aplicação deve adaptar-se ao aumento de carga para manter um desempenho aceitável. Dado que num cluster há várias máquinas redundantes envolvidos, é uma boa prática ter todos os dados numa localização central que pode ser acedido por todas as máquinas do cluster. Provavelmente, uma empresa usará uma solução de base de dados cliente/servidor como o SQL Server num ambiente tipo Web farm, mas também pode utilizar o acesso a dados baseado em ficheiros, como as tabelas do Visual FoxPro ou Jet (Access) , se essas tabelas forem mantidos numa localização central e acessíveis via LAN. 
 
Sem balanceamento de carga

Na figura, a camada de aplicações contém apenas um servidor de aplicação (ServidorBD), que atende solicitações dos clientes. Se o servidor ficar sobrecarregado, o sistema ou cairá abaixo dos níveis de desempenho aceitáveis, ou se torna indisponível.

Com balanceamento de carga


Para aumentar a escalabilidade e para manter o desempenho, a organização pode usar um balanceador de carga para expandir a camada de aplicações. O exemplo ilustrado na próxima figura, adiciona dois servidores à camada de aplicações para criar um cluster com balanceamento de carga, que acede aos dados da camada de dados e fornece acesso a aplicações aos clientes na camada do cliente.

Com balanceamento de carga

O resultado é uma arquitectura padrão de balanceamento de carga em que um dispositivo de hardware ou software que está a correr nas máquinas host atribui um nome de host (DBServer) e um endereço IP ao servidor1, servidor2, e servidor3. O cluster com balanceamento de carga expõe este endereço virtual IP e o nome do host para a rede e equilibra a carga das solicitações recebidas uniformemente entre os servidores saudáveis dentro do grupo. Se o Server1 falhar, o pedido é simplesmente dirigido ao Server2 ou Server3. Dependendo da tecnologia utilizada para fornecer esta funcionalidade, um certo número de servidores adicionais podem ser adicionados ao cluster com balanceamento de carga para maximizar a escalabilidade e permanecer à frente das crescente solicitações.