Обеспечить сериализованный доступ к состоянию сеанса для InProc? - PullRequest
0 голосов
/ 23 марта 2012

В прошлом я слышал совет использовать SqlServer / StateServer на ранних этапах проекта, поэтому при масштабировании вы не попадаете в ловушку разработчика, использующего несериализуемые объекты InProc, и он ломается при переходе на SqlServer / StateServer позже.

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

Есть ли у кого-нибудь рекомендации по применению сериализуемых объектов при использовании InProc? Возможно создание обертки?

1 Ответ

2 голосов
/ 03 мая 2012

Важно помнить, что использование SqlServer / StateServer - это не только масштабирование (веб-фермы). Даже на одном сервере вы можете столкнуться с проблемами при использовании только сессий InProc. В основном, при использовании InProc любые сеансы, которые являются «живыми», когда повторяется пул приложений, теряются. Чтобы поместить это в контекст, вы, возможно, запускаете воронку покупок и сохраняете что-то в сеансе, что является критическим для процесса (почему это может быть плохой практикой, это другой разговор). В любом случае, если информация о сеансе повреждена / потеряна, пользователь не сможет продолжить. Таким образом, пул приложений перезапускает и теряет все текущие сеансы в настоящий момент, поэтому любые клиенты, находящиеся в вашей воронке покупок, выпадают и могут быть потеряны.

Только по этой причине я всегда рекомендую запускать сеансы SqlServer как минимум (даже локально). Лучшая архитектура обычно сводит на нет любые проблемы с производительностью. Если у вас возникнут проблемы с производительностью, вы потенциально можете посмотреть на реализации StateServer сторонних производителей, что я должен быть быстрее.

Если после прочтения недостатков запуска InProc на работающем сервере вы все равно будете рады сделать это (это ваши причины, так что все в порядке), единственное, что я могу порекомендовать, - это изменить ваш сервер разработки (или проверить ) для запуска с использованием SqlState и оставьте Live запущенным InProc. Таким образом, вы видите какие-либо проблемы в среде, в которой не используется InProc, и можете исправить их в неактивной среде. Затем, если вы решите переключить Live поверх, вы будете знать, что для этого не потребуется никаких дополнительных усилий разработчика, и все должно быть в порядке.

...