Balanceamento de carga entre servidores de aplicativos

1

Esta é mais uma questão de teoria para ajudar-me como desenvolvedor a entender o processo que nossos administradores usarão na distribuição de aplicativos para distribuir nosso aplicativo. Eu realmente aprecio algumas percepções, pois isso me ajudaria a planejar possíveis armadilhas eventuais (e pode acabar sendo um recurso valioso para outras pessoas que têm perguntas básicas sobre o tópico.)

Supondo que haja várias máquinas host válidas que possam responder a qualquer solicitação HTTP recebida, qual é a abordagem mais básica para o balanceamento de carga entre elas? Minha conjectura básica como programador sugeriria provavelmente algo utilizando o DNS, até que o tráfego fique tão alto que algo mais robusto seja necessário. Suponho que os proxies sejam aproveitados em algum grau para verificar quais hosts estão ocupados respondendo ao processamento em andamento e quais estão vazios.

Eu tenho uma camada de dados de aplicativo que é construída inteiramente em Python usando o WSGI e, em testes, utilizamos o mod_wsgi no Apache. Se alguém fosse, teoricamente, implementar isso em várias máquinas idênticas, todas conectadas aos mesmos bancos de dados / recursos na camada de aplicação, qual seria a primeira ordem de negócios na disseminação de solicitações para o domínio geral através delas? Apenas listando vários registros A no DNS?

Eu sinto muito pela imprecisão, só não fui capaz de encontrar uma cartilha decente sobre o assunto do ponto de vista de um desenvolvedor. Agradeço a ajuda!

    
por DeaconDesperado 23.12.2011 / 18:16

3 respostas

3

Uma configuração típica funcionará ao contrário do que você propõe - primeiro implementando um balanceador de carga front-end (por exemplo, HAProxy, Nginx, até mesmo Varnish, etc. - ou baseado em hardware) e somente mais tarde usando DNS.

As solicitações de entrada alcançarão o balanceador de carga, que normalmente poderá executar várias funções, incluindo:

  • Acompanhe o status (isto é, a integridade) dos servidores de back-end
  • Decida, de forma inteligente, qual escolher (por exemplo, carga mais baixa, round-robin, tipo de solicitação específico, etc.)
  • Tente outro servidor se o primeiro servidor não responder adequadamente
  • Proteja seus servidores de back-end

Existem algumas vantagens nesta abordagem:

  • Você mantém o controle sobre todos os aspectos da configuração
  • Você pode adicionar e remover facilmente servidores de backend
  • O balanceamento de carga é feito "de maneira inteligente"

O problema, no entanto, é que todo o tráfego precisa fluir pelo balanceador de carga único. Em um nível que faz com que seja um ponto significativo de falha (mas você pode fazer failover para reduzir o impacto). Mais significativamente, em algum momento, o único nó não será capaz de lidar com o tráfego que precisa fluir através dele. O último é o problema resolvido com o DNS - de modo que as solicitações retornam IPs diferentes, correspondendo a diferentes balanceadores de carga.

    
por 23.12.2011 / 18:40
3

A abordagem de balanceamento de carga depende completamente das especificações de design que você forneceu aos administradores. Não existe um guia "isto é como balancear a carga" porque existem várias maneiras de fazer isso, dependendo do site e da robustez da solução necessária. EG para um site estático que só precisa de redundâncias e não tem impacto sobre os negócios round robin DNS seria bom. Se você só precisa de redundância, então um cluster estaria bem. Se você precisar de 99,999 confiabilidade e balanceamento de carga com base no tempo de resposta, precisará de balanceadores de rede de hardware dedicados e redundantes.

Como administrador, preciso saber exatamente o que seu aplicativo faz e onde ele aumentará a carga para determinar a melhor forma de implementar o balanceamento de carga. Além disso, se isso tiver um backend de banco de dados, ele também precisará ser redundante. Estas são todas as coisas que você deveria ter perguntado ou deveria ter fornecido aos seus administradores para projetar adequadamente a infraestrutura do servidor.

    
por 23.12.2011 / 19:29
1

As solicitações HTTP de balanceamento de carga podem ser feitas de várias maneiras. O round-robin do DNS é um método para fazer isso, mas você não tem muito controle sobre isso.

Outra abordagem e melhor será usar um hardware dedicado para balanceamento de carga. Por exemplo, você pode executar uma caixa do Linux e instalar um software de balanceamento de carga como o haproxy.

Um problema importante que você precisa observar é ter a mesma visualização do lado do cliente, independentemente do servidor escolhido na nuvem do servidor.

    
por 23.12.2011 / 18:27