Balanceamento de carga com base no cookie de sessão?

5

Eu tenho um aplicativo da web que será executado em vários servidores. Gostaria de ter certeza de que as solicitações que usam a mesma sessão (cabeçalho de cookie HTTP com valor JSESSIONID = x) sempre se comuniquem com o mesmo servidor. Ou seja, até que a sessão "se mova" para um servidor diferente em determinadas circunstâncias (não apenas quando o servidor falha, mas também devido a algumas estratégias de cache e desempenho do lado do servidor).

Meu aplicativo da Web funciona bem com esse cenário, mas que tipo de balanceador de carga devo usar? Obviamente, eu poderia balancear a carga no nível do aplicativo, mas estou procurando algo mais eficiente. Talvez hardware especializado (talvez não)? Eu não posso gastar muito dinheiro ...

Atualizar

Obrigado pelas suas respostas até agora: descobri agora que Libra e HAProxy pode ser configurado para procurar determinados cookies. Ainda não consegui descobrir se eles também permitem atualizar o mapeamento dinamicamente (quando a sessão "se move" para um servidor de aplicativos diferente)?

E existem soluções de hardware (baratas), que podem fazer isso também? (Isso custaria menos do que um servidor de balanceamento de carga extra?)

    
por Chris Lercher 12.08.2010 / 16:34

5 respostas

2

Acabei de ler o artigo Tornando os aplicativos escaláveis com o balanceamento de carga pelo autor do HAProxy, Willy Tarreau, e contém todas as respostas que eu precisava.

Aqui está meu resumo pessoal do que aprendi:

  • "Aprendizagem de cookies" e "Inserção de cookies" parecem ser recursos comuns dos balanceadores de carga.
  • Você precisa de um balanceador de carga de nível 7 para inspecionar os cookies, mas alguns balanceadores de carga de hardware "aproximam" isso no nível do pacote (o que às vezes leva a dados corrompidos!)
  • Outros balanceadores de carga de nível 7 usam uma pilha TCP / IP completa e funcionam corretamente, mas exigem muito mais poder de processamento. Nesse caso, um servidor com uma CPU strong pode ser mais rápido que um balanceador de carga de hardware (?)

O artigo é de 2006, algumas coisas podem ter mudado desde então.

    
por 14.08.2010 / 15:11
5

Usar " sessões persistentes " geralmente não é recomendado. Se você fizer isso, perderá muitos benefícios do balanceamento de carga. A carga não será balanceada e você perderá alta disponibilidade, pois alguns clientes não poderão acessar seu aplicativo em caso de falha.

Você quer que sua sessão seja dinâmica. Com o Java, ele é normalmente armazenado na memória e armazenado em cluster em todos os servidores via multicast. Mais comumente, a sessão será armazenada em um banco de dados.

Se o seu aplicativo da Web exigir sessões fixas, sua arquitetura pode precisar de melhorias.

No que diz respeito às soluções de balanceamento de carga, há muitas outras por aí e o assunto foi abordado extensivamente aqui. Eu gosto de LVS . Outros gostam de nginx . A Foundry Networks , que foi adquirida pela Brocade, produz alguns produtos comerciais sólidos. Eles são a principal solução comercial para balanceadores de carga de hardware. O Barracuda também tem um "appliance" baseado em Linux / OSS que pode ser usado para balanceamento de carga.

    
por 12.08.2010 / 16:59
2

Algumas soluções para você, então.

Escreva um método de armazenamento de sessão que use um banco de dados para armazenar informações da sessão e, se estiver em vários servidores, você poderá agrupar o banco de dados. Isso realmente depende de como você está decidindo organizar as coisas e outra idéia é usar um servidor com memcache nos bastidores e armazenar as sessões lá.

Dessa forma, você tem sessões em um único local e não importa mais para qual servidor da Web o cliente é direcionado.

    
por 12.08.2010 / 17:00
2

Antes de gastar dinheiro ... dê uma olhada no software balanceador de carga de código aberto como Libra ou HAProxy .

Concordo com sugestões da Warner e da Stu.

    
por 12.08.2010 / 17:07
0

POUND - REVERSE-PROXY E LOAD-BALANCER

O programa Pound é um proxy reverso, balanceador de carga e front-end HTTPS para servidor (es) da Web. O Pound foi desenvolvido para permitir a distribuição da carga entre vários servidores da Web e permitir um wrapper SSL conveniente para os servidores da Web que não oferecem nativamente. Libra é distribuída sob a GPL - sem garantia, é grátis para usar, copiar e distribuir.

Isso pode estar procurando por você

link

    
por 12.08.2010 / 17:07