Мы используем HAProxy для балансировки нагрузки нашего веб-сокета и приложения кометы. Сзади работают одно HAProxy и 3 приложения. Мы используем HTTP Basic Auth (и в будущем мы будем использовать другие типы аутентификации, такие как OAuth) для идентификации подключенного пользователя.
Мы не можем использовать обычный циклический перебор, потому что важно, чтобы соединения для данного пользователя находились на одном сервере. Неважно где, но важно, чтобы они использовали один и тот же сервер.
Я знаю HAProxy как интеллектуальный подход на основе файлов cookie, но, к сожалению, в нашем случае иногда один и тот же пользователь будет подключаться с разных машин, поэтому cookie не будет работать).
Можно ли использовать хэш заголовка HTTP-авторизации для балансировки нагрузки? Кроме того, что более сложно, можно ли определить наш собственный метод хеширования?
Дополнительный вопрос [после ответа Вилли]:
Поскольку это возможно balance hdr(Authorization)
, можно ли было бы это сделать только на поле логина (после разбора)?
Кроме того, каков точный алгоритм? Я считаю, что это в форме hash(Authorization) % number_of_backend_server
, но тогда что такое хэш-функция и, что более важно, можно ли ее настроить? (или можно добавить смещение).
Я спрашиваю, потому что это приложение на самом деле поддерживает соединение с компонентом XMPP открытым, и мне нужно балансировка нагрузки на компоненты XMPP по тому же алгоритму. В to
jid в разделах XMPP определяется авторизацией заголовка HTTP.
Да, вы можете хешировать любой заголовок по вашему выбору. Просто используйте "balance hdr (header_name)". Должен сказать, я никогда не думал об этом. В некоторых средах это действительно может быть весьма полезно. Вы также можете использовать хэш для параметра URL или параметра POST, если это может помочь.
Однако вы не можете определить свой метод хеширования. Вы можете выбрать, является ли хеш сопоставленным или согласованным, но это все.