Работа конвейера веб-сервера IIS

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 1.11.2015

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

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

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

HTTP.sys

Драйвер уровня ядра HTTP.sys является посредником между приложением и операционной системой. В архитектуре IIS он выполняет две задачи:

  • HTTP.sys является протокольным слушателем (protocol listeners) по умолчанию в IIS. То есть HTTP.sys прослушивает все запросы, которые, используют протоколы HTTP и HTTPS, и затем передает эти запросы другим компонентам IIS для дальнейшей обработки.

  • HTTP.sys также представляет стек протокола HTTP. А именно HTTP.sys выполняет кэширование, постановку запросов в очередь, предобработку и ряд других функций.

Порт завершения ввода-вывода

Для максимизации числа одновременно обрабатываемых запросов IIS использует специальное API, которое называется портом завершения ввода-вывода (Input/Output Completion Port). IIS имеет выделенный пул потоков для обработки операций ввода/вывода и управления очередью запросов. При обработке запросов этот API взаимодействует с драйвером HTTP.sys.

World Wide Web Publishing Service (W3SVC)

World Wide Web Publishing Service или Служба веб-публикации является адаптером над драйвером HTTP.sys и выполняет следующие функции:

  • Конфигурирование HTTP.sys

  • Мониторинг показателей производительности

До версии IIS 7.0 служба веб-публикации также управляла рабочими процессами приложений. Но начиная с IIS 7.0 за эту функцию отвечает Windows Process Activation Service.

Windows Process Activation Service (WAS)

Данная служба была выделена начиная с IIS 7.0. Ее предназначение - управление рабочими процессами. WAS состоит из трех основных компонентов:

  • менеджер конфигурации: считывает конфигурационную информацию о веб-приложениях и пулах приложений из файла applicationhost.config

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

  • интерфейс неуправляемых адаптеров прослушивателей (unmanaged listener adaptor interface): предоставляет интерфейс для прослушивателей запросов, которые не относятся к протоколу HTTP

Обработка запросов в IIS

Теперь рассмотрим поэтапно работу конвейера IIS по обработке входящих запросов.

  1. Пользователь посылает HTTP-запрос, обращаясь через браузер к определенному ресурсу на сервере. Этот запрос перехватывается драйвером HTTP.sys.

  2. Драйвер HTTP.sys обращается к WAS для получения конфигурационных данных для запрошенного адреса URL

  3. Менеджер конфигурации WAS считывает данные из файла applicationhost.config, в частности пул приложения и конфигурационные настройки сайта

  4. Считанные данные WAS передает службе веб-публикации IIS (служба W3SVC)

  5. Служба веб-публикации использует полученные от WAS данные для конфигурации HTTP.sys. Затем драйвер HTTP.sys помещает пришедший запрос в очередь порта завершения ввода-вывода (I/O completion port), которую обрабатывает WAS.

  6. WAS использует выделенный пул потоков для обработки очереди. По умолчанию данный пул потоков может использовать до 250 потоков на одно ядро компьютера. Если к данному моменту не был запущен рабочий процесс, ассоциированный с запрошенным URL, то WAS запускает приложение w3wp.exe, в рамках которого работает рабочий процесс обработки запросов.

  7. В рамках запущенного рабочего процесса ASP.NET проверяет, сколько запросов обрабатывается в текущий момент времени. Если их число превышает лимит по умолчанию в 5000 запросов, то новый запрос помещается в очередь. Однако если очередь достигла своего лимита в 1000 запросов, то данный запрос отвергается, и в ответ клиенту посылается статусный код ошибки 503.

    Если запрос направлен к статическому файлу, который не содержит кода .NET-языков, то ASP.NET посылает содержимое этого файла в порт завершения ввода-вывода IIS, а оттуда - пользователю, сделавшему запрос. В остальных случаях ASP.NET отправляет запрос в пул потоков CLR.

    CLR обрабатывает запрос. На этой стадии запускается непосредственно код нашего веб-приложения или веб-сайта, размещенного на веб-сервере.

    После того, как среда CLR закончит обработку запроса, она посылает результаты драйверу HTTP.sys, а тот - на порт завершения ввода-вывода IIS.

  8. Пользователь получает результат обработки

Схематично весь процесс можно представить следующим образом:

Обработка запросов в IIS
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850