Estamos usando o HAProxy para balancear a carga do nosso aplicativo websocket e comet. Há um HAProxy e 3 aplicativos em execução na parte de trás.
Usamos o HTTP Basic Auth (e usaremos outros tipos de autenticação no futuro, como o OAuth) para identificar o usuário conectado.
Não podemos usar o round robin regular, porque é importante que as conexões para um determinado usuário acabem no mesmo servidor. Não importa onde, mas é importante que eles usem o mesmo servidor.
Eu conheço o HAProxy como uma abordagem baseada em cookies inteligentes, mas infelizmente, no nosso caso, às vezes, o mesmo usuário será conectado a partir de máquinas diferentes, então o cookie não funcionaria.
É possível usar um hash do cabeçalho HTTP Authorization para fazer o balanceamento de carga? Além disso, e isso é mais complexo, é possível definir nosso próprio método de hash?
Pergunta de acompanhamento [após a resposta de Willy]:
Como é possível fazer balance hdr(Authorization)
, seria possível fazer somente no campo de login (após a análise)?
Além disso, qual é o algoritmo exato? Eu acredito que é na forma de hash(Authorization) % number_of_backend_server
, mas então, qual é a função hash e, mais importante, é ajustável? (ou posso adicionar um deslocamento).
Estou perguntando porque este aplicativo é realmente uma conexão de Componente XMPP aberta e que eu preciso balanceamento de carga dos componentes XMPP com o mesmo algoritmo. O to
jid nas sub-rotinas XMPP é determinado pela Autorização de Cabeçalho HTTP.