ASP.Net - Обработка данных сеанса в среде с балансировкой нагрузки? - PullRequest
8 голосов
/ 28 сентября 2011

Как ASP.Net обрабатывает данные сеанса в среде с балансировкой нагрузки?Допустим, пользователь делает несколько запросов при навигации по паре страниц?Все ли запросы поступают на один и тот же сервер в балансировщике нагрузки?

Что я могу сделать, если они не все указывают на один и тот же сервер?как мне работать с данными сеанса?

Ответы [ 4 ]

4 голосов
/ 28 сентября 2011

Вы должны убедиться, что ваш NLB имеет возможность включать "липкие" сеансы.

Если это не вариант, то вам нужно рассмотреть использование ASP.Net Session Modes для настройки сервера сеансов или какого-либо резервного хранилища, такого как SQL Server.

1 голос
/ 28 сентября 2011

Вы можете использовать NLB из Windows или других продуктов, таких как BIG-IP F5, HA-прокси, там множество вариантов.

Используйте Out-of-Proc (State Server) и убедитесь, что ваши настройки машинного ключа установленыодинаково на всех ваших серверах.Также убедитесь, что вы выполняете ввод-вывод на общем диске, таком как NAS.

Вот ссылка с некоторыми советами: Балансировка нагрузки и ASP.NET

1 голос
/ 28 сентября 2011

Балансировщики нагрузки обычно могут быть настроены на то, что ребята из инфраструктуры называют sticky session или sticky bit.В среде этого типа, когда запрос был назначен серверу;он остается с этим сервером на протяжении всего сеанса.

Когда балансировщики нагрузки не настроены таким образом, ASP.NET предлагает несколько поставщиков состояния сеанса.Очень популярным является поставщик состояний SQL Server , который позволяет сохранять информацию о сеансе в базе данных.Чтобы это работало, все объекты, помещенные в объект Session, должны быть сериализуемыми, чтобы их можно было хранить в таблице.

Как я уже сказал, есть еще несколько альтернатив;например, некоторые люди предпочитают использовать другой подход, такой как memcached или аналогичные продукты.

1 голос
/ 28 сентября 2011

Как правило, большинство балансировщиков нагрузки стараются иметь постоянные соединения, но для ваших целей вы не можете этого гарантировать.Лучше всего использовать что-то вроде SQL-сервера для поддержания состояния или создать отдельный класс для управления данными сеанса.В любом случае вы можете перестроить данные сеанса, если они окажутся нулевыми, если вы ожидаете, что это будет иначе.Я склонен использовать геттеры для проверки на ноль и перестроить при необходимости.На практике я не делал никаких метрик, чтобы увидеть, как часто он перестраивается, но я бы догадался не очень часто.Лучше быть в безопасности, чем потом сожалеть, как говорится.

...