Производительность JSF: насколько масштабируема JSF?

Мне еще предстоит найти хороший эталон производительности JSF. Я знаю, что вы думаете, это зависит от вашего кода / дизайна / настройки базы данных и т. Д. Я знаю, что вам нужно оптимизировать многие вещи, прежде чем вам нужно будет оптимизировать уровень представления (например, вы должны увидеть, насколько хороша ваша схема базы данных), но давайте скажем ради аргумента, что мы достигли точки, в которой мы должны рассмотреть наш уровень представления.

JSF интенсивно использует сессии. Я много раз читал, что это может быть недостатком, когда речь идет о написании масштабируемых приложений. Наличие больших пользовательских сессий в кластерной среде может быть проблематичным. Есть ли какая-нибудь статья по этому поводу? Я не хотел бы идти в производство только для того, чтобы увидеть, что отличный жизненный цикл JSF и интеграция CDI имеют огромные затраты на производительность.

3 ответа

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

Тем не менее, производительность JSF+CDI на одной машине также очень важна. Предположим, что служебная нагрузка составляет 300 мс, это означает, что 4-ядерный сервер может обрабатывать только 10 запросов в секунду. Не так уж плохо, но не в классе высокой производительности. (Обычно это не проблема для компаний, работающих на платформе JEE; они обычно масштабируются на уровне предприятия, а не в масштабах Интернета; у них есть деньги, которые можно сжечь для большого количества серверов)

У меня, правда, нет номера исполнения; Было бы интересно, если бы кто-то сообщил какую-нибудь статистику CDI+JSF, например, сколько времени занимает обработка типичной страницы с формой среднего размера.

Я не знаю, есть ли какая-то правда в утверждении, что JSF сильно загружен данными сеанса. Однако я бы подумал, что способ решения проблем масштабируемости из-за большого количества данных сеанса заключается в следующем:

  • реплицировать серверы переднего плана (что вы должны сделать в любом случае за пределами определенной точки масштабирования), и

  • отправлять запросы во внешний интерфейс на основе маркера сеанса, так что данные сеанса, вероятно, уже будут доступны в памяти.

Уровень представления является одним из примеров -> смущающе параллельного приложения. В принципе вы можете масштабировать его, добавляя оборудование; Крайне было бы иметь по одному гиперпотоку на пользователя в минуту максимального количества пользователей вашего сайта. Так что масштабируемость здесь не проблема. Проблема может быть связана со страницами, которые должны отображаться последовательно и требовать много времени для рендеринга даже в однопользовательском режиме: если ваш JSF занимает одну минуту для рендеринга в однопользовательском режиме, то и многопользовательский режим, и если вы не можете рендерить его на несколько частей параллельно, это просто необходимо.

Другие вопросы по тегам