Aluno: Rafael Teruszkin

Professor: Otto

Redes de Computadores

Data: 01/06/2002

Balanceamento de Carga

em Servidores Web

 

 

O crescimento constante da Internet vem causando diversos problemas de desempenho, incluindo baixos tempos de resposta, congestionamento da rede e interrupção de serviços (DOS). Existem diversas abordagens de como esses problemas podem ser contornados.

 

*       Espelhamento do Site

*       Servidores Proxy

*       Balanceamento de Carga

 

Uma abordagem ainda muito usada consiste no espelhamento do site em diversos locais que podem ser acessados manualmente pelos usuários através de uma listagem com as URLs correpondentes. Esse tipo de solução trás diversas desvantagens como a não transparência ao usuário e ausência de controle na distribuição de requisições.

 

Outra abordagem consiste em manter cópias (caches) de objetos Web acessados perto dos usuários. Isso pode ser controlado por servidores que colocam objetos Web populares em outros servidores cooperativos ou ainda disparados por requisições individuais de usuários que passam por um servidor Proxy. Uma outra técnica consiste em pré-carregar os objetos freqüentemente acessados de forma a mascarar a latência da rede.

 

Uma abordagem complementar é fazer o servidor Web mais poderoso através do uso de uma arquitetura em cluster na qual múltiplas máquinas funcionam como um único servidor.

 

Um cluster é definido como um grupo de servidores rodando a mesma aplicação Web simultaneamente, aparecendo para o mundo como se fosse um único servidor, ou ainda:

 

“Um sistema paralelo ou distribuído que consiste na coleção de computadores interconectados que são utilizados como um só, unificando seus recursos computacionais”

(G. Pfister, um dos arquitetos da tecnologia de clusters)

 

Esse trabalho trás uma visão geral sobre diversas implementações de distribuição de carga em clusters de servidores com aplicações Web. Para balancear a carga nos servidores, o sistema distribui as requisições para diferentes nós que componham o cluster de servidores,  com um objetivo de otimizar o desempenho do sistema. Os resultados são:

 

*       Alta disponibilidade

*       Escalabilidade

*       Administração facilitada da aplicação

 

Alta disponibilidade pode ser definida como redundância. Se um servidor falhar ou não puder atender uma requisição, então outro servidor assumirá, da forma mais transparente o possível, o processamento da requisição. Isso tende a eliminar os pontos de falha de uma aplicação.

 

Escalabilidade é a habilidade que uma aplicação tenha de suportar um crescente número de usuários. Se uma aplicação leva 10 ms para responder uma requisição, quanto tempo ela levará para responder 10.000 requisições concorrentes? Escalabilidade infinita permitiria que a aplicação respondesse essa carga em 10 ms; no mundo real a resposta seria num espaço de tempo indeterminado maior que 10 ms. Escalabilidade é uma medida de vários fatores, incluindo o número de usuários simultâneos que um cluster pode suportar e o tempo que se leva para responder uma requisição.

 

A administração facilitada do sistema é facilitada, no sentido de que o cluster aparece como um único sistema para os usuários, aplicações e para o resto da rede, facilitando o acesso e administração do sistema e dos recursos de rede.

 

Com respeito às entidades que podem realizar o balanceamento de carga, podemos subdividi-las em:

 

*       Baseada no Cliente

*       Baseada no DNS

*       Baseada num Despachante

*       Baseada no Servidor

 

Existem duas abordagens de como colocar o mecanismo de seleção de servidores no lado do cliente satisfazendo o requisito de transparência: através dos próprios clientes (browsers) ou por meio de servidores Proxy (também visto com um cliente). Em ambos os casos, é necessário um prévio conhecimento sobre a estrutura que está sendo balanceada (Ex. Netscape).

 

        

As arquiteturas distribuídas de servidores Web que utilizam mecanismos de roteamento no lado do cluster não sofrem as limitações das soluções baseadas no lado do cliente. Tipicamente a transparência da arquitetura é obtida através de uma única interface virtual direcionada ao mundo externo, pelo menos ao nível da URL.

 

Numa primeira solução desenvolvida no lado do cluster, a responsabilidade de distribuir as requisições entre os servidores é atribuída ao DNS do cluster, ou melhor, ao servidor de DNS autoritário pelo domínio dos nós do cluster. Através de um processo de tradução entre os nomes simbólicos (URL) e endereços IP, o DNS do cluster pode selecionar qualquer nó que compõe o cluster.

 

 

 

Deve-se observar a limitação de controle que essa solução dispõe devido aos muitos servidores de nome intermediários entre o cliente e o DNS do cluster, sem contar o próprio cache do browser cliente. Há também um problema de disponibilidade quando um dos nós do cluster falha e o DNS continua apontando requisições sem perceber a falha.

 

O algoritmo normalmente utilizado nessa seleção é o Round Robin. Nas demais abordagens que serão discutidas também são utilizados outros algoritmos para seleção de nós do cluster que, dependendo da situação, podem ter melhor ou pior performance.

 

*       Seleção Randômica

*       Seleção com Round Robin (RR)

*       Seleção por menor Carga – Least Loaded (LL)

*       Seleção por menos conexões – Least Connections (LC)

 

Uma abordagem alternativa à arquitetura baseada em DNS visa ter total controle sobre as requisições de clientes e mascarar o roteamento entre múltiplos servidores. Para esse propósito, a virtualização de endereço realizada na solução baseada em DNS é estendida do nível da URL para o nível do IP. Nessa abordagem um único endereço IP virtual é fornecido ao cluster Web. Esse é o endereço do chamado "despachante" que atua com escalonador central do cluster.

 

Para distribuir a carga, o despachante reconhece cada nó do cluster através de um endereço privado que pode ser num nível de protocolo diferente, dependendo da arquitetura proposta. As duas principais maneiras usadas de se rotear são através de um mecanismo de reescrita de pacotes e por redirecionamento HTTP.

 

A reescrita de pacotes pode ser feita de forma simples ou dupla pelo despachante do cluster. Na forma simples o despachante reescreve os pacotes de entrada e o servidor reescreve os pacotes de saída. Na forma dupla, ambos pacotes são reescritos pelo despachante num mecanismo baseado em NAT.

 

 

 

    

 

No redirecionamento por HTTP, o despachante do cluster recebe os pacotes entrantes e distribui pelos nós servidores através de um mecanismo provido pelo protocolo HTTP. Através desse protocolo o despachante redireciona a requisição com código de status apropriado e indicando no cabeçalho o endereço do servidor para o qual o cliente deve enviar as requisições.

 

As técnicas de balanceamento de carga baseadas nos servidores do cluster utilizam um mecanismo de direcionamento de pacotes em dois níveis. As requisições de clientes são inicialmente direcionadas do DNS do cluster para os servidores. Cada servidor então pode direcionar a requisição para outro nó qualquer do cluster.

 

Diferente das soluções baseadas em DNS e num despachante central, essa abordagem baseada em escalonamento distribuído permite que os servidores participem do balanceamento da carga através de um mecanismo de requisições e (re)direcionamentos.

 

Duas classes de soluções serão consideradas aqui. As baseadas num mecanismo de reescrita de pacotes e aquelas que tomam vantagem da facilidade de redirecionamento do protocolo HTTP.

 

 

 

Cada servidor decide sobre o redirecionamento baseado em critérios que visam minimizar o tempo de resposta a requisição do cliente. A estimativa desse tempo é feita tomando as capacidades de processamento de cada servidor, banda e atrasos.

 

Todos os mecanismos de redirecionamento propostos implicam num overhead às comunicações internas ao cluster, pois cada nó precisa transmitir periodicamente seu status para os outros nós e para o DNS do cluster. Esse custo, porém, tem um efeito insignificante no tráfego de rede gerado pelas requisições de clientes.

 

No redirecionamento de pacotes pelo servidor é usado o mecanismo de Round Robin no DNS para realizar o primeiro escalonamento das requisições entre os nós do cluster. O servidor que recebe uma requisição está habilitado a re-roteá-la  para outros nós através do mecanismo de reescrita de pacotes que, diferente do redirecionamento por HTTP, é transparente ao cliente.

 

 

 

 

 

*      Solução Mista: Balanceamento Geográfico para Sistemas Web Distribuídos e Escaláveis

 

 

 

 

 

*      Estudo de Caso: Microsoft Network Load Balance (NLB) e Microsoft Cluster Services (MSCS)

 

 

 

 

 

*       Cluster Services (MSCS)

Projetado para suportar falhas em servidores back-end como banco de dados, sistemas de mensagens, repositório de arquivos e impressoras.

 

 

*       Network Load Balancing (NLB)

Realiza a distribuição de carga de requisições IP por múltiplos servidores do tipo front-end. Indicado para servidores internet como web servers, streaming media servers, e Terminal Services.

 

 

 

Cenário

MSCS

NLB

Benefícios

Web Server Farm 

 

X

*         Expande rapidamente sua capacidade

*         Minimiza a indisponibilidade do site

Terminal Servers

 

X

*         Expande rapidamente sua capacidade

*         Minimiza o efeito de falhas nos servidores

File/Print Servers

X

 

*         Minimiza o “downtime” de um serviço

*         Garante a consistência dos dados depois de uma falha

Database/Messaging

X

 

*         Minimiza o “downtime” de uma aplicação

*         Garante a consistência dos dados depois de uma falha

E-Commerce Sites

X

X

*         Expande rapidamente sua capacidade

*         Minimiza os efeitos do  downtime” de uma aplicação/serviço

 

 

 

 

 

Arquitetura do NLB

 

O NLB funciona como um driver intemediário entre o protocolo TCP/IP e os drivers da placa de rede na pilha de protocolos do W2K. Apesar de haver 2 placas de rede na figura, apenas uma é necessária para usar o NLB

 

Pacotes indesejados são filtrados (mais rápido) e não redirecionados

 

 

 

Gerenciando estado de aplicações com NLB

 

*       Necessidade: sessões de carrinhos de compra em sites de e-commerce e autenticação de dados usando SSL

 

*       Afininidade do Cluster

*       No affinity – Requisições podem cair em qualquer nó

*       Client affinity – Requisições caem sempre no mesmo nó

*       Class C affinity – Requisições de uma mesma classe C caem sempre no mesmo nó (multíplos servidores proxy)

 

Convergência do NLB

 

*       Os nós do cluster trocam, periodicamente, mensagens em broadcast ou multicast para monitoração do cluster (heartbeat)

*       A convergência é alcançada quando todos os nós chegam a um acordo sobre o estado do cluster

*       O período padrão dessas mensagens é de 1s. Durante a convergência, esse tempo é reduzido pela metade

*       Durante a convergência, os nós continuam aceitando requisições normalmente

*       Uma expansão do cluster pode afetar as sessões existentes pois nesse momento os clientes são remapeados pelos nós do cluster

 

 

Medida de Performance do NLB

 

Escalabilidade de um Site - teste realizado sempre na saturação do cluster.

O máximo atingido com 30 hosts foram 18000 requisições GET/s (400 Mbps ou 1,55b hits/dia)

 

 

 

Conclusões

           

*      Foi realizado um levantamento sobre as diversas formas propostas de balanceamento de carga

*      Diversas topologias de balanceamento foram demonstradas

*      Alguns dos algoritmos de escalonamento mais comumente usados foram comentados

*      A escalabilidade, disponibilidade e aplicabilidade de cada abordagem foi apontada

*      Um estudo de caso foi colocado a fim de demonstrar a relevância do tema

 

 

Bibliografia

 

*      Valeria Cardellini, Michele Colajanni, Philip S. Yu; Dinamic Load Balancing on Web-server Systems

*      Richard B. Bunt, Derek L. Eager, Gregory M. Oster, and Carey L. Williamson; Achieving Load Balance and Effective Caching in Clustered Web Servers

*      Yong Meng TEO, Rassul AYANI; Comparison of Load Balancing Strategies on Cluster-based Web Servers

*      Valeria Cardellini, Michele Colajanni, Philip S. Yu; Geographic Load Balancing for Scalable Distributed Web Systems

*      Vivek Viswanathan; Load Balancing Web Applicationshttp://www.onjava.com/pub/a/onjava/2001/09/26/load.html)

*      http://www.microsoft.com/technet/winnt/winntas/technote/crhasite.asp

*      http://www.microsoft.com/windows2000/library/howitworks/cluster/introcluster.asp

*      http://www.microsoft.com/technet/acs/clbovrvw.asp