Ответ 1
У IIS по умолчанию нет балансировщика нагрузки, но вы можете использовать как минимум две технологии Microsoft:
- Маршрутизация запросов приложений, которая интегрируется с IIS, вы должны идеально иметь отдельный веб-уровень для выполнения маршрутизации,
- Балансировка сетевой нагрузки, интегрированная с Microsoft Windows Server, вы можете присоединиться к существующим серверам в кластере NLB.
Обе эти технологии не требуют какого-либо кода как такового, это вопрос инфраструктуры. Но вы должны, конечно, помнить о сбалансированной по нагрузке среде во время разработки. Например, чтобы сделать веб-сайты действительно сбалансированными, они должны быть без гражданства. В противном случае вам придется предоставлять так называемую липкость между клиентом и сервером, поэтому один и тот же клиент будет всегда подключаться к одному и тому же серверу.
Чтобы сделать службу безстоящей, не сохраняйте какое-либо состояние (сеанс, например, на веб-сайте ASP.NET) на сервере, а на внешнем сервере, совместно используемом всеми серверами фермы. Таким образом, обычно используется внешний сервер сеанса ASP.NET (режимы StateServer или SQLServer) для всех сайтов в кластере.
EDIT:
Просто, чтобы прояснить несколько вещей, несколько слов об обеих упомянутых технологиях:
- NLB работает на сетевом уровне (как фактически сетевой драйвер), поэтому без каких-либо знаний об используемых приложениях. Вы создаете так называемые кластеры, состоящие из нескольких машин/серверов, и выставляете их как один IP-адрес. Затем другой компьютер может использовать этот IP как любой другой IP, но соединения будут автоматически перенаправляться на одну из машин кластера. Кластер настроен на каждом сервере, нет внешней, дополнительной машины маршрутизации. В зависимости от настроек кластеров, как мы уже упоминали, липкость может быть включена или отключена (здесь называется Single или None Affinity). Существует также параметр Load weight, поэтому вы можете установить распределение нагрузки с весовым коэффициентом, отправляя больше соединений на самую быструю машину, например. Но этот параметр является статическим, он не может быть динамически основан на сети, процессоре или любом другом использовании. На самом деле NLB не заботится о том, работает ли целевое приложение, он просто перенаправляет сетевой трафик на выбранную машину. Но он замечает, что серверы отключены, поэтому там не будет маршрутизации. Преимущества NLB в том, что он довольно легкий и не требует дополнительных машин.
- ARR намного сложнее, он построен как модуль поверх IIS и предназначен для принятия решений о маршрутизации на уровне приложений. Балансировка сетевой нагрузки является лишь одной из ее функций, поскольку это более полное решение маршрутизации. Он имеет "основанную на правилах маршрутизацию, сближение имени клиента и хоста, балансировку нагрузки запросов HTTP-сервера и кэширование распределенных дисков", как указано в Microsoft. Вы создаете там серверные фермы со многими параметрами, такими как алгоритм балансировки нагрузки, распределение нагрузки и липкость клиента. Вы можете определить тесты работоспособности и правила маршрутизации для пересылки запроса другим серверам. Недостатком всего этого является то, что должен быть выделенный компьютер, на котором установлен ARR, поэтому требуется больше ресурсов (и затрат).
- NLB и ARR - поскольку использование одной машины ARR может быть единственной точкой отказа, Microsoft заявляет, что стоит рассмотреть создание кластера NRB машин ARR.