Balanceamento de carga Haproxy com cabeçalhos HTTP

7

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.

    
por Julien Genestoux 25.11.2010 / 18:08

1 resposta

9

Sim, você pode muito bem dividir qualquer cabeçalho de sua escolha. Apenas use "balance hdr (header_name)". Devo dizer que nunca pensei em fazer isso dessa maneira. Em alguns ambientes, pode realmente ser bastante útil. Você também pode usar hash em um parâmetro de URL ou em um parâmetro POST se isso puder ajudar.

Você não pode definir seu método de hashing. Você pode selecionar se o hash é baseado em mapas ou consistente, mas isso é tudo.

    
por 25.11.2010 / 23:05