2015-05-28 1 views
0

Мы использовали состояние сеанса по умолчанию (в proc) в нашем приложении, которое мы построили поверх Orchard. Теперь руководство решило установить балансировку нагрузки между ними. Чтобы наши сеансы все еще работали, я решил пойти с состоянием сеанса «Не в процессе». Однако я немного смущен тем, должен ли я включать его в модуль «Orchard.web» в определенных модулях, где я использовал сеансы.из состояния сеанса процесса в саду

Я пытался выяснить, поддерживает ли Orchard сеансы proc каким-либо другим способом, или он должен быть аналогичным образом, как и обычное приложение asp.net.

Любая помощь будет оценена

ответ

1

Во-первых - я почти уверен, что команда Orchard рекомендует избегать состояния сеанса любой ценой. Все, что имеет состояние сеанса (по определению) stateful, и это делает масштабирование наружу сложнее. Однако, если вы не можете этого избежать:

1) Это просто приложение ASP.NET, применяются обычные правила. Убедитесь, что один и тот же машинный ключ установлен в конфигурации приложения, настройте механизм состояния сеанса по вашему выбору (сервер SQL/state) и настройте соответствующие значения в web.config.

однако

2) Стандартная реализация государственной ASP.NET сессии имеет очень плохой замок. Это может привести к проблемам с плохой отзывчивостью для ваших страниц. Ознакомьтесь с этим замечательным вопросом (и связанными сообщениями) по телефону session state performance. Вы должны сами оценить, есть ли у вас необходимость в заблокированном состоянии сеанса. Нам пришлось удалить состояние сеанса полностью для того, чтобы обеспечить приемлемую производительность для наших приложений (и мы никогда не оглядывались назад и нашли разумный аргумент для сессии над кэшированием так

+0

Не могу согласиться больше. Использование сеанса обычно считается плохой практикой (она поставляется с огромной ценой). Протокол Http не имеет аналогов по дизайну, поэтому любая попытка поддерживать сеанс * на стороне сервера является обходным решением. Реализация сеанса по умолчанию довольно слабая (принудительная синхронная обработка запросов) - есть лучшие способы достижения аналогичного поведения (caching et al). –

+0

Ну, технически мы * * используем сеанс в довольно многих местах, когда используем 'TempData'. Это менее проблематично, чем состояние сеанса общего назначения, потому что оно очень изменчивое, и с некоторой должным образом настроенной близостью оно отлично работает. –

+0

Кроме того, вы можете использовать различные поставщики TempData, которые не будут использовать сеансы, но, например, cookie: https://github.com/brockallen/CookieTempData – Piedone

1

Классическим решением для масштабирования является использование В большинстве балансиров нагрузки есть этот параметр, и это позволит вам продолжать использовать сеанс inproc. И если вы не планируете автоматическое масштабирование, вы всегда будете иметь фиксированное количество серверов за вашим LB, тогда оно будет решение, которое вы должны тщательно рассмотреть.
Выход из proc может дать вам некоторые головные боли, такие как маркировка всех ваших классов, которые вы ввели в сеанс как Serializable.

+0

... и если один сервер отключается, все пользователи на этом сервере теряют свою сессию. Поэтому вы должны помнить об этом. Идеал заключается в том, чтобы избежать сеансов полностью, поскольку это, безусловно, самое масштабируемое решение, когда у вас есть сервер без состояния. –