Balanceamento de carga baseado em cookie de sessão?

Balanceamento de carga baseado em cookie de sessão?

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. Isto é, 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 nesse cenário, mas que tipo debalanceador de cargadevo usar? Obviamente, eu poderia balancear a carga no nível do aplicativo, mas estou procurando algo mais eficiente. Talvez hardware especializado (talvez não)? Não posso gastar muito dinheiro...

Atualizar

Obrigado pelas suas respostas até agora: descobri agora queLibraeHAProxypode 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 também podem fazer isso? (Isso custaria menos do que um servidor extra de balanceamento de carga?)

Responder1

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

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

Se seu aplicativo Web exigir sessões fixas, sua arquitetura poderá precisar de melhorias.

No que diz respeito a soluções de balanceador de carga, existem muitas por aí e o assunto foi abordado extensivamente aqui. Eu gostoEU CONTRA. Outros gostamnginx. Redes de Fundição, que foi adquirida pela Brocade, fabrica alguns produtos comerciais sólidos. Eles são a principal solução comercial para balanceadores de carga de hardware. Barracudatambém possui um "dispositivo" baseado em Linux/OSS que pode ser usado para balanceamento de carga.

Responder2

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. Realmente depende de como você está decidindo organizar as coisas e outra ideia é usar um servidor com memcache atrás dos servidores web e armazenar as sessões lá.

Dessa forma você tem sessões em um único lugar e não importa mais para qual servidor web o cliente está direcionado.

Responder3

Antes de gastar dinheiro... dê uma olhada no software balanceador de carga de código aberto comoLibraouHAProxy.

Concordo com as sugestões de Warner e Stu.

Responder4

POUND - PROXY REVERSO E BALANCADOR DE CARGA

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

Isso pode ser você procurando

http://www.apsis.ch/pound/

informação relacionada