У меня есть веб-приложение, которое будет работать на нескольких серверах. Я хотел бы убедиться, что запросы, использующие один и тот же сеанс (заголовок HTTP cookie со значением JSESSIONID = x), всегда связываются с одним и тем же сервером. То есть до тех пор, пока сеанс не «переместится» на другой сервер при определенных обстоятельствах (не только в случае отказа сервера, но также из-за некоторых стратегий кэширования и производительности на стороне сервера).
Мое веб-приложение хорошо работает с этим сценарием, но какие балансировщик нагрузки я должен использовать? Очевидно, я мог бы балансировать нагрузку на уровне приложений, но я ищу что-то более эффективное. Может специализированное железо (а может и нет)? Я не могу тратить много денег ...
Обновить
Спасибо за ваши ответы: теперь я узнал, что Фунт и HAProxy можно настроить на поиск определенных файлов cookie. Я пока не мог узнать, позволяют ли они также динамически обновлять отображение (когда сеанс «перемещается» на другой сервер приложений)?
И есть ли (недорогие) аппаратные решения, которые тоже могут это делать? (Будет ли это стоить меньше, чем дополнительный сервер балансировки нагрузки?)
С помощью "липкие (постоянные) сессии"обычно не рекомендуется. Если вы сделаете это, вы потеряете многие преимущества балансировки нагрузки. Нагрузка не будет сбалансирована, и вы потеряете высокую доступность, поскольку некоторые клиенты не смогут получить доступ к вашему приложению в случае сбоя.
Вы хотите, чтобы ваш сеанс был динамичным. В Java он обычно хранится в памяти и кластеризуется на все серверы посредством многоадресной рассылки. Чаще всего сеанс сохраняется в базе данных.
Если ваше веб-приложение требует закрепленных сеансов, ваша архитектура может нуждаться в улучшении.
Что касается решений для балансировки нагрузки, их много, и здесь эта тема подробно рассмотрена. мне нравиться LVS. Другим нравится nginx. Литейные сети, которую приобрела Brocade, производит несколько солидных коммерческих продуктов. Это основное коммерческое решение для аппаратных балансировщиков нагрузки. Барракуда также есть «устройство» на базе Linux / OSS, которое можно использовать для балансировки нагрузки.
Прежде чем тратить деньги ... взгляните на программный балансировщик нагрузки с открытым исходным кодом, например Фунт или HAProxy.
Я согласен с предложениями Уорнера и Стю.
Тогда пара решений для вас.
Напишите метод хранения сеанса, который использует базу данных для хранения информации о сеансе, и если он находится на нескольких серверах, вы можете кластеризовать базу данных. Это действительно зависит от того, как вы решите организовать вещи, и другая идея - использовать сервер с кэшем памяти за веб-серверами и хранить там сеансы.
Таким образом, у вас есть сеансы в одном месте, и больше не имеет значения, на какой веб-сервер направлен клиент.
Я только что прочитал статью Обеспечение масштабируемости приложений с помощью балансировки нагрузки Автор HAProxy Вилли Тарро, и он содержит все необходимые мне ответы.
Вот мое личное резюме того, что я узнал:
Статья написана в 2006 году, с тех пор кое-что могло измениться.
ФУНТ - ОБРАТНЫЙ ПРОКСИ И НАГРУЗОЧНЫЙ БАЛАНСИР
Программа Pound - это обратный прокси, балансировщик нагрузки и интерфейс HTTPS для веб-серверов. Pound был разработан, чтобы обеспечить возможность распределения нагрузки между несколькими веб-серверами и предоставить удобную оболочку SSL для тех веб-серверов, которые не поддерживают ее изначально. Pound распространяется под лицензией GPL - без гарантии, его можно использовать, копировать и раздавать бесплатно.
Это может быть ты ищешь