Как мне поддерживать состояние на нескольких веб-серверах? - PullRequest
2 голосов
/ 13 октября 2009

Могу ли я иметь несколько веб-серверов, подключенных к кластеру SQL Server, и при этом поддерживать сеанс пользователя?

Я думал о разных подходах. На сайте Microsoft предлагается использовать response.redirect для «правильного» сервера. Хотя я могу понять причину этого, похоже, это недальновидно.

Если балансировщик нагрузки отправляет вас на сервер, который в настоящее время находится под наименьшим напряжением, наверняка, как разработчик, вы должны соблюдать это?

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

Ответы [ 4 ]

2 голосов
/ 13 октября 2009

Я беру здесь из своего опыта работы с серверами приложений Java, некоторые с очень сложными алгоритмами балансировки.

Разумное общее предположение заключается в том, что «Сеансовая близость» предпочтительнее, чем балансировка каждого запроса. Если мы распределим начальный запрос для каждого пользователя с некоторым уровнем знаний о рабочей нагрузке (или даже на случайной основе), и популяция приходит и уходит, мы получаем разумное поведение. Помните, что цель состоит в том, чтобы дать каждому пользователю хороший опыт, чтобы не заканчивать с равномерно используемыми серверами!

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

2 голосов
/ 13 октября 2009

Некоторые опции:

Балансировщик нагрузки может быть сконфигурирован для проведения липких сессий. Убедитесь, что время ожидания сеанса вашего приложения меньше, чем у балансировщиков нагрузки, иначе вы получите непредсказуемые результаты.

Вы можете использовать назначенный сервер состояний для обработки сеанса. Тогда не имеет значения, где они отскочили от LB.

Вы можете использовать сервер SQL для управления сеансом.

Проверьте это на сервере. https://serverfault.com/questions/19717/load-balanced-iis-servers-with-asp-net-inproc-session

0 голосов
/ 13 октября 2009

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

0 голосов
/ 13 октября 2009

Хотя вы можете использовать «липкие» сеансы в вашем балансировщике нагрузки, более оптимальным вариантом будет использование Session State Server вместо InProc. В этот момент все ваши веб-серверы могут указывать на один и тот же сервер состояний и совместно использовать сеанс.

http://msdn.microsoft.com/en-us/library/ms972429.aspx MSDN есть, что сказать по этому вопросу: D

UPDATE:

State Server - это служба на ваших серверах Windows, но да, она выдает единственную точку отказа.

Кроме того, вы можете указать сериализацию сеанса на SQL Server, который не был бы единственной точкой отказа, если бы он был обработан.

Я не уверен, насколько "тяжелой" является рабочая нагрузка для сервера состояний, у кого-нибудь еще есть какие-либо показатели?

...