2008-12-09 2 views
1

В настоящее время мы используем базу данных для хранения информации о состоянии (в отдельной таблице) для пользователя. Мы извлекаем эту информацию из базы данных каждый раз, когда пользователь обращается к приложению (отправляет запрос) и обновляет его в базе данных после обработки запроса.Управление сеансом для сайта с балансировкой нагрузки

Это очень хорошо сработало для нас во многих наших проектах и ​​очень легко реализовать, но это добавляет накладные расходы для вызова базы данных и сохранения информации о состоянии.

Есть ли другие способы, которые могли бы работать лучше в этом случае?

ответ

2

Из-под коробки MS предлагает StateServer mode. Это позволяет хранить данные сеанса в памяти на одном сервере, совместно используемом одним или несколькими веб-серверами. В некоторых случаях (если состояние сеанса SQL Server находится под значительной нагрузкой), это может дать вам импульс.

По умолчанию поставщик сеанса SQL Server извлекает и сохраняет элементы сеанса для каждого элемента. Если вы знаете свое использование сеанса, и это кажется неэффективным (вы извлекаете и сохраняете несколько элементов для каждого запроса), вы можете реализовать пользовательский SessionState Store Provider на SQL Server, который извлекает все элементы сеанса в начале запроса и сохраняет их все в конце запрос.

Другие ресурсы:

0

Существует множество стратегий. Я надеюсь, что ваша сессия будет липкой (т. Е. Маршрутизируется на ту же машину все время, когда она встает). В этом случае вы можете кэшировать данные локально (в памяти) и использовать БД только для резервного копирования («только для записи»). Кроме того, существуют такие решения, как memcached, обеспечивающий распределенный кеш.

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