Распределение нагрузки для сайтов ASP.NET - PullRequest
2 голосов
/ 16 сентября 2009

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

У кого-нибудь есть какие-либо предостережения или комментарии для этого подхода?

Ответы [ 4 ]

1 голос
/ 19 сентября 2009

Как уже упоминали другие, вы должны иметь возможность включить Sticky Sessions на вашем балансировщике нагрузки, что должно решить большинство проблем "остаться на одном сервере".

Однако вы захотите убедиться, что вы установили настройки, чтобы справиться с посадкой пользователя на неправильный сервер в середине сеанса - Sticky Sessions обычно основаны на IP-адресе, и IP-адреса пользователей могут измениться в середине сеанса, если вам не повезло, или сервер может отключиться, и пользователь будет перенаправлен на другой сервер.

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

Если вы владеете серверами, вы можете сделать это в файле machine.config, в противном случае вы можете установить его на уровне приложения в файле web.config, более подробную информацию можно найти в следующих инструкциях:

Настройка MachineKey в ASP.NET 2.0

Существуют некоторые небольшие различия, если вы работаете на IIS 7.5 - у Тесс Феррандез есть подробности в недавнем посте " Сбой проверки подлинности с помощью форм после установки IIS 7.5 ".

Другая вещь, которую вы, вероятно, захотите сделать, - это переместить sessionState из InProc в Sql или StateServer.

1 голос
/ 16 сентября 2009

Большинство (perhap all) балансировщиков нагрузки имеют возможность принудительно устанавливать «липкие» сеансы, когда пользователи с одним и тем же IP направляются на один и тот же веб-сервер при каждом запросе. Для этого не требуется никаких изменений кода. На ум приходят два предостережения:

  1. Использование липких сессий будет означать, что нагрузка трафика не будет распределяться так равномерно, как если бы вы не использовали липкие сессии. Тем не менее, распределение должно быть "даже достаточно" IMO.
  2. Будет очень небольшой процент пользователей, использующих прокси-серверы, которые могут заходить на разные IP-адреса по разным запросам. Эти пользователи могут испытывать «странное» поведение при передаче на разные серверы.
1 голос
/ 19 сентября 2009

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

1 голос
/ 16 сентября 2009

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

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

Я реализовал этот вид распределения нагрузки там, где я работаю, и для его реализации не требуется специальный код asp.net.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...