Подтвердить что ты не робот

Понимание балансировки нагрузки в asp.net

Я пишу веб-сайт, который начнет использовать балансировщик нагрузки, и я пытаюсь обвести вокруг него голову.

  • Является ли IIS просто балансированием для вас?
  • У вас есть отдельный веб-слой, который находится на распределенном сервере, который выполняет некоторую работу перед отправкой на дополнительный сервер, например, auth или другой способ?

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

Я понимаю, что кэширование будет проблемой, но это другая тема, а также сеанс.

4b9b3361

Ответ 1

У IIS по умолчанию нет балансировщика нагрузки, но вы можете использовать как минимум две технологии Microsoft:

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

Чтобы сделать службу безстоящей, не сохраняйте какое-либо состояние (сеанс, например, на веб-сайте 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.

Ответ 2

Является ли IIS только для вас балансировкой?

Да, если вы настроите Маршрутизацию запросов приложений:

ARR in IIS

У вас есть отдельный веб-слой, который находится на распределенном сервере

Да.

который выполняет некоторую работу перед отправкой на вспомогательный сервер, например, с помощью auth или другой работы?

Нет, ARR довольно "тупой":

IIS ARR не обеспечивает предварительную аутентификацию. Если pre-auth является требованием, вы можете посмотреть прокси-сервер веб-приложений (WAP), который доступен в Windows Server 2012 R2.

Он просто действует как прозрачный прокси-сервер, который принимает и пересылает запросы, добавляя при этом кеширование.

Для аутентификации вы можете посмотреть Windows Server 2012 Прокси-сервер веб-приложений.

Ответ 3

Некоторые советы и, возможно, предметы, чтобы ознакомиться с вами:

  • ARR, поскольку все вышеперечисленные ответы выше состояния - это "прокси", который обрабатывает трафик от ваших пользователей на ваши серверы.

  • Вы можете обрабатывать состояние, на которое указывает Конрад, или вы можете использовать ARR "липкие" сеансы (убедитесь, что клиент всегда идет на "этот сервер" - предположительно, сервер, который поддерживает состояние для этого конкретного клиента). См. Обсуждение/комментарии по этому вопросу - это здорово.

  • Я так долго не носил шляпу IT/сервер и, честно говоря, не касался кластеризации (всегда "обрабатывался автоматически для меня" каким-то провайдером), поэтому я задал этот вопрос у нашего хоста, "что/как происходит репликация среди нашего кластера/фермы"? - Вопрос охватывает такие вещи, как

    • Я только работаю/устанавливаю вещи на 1 сервере, реплицируется ли это на X виртуальных машинах в нашем кластере/ферме? Как долго?
    • Что относительно динамически генерируемых, кодовых и/или пользовательских файлов (файловой системы)? Если он находится в файловой системе VM1, и у меня есть 10 балансированных нагрузки VM, и клиент может ударить любого из них в любое время, тогда...?
    • Как насчет шифрования? например если вы используете DPAPI для шифрования файлов web.config(egdb conn strings/sections), каково влияние этого (потому что оно основано на машинном ключе, и, очевидно, очевидная вещь теперь у вас есть машина (s) или VM ( s). RSA переписывает....?
  • SSL: ARR может справиться с этим также и для вас, и это здорово! Но, как и во всей силе, появляется "con" - если вы проверяете/проверяете в своем коде, например. HttpRequest.IsSecureConnection, это всегда будет false. Серверы/виртуальные машины не имеют сертификата, ARR. Зашифрованное соединение находится между клиентом и ARR. ARR для ваших серверов/виртуальных машин - нет. Как поясняет ссылка, если вы предпочитаете это наоборот (без разгрузки), вы можете... но это означает, что все ваши серверы/виртуальные машины должны иметь сертификат (и как это относится к "репликации" выше, начинает появляться в вашем голова).

Не должно быть всеобъемлющим, просто перечисляя вещи из памяти... Hth