Изучение сессии в ASP.Net - Веб-сад

ОГЛАВЛЕНИЕ

Веб-сад

По умолчанию каждый пул приложений работает с одним рабочим процессом (W3Wp.exe). Можно назначить несколько рабочих процессов одному пулу приложений. Пул приложений с несколькими рабочими процессами называется веб-сад. Много рабочих процессов в одном и том же пуле приложений иногда дают лучшую производительность и время реакции приложения. Каждый рабочий процесс должен иметь свой собственный поток и область памяти.

 

Как показано на рисунке, в сервере IIS может быть несколько пулов приложений, и каждый пул приложений имеет минимум один рабочий процесс. Веб-сад должен содержать несколько рабочих процессов.

Есть определенные ограничения на использование веб-сада в веб-приложении. Если используется внутрипроцессный режим сессии, приложение не будет работать правильно, потому что сессия будет обрабатываться другим рабочим процессом. Во избежание данной проблемы надо использовать внепроцессный режим сессии. Можно использовать "Сервер состояния сессии" или "Состояние сессии SQL-Server".

Главное преимущество: Рабочие процессы в веб-саде разделяют запросы, поступающие в конкретный пул приложений. Если один рабочий процесс откажет, другой рабочий процесс сможет продолжить обработку запросов.

Как создать веб-сад?

Щелкните правой кнопкой мыши по Пул приложений > Перейти во вкладку Производительность > Выбрать секцию веб-сад (выделена на рисунке)

 

По умолчанию стоит 1, измените на несколько.

Как сессия зависит от веб-сада?

InProc управляется рабочим процессом. Он хранит данные внутри своего объекта памяти. Если есть несколько рабочих процессов, то обрабатывать сессию будет очень трудно, потому что каждый рабочий процесс имеет свою собственную память. Поэтому если первый запрос пользователя уходит к WP1, и он хранит его данные сессии, и второй запрос того же пользователя уходит к WP2, и пользователь пытается извлечь данные сессии, они не вернутся, и выбросится ошибка. Поэтому не используйте веб-сад во внутрипроцессном режиме сессии.

В случае веб-сада можно использовать режим сессии StateServer или SQLServer, потому что эти два режима сессии не зависят от рабочего процесса. В примере показано, что после перезапуска IIS данные сессии успешно извлекаются.

Режим сессии

Рекомендуется

InProc

Нет

StateServer

Да

SQLServer

Да

Веб-ферма и балансировщик нагрузки

Это наиболее распространенный термин, используемый в производственном развертывании. Этот термин появляется при использовании нескольких веб-серверов для развертывания продукта. Нагрузка распределяется на несколько серверов. Балансировщик нагрузки применяется для распределения нагрузки на эти сервера.

 

На схеме клиент запрашивает url и попадает в балансировщик нагрузки, решающий, к какому серверу обратиться. Балансировщик нагрузки распределяет трафик на все веб-сервера.

Как это влияет на сессию?

Обработка сессии в веб-ферме и балансировщике нагрузки

Обработка сессии – одна из самых главных задач в веб-ферме.

InProc: При внутрипроцессном режиме сессии данные сессии хранятся в объекте в памяти рабочего процесса. Все до единого серверы имеют собственный рабочий процесс и хранят данные сессии в памяти.

 

Если в данный момент один сервер не работает, а запрос поступает другому серверу, пользователь не сможет получить данные сессии. Поэтому не рекомендуется использовать InProc в веб-ферме.

StateServer:Уже было объяснено, что такое сервер состояний, как сконфигурировать сервер состояний и др. Легко понять, насколько он важен для веб-фермы, потому что все данные сессии хранятся в одном месте.

 

Не забудьте проверить, что у всех веб-серверов одинаковый <machinekey>, и что все web.config имеют одинаковую конфигурацию (stateConnectionString) для состояния сессии.

SQL Server: Это другой подход, лучший для применения в веб-ферме. Сначала надо сконфигурировать базу данных. Шаги уже были рассмотрены.

 

Как показано на рисунке выше, все данные сессии веб-сервера хранятся в одной базе данных SQL Server. Она легко доступна. Помните, что надо сериализовать объект в режимах сервера состояний и SQL Server. При отключении одного веб-сервера балансировщик нагрузки распределяет нагрузку на другой сервер, и пользователь может прочитать данные сессии из сервера, потому что данные хранятся в централизованном сервере баз данных.

Таким образом, в веб-ферме можно использовать режим сессии сервера состояний или SQL. InProc не подходит.