Пулы приложений IIS, рабочие процессы, домены приложений


88

Может ли кто-нибудь объяснить различия в IIS между пулами приложений, рабочими процессами и доменами приложений? Кроме того, как они работают вместе? Я прочитал пару статей, но это все еще немного сбивает с толку.

  1. Становится ли каждый веб-сайт, созданный в IIS, приложением?
  2. Связано ли каждое приложение с одним рабочим процессом?
  3. Какое место занимают домены приложений?

Ответы:


103

Я пытаюсь выразить их другими словами.

На сервере может быть много сайтов asp.net, работающих вместе. Каждый сайт - это домен приложения .

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

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

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

домены приложений с пулами и процессами

Каждый рабочий процесс может иметь много потоков.

Как больше рабочих процессов влияет на вас:
когда у вас есть один рабочий процесс, все проще, в вашем приложении все статические переменные одинаковы, и вы используете их lockдля их синхронизации.
Когда вы назначаете более одного рабочего процесса, вы все равно продолжаете использовать lockдля статических переменных, статические переменные не различаются между многими запусками вашего сайта, и если у вас есть какой-то общий ресурс (например, создание эскиза на диске) тогда вам нужно синхронизировать рабочий процесс с Mutex.

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

Так что давайте поговорим об одном сайте только с множеством рабочих процессов. Здесь вы сталкиваетесь с проблемой, с которой вам нужно синхронизировать изменение общего ресурса Mutex. Но страницы / обработчики, использующие сеанс, не являются асинхронными, потому что сеанс их блокирует. Это хорошо для начала, потому что вы избегаете выполнять синхронизацию многих точек самостоятельно.

Некоторые вопросы по этой теме:
веб-приложение заблокировано во время обработки другого веб-приложения при совместном использовании того же сеанса.
JQuery. Ajax-вызовы веб-службы кажутся синхронными.
Сервер ASP.NET не обрабатывает страницы асинхронно.
Полная замена сеанса ASP.Net.

Теперь эта блокировка сеанса не влияет на разные сайты.

Среди разных сайтов более проработанный процесс может помочь одному сайту не блокировать другой долгим процессом.
Также среди разных сайтов больше пулов также может помочь, потому что в каждом пуле есть хотя бы один рабочий процесс, но помните и убедитесь сами, используя проводник процессов, каждый рабочий процесс занимает больше памяти вашего компьютера и один большой сервер с памятью 16 ГБ и на одном сервере SQL не может быть слишком много разных рабочих процессов - например, на сервере с 100 общими сайтами у вас не может быть 100 разных пулов.


Я выяснил, что это отличается от того, как IIS 5 обрабатывает это, по сравнению с IIS 6 и выше. Таким образом, в IIS 5 у вас есть один рабочий процесс и несколько доменов приложений в нем, по сравнению с IIS 6 у вас есть несколько рабочих процессов (w3wp.exe), по одному для каждого пула приложений. В IIS 6.0 inetinfo перенаправляется на другой рабочий процесс в зависимости от запроса. Я здесь? Вот мой источник dotnetslackers.com/articles/iis/…
Рави

@ user460103 Да, iis5 имеет один рабочий процесс (несколько доменов приложений могут иметь только небольшой взлом, но они не работают вместе). Если у вас на одном сайте много рабочих процессов, то да, iis6 может перенаправить вас на другой рабочий процесс.
Аристос

Запускает ли IIS новый процесс для каждого веб-запроса? Или он запускает новую ветку?
переменная

@variable Создайте новый поток - процесс работает постоянно, или он перерабатывает то, как вы настроили их в пуле ...
Аристос

Хорошо, если есть несколько процессов, тогда как работают сеансы - я думал, что сеанс для каждого процесса
переменная

18
  • На одном сервере IIS может быть несколько пулов приложений.
  • Одно веб-приложение привязывается к одному пулу приложений.
  • В одном пуле приложений может быть несколько рабочих процессов (если включен Web Garden).
  • Один рабочий процесс может иметь несколько доменов приложений. Один домен приложения живет только в одном рабочем процессе.
  • Один домен приложения может иметь несколько потоков. Один поток может использоваться разными доменами приложений в разное время.

Значение для разработчиков ASP.NET: сделать ваш веб-сайт масштабируемым, не используйте внутрипроцессный сеанс и не используйте блокировку статической переменной класса для синхронизации.


7
  1. Да, хотя не каждое приложение является веб-сайтом. Вы можете иметь приложение, которое вложен под веб - сайта.

  2. Да, каждое приложение должно иметь один рабочий процесс (пул приложений), хотя один пул приложений может обслуживать несколько приложений. Одно веб-приложение может быть распределено (веб-сад / ферма), что означает, что оно будет выполняться в нескольких процессах.

  3. Каждый процесс будет работать в собственном домене приложения (каждый пул приложений - это отдельный домен приложения).


Из MSDN.

Создайте веб-приложение :

Приложение - это группировка контента на корневом уровне веб-сайта или группировка контента в отдельной папке в корневом каталоге веб-сайта.

Пулы приложений :

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


Таким образом, процесс IIS имеет несколько доменов приложений (пулов приложений), и каждый пул приложений может содержать несколько веб-сайтов. Так получается, что несколько веб-сайтов находятся в одном домене приложения? Что, если что-то пойдет не так на одном веб-сайте, будет ли отключен весь домен приложения и все веб-сайты, находящиеся в нем?
Рави

@ user460103 Если вы разбиваете пул, то да, все сайты, которые к нему подключены, останавливаются - и перезапускаются снова.
Аристос

1
2. Нет. Приложение может охватывать более одного рабочего процесса, если настроен веб-сад.
Wiktor Zychla

@Wiktor - я этого не исключала. Однако обновленный ответ для уточнения.
Oded

3

Из исходной ссылки: -http: //weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx

Приложение - это термин IIS, но он используется в ASP.NET. По сути, он создает «песочницу» или набор границ для отделения разных сайтов или частей сайтов от других.

AppDomain - это термин .NET. (В IIS7 домены приложений играют более значительную роль в IIS, но по большей части это термин ASP.NET)

Рабочий процесс используется для обработки запроса веб-приложения.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.