5

Учитывая, что JavaServer Faces по своей природе является с точки зрения состояния на стороне сервера, какие методы рекомендуется для горизонтального масштабирования приложения JSF 2.0?Горизонтальное масштабирование приложения JSF 2.0

Если приложение запускает несколько JSF-серверов, я могу представить следующие сценарии:

  1. липких сессии: отправить все запросы, соответствующие заданную сессию на тот же сервер.
    • Вопрос: Какая технология обычно используется для достижения этого?
    • Проблема: сервера может привести к сбою в потерянных сеансов ... и вообще, кажется, как хрупкая архитектура, особенно при запуске свежие (не пытаясь расширить существующее приложение)
  2. State (Session) Репликация: повторить JSF состояние на всех серверах JSF в кластере
    • Вопрос: Какая технология обычно используется для достижения этого?
    • Задача: не масштабируется. общая память кластера = общая память на самом маленьком сервере
  3. Поручить JSF (через конфигурацию) сохранить его состояние на внешнем ресурсе (например, на другом сервере с очень быстрой базой данных в памяти), затем получить доступ к этому ресурсу из Серверы JSF, когда требуется состояние приложения?
    • Вопрос: это возможно?
  4. Поручить JSF (через конфигурацию) быть апатридом?
    • Вопрос: это возможно?

[EDIT]

Обновлено в ответ на предложение Рави липких Sessions

ответ

2

Это может быть достигнуто путем настройки вашей балансировки нагрузки в режиме липкого сеанса.

info Подробнее

Таким образом, все ваши последующие запросы направляются к одному серверу приложений.

+1

Спасибо @ Ravi, я обновил свой вопрос соответственно. Но, на мой взгляд, это скорее решение для групповой помощи, чем архитектурное решение. –

+0

Yup, если узел терпит неудачу, все сеансы на этом узле теряются. – Ravi

0

Как насчет репликации сеанса с семантикой «приятель»?

С одной общей суммой приятелей половина (каждый сервер должен хранить данные сеанса на двух серверах), что намного лучше, чем хранение данных каждого сервера.

Репликация Buddy также снижает накладные расходы на пропускную способность.

2

Вот идея от Jelastic PaaS:

пары вверх экземпляры приложений в кластерах 2-сервера и применить репликацию сеанса между этими 2 случаями в пределах одного кластера. Затем вы можете добавить столько кластеров с двумя экземплярами, сколько хотите, и запросить баланс баланса между кластерами, причем каждый сеанс будет привязан к кластеру, из которого он возник. Внутри кластера запросы могут быть сбалансированы по нагрузке между экземплярами.

Таким образом, существует определенная степень безопасности при сбое, поскольку, если один экземпляр в кластере терпит неудачу, другой переходит к тому же состоянию сеанса. С другой стороны, влияние памяти не так сильно, как при полной репликации.

Короче говоря, это комбинация 1. и 2. с вашего вопроса. Разумеется, в каждом кластере может быть более двух экземпляров, если доступность вызывает большую озабоченность.

Ссылка на документы Jelastic Я снял эту идею с: http://jelastic.com/docs/session-replication.

Отказ от ответственности: Я не знаю, как настроить это с помощью JSF2, и не имеет отношения к Jelastic. Просто понравилась идея и подумал, что это может помочь.

Смежные вопросы