Кэширования вывода IIS 7.0
Введение Веб-контент можно разделить на две категории: статический и динамический. Статический контент не меняется от запроса к запросу. Контент, который возвращается на веб – браузер, всегда один и тот же. Примеры статического контента включают в себя файлы HTML, JPG или GIF. Другие файлы имеют динамический контент. Это ответ, который создаётся для изменений динамического контента при каждом запросе. В качестве примера может служить контент ASP.NET или PHP. Между этими двумя категориями имеется значительная область, которая включает полу-динамический контент. Представьте себе динамическую страницу ASP.NET, которая выполняет запрос базы данных. Нет никакого смысла выполнять этот запрос при каждом требовании, если основные таблицы базы данных изменяются нечасто. Функция кэширования вывода IIS7.0 направлена на полу-динамический контент. Это позволяет кэшировать статические ответы на динамические запросы и получать огромную масштабируемость. Предварительные условия Для данного анализа программы необходимо наличие IIS 7.0 на Windows® Vista SP1 или на Windows Server® 2008 Beta 3 или более поздней версии. В данном анализе также используется среда разработки ASP.NET 2.0, которая должна быть инсталлирована в качестве дополнительного компонента в настройке IIS 7.0. Краткий аналитический обзор В следующем анализе программы используем интерфейсы расширяемости IIS 7.0 для добавления специфических для языка сообщений авторского права на JPG файлы. Сначала сделаем это путём добавления управляемого обработчика. Динамически вставка сообщения об авторских правах в каждый файл JPG идёт вместе со значением, поскольку в настоящее время управляемый код должен выполняться для каждого файла JPG. Далее, инсталлируем WCAT, инструмент анализа возможностей инфраструктуры веб-узла IIS 7.0, для измерения пропускной способности обработчика авторских прав JPG. Затем добавляем Output Caching (кэширование вывода) для возврата снижения производительности путём добавления обработчика авторских прав. Часть I – Написание и настройка обработчика авторских прав 1. Создайте каталог с именем 'pictures' ('фотографии') в каталоге %systemroot%\inetpub\wwwroot. Выполните следующую команду в оболочке с повышенными правами доступа: md%systemdrive%\inetpub\wwwroot\pictures 2. Скопируйте цифровые фотографии – данный анализ предполагает, что ими будут JPG файлы – в новый каталог фотографий. Используйте следующую фотографию, если нет в наличии файлов JPG под рукой: http://wallpaper.iis7.org/gallery/iis7-highlight.jpg Примечание: Из-за высокого уровня настройки безопасности Internet Explorer в Windows Server 2008, может появиться диалоговое окно безопасности, сообщающее о блокировке веб-сайта. Для загрузки обоев IIS7.0 добавьте wallpaper.iis7.org в список надёжных сайтов. 3. Создайте приложение с помощью инструмента командной строки appcmd %windir%\system32\inetsrv\appcmd add app -site.name:"Default Web Site" 4. Создайте каталог App_Code под каталогом фотографий: md%systemdrive%\inetpub\wwwroot\pictures\App_Code 5. Откройте блокнот и вставьте в него следующий код. using System; Сохраните файл как %systemdrive%\inetpub\wwwroot\pictures\App_Code\imageCopyrightHandler.cs 6. Создайте обработчик, который выполняет этот код при запросе файла JPG: %windir%\system32\inetsrv\appcmd set config /section:system.web.Server/handlers 7. Необходимо также включить просмотр каталога, так как ещё нет документа по умолчанию: %windir%\system32\inetsrv\appcmd set config "Default Web Site/pictures" 8. Пролистайте приложение фотографий, набрав в адресной строке Internet Explorer: https://localhost/picures. Нажмите на ссылку к вашему файлу JPG в листинге каталога IIS 7.0. Должно появиться изображение JPG со вставленным сообщением об авторских правах. 9. Посмотрите на код. Видно, что Copyright Message (сообщение об авторском праве) зависит от заголовка "Accept-Language" ("Принять-язык"), который послан браузером. При наличии инсталлированной немецкой версии Microsoft Server 2008 появится сообщение об авторских правах "IIS 7.0 Team - Alle Rechte vorbehalten", при наличии версии на испанском языке появится сообщение "Marca Registrada IIS 7.0 Team". Во всех остальных случаях сообщение об авторских правах будет "Copyright © IIS 7.0 Team". Способ проверки этого кода для изменения заголовка "Accept-Language" Internet Explorer отправляет к следующим действиям:
Часть II - Тестирование imageCopyrightHandler Как только обработчик авторских прав JPG начал работать, необходимо определить насколько быстро функционирует код. Инсталлируйте IIS6.0 Resource Kit Tool (Инструмент набора ресурсов IIS 6.0) для запуска тестов: 1. Загрузите по ссылке IIS 6.0 Resource Kit Tools и инсталлируйте их. Выполните пользовательскую установку и инсталлируйте только Web Capacity Analysis Tool (WCAT). WCAT является единственной функцией IIS 6.0 Resource Kit Tools, которую необходимо активировать для проведения тестов. Примечание: Из-за высокого уровня настройки безопасности Internet Explorer в Windows Server 2008, может появиться диалоговое окно безопасности, сообщающее о блокировке веб-сайта. Для загрузки IIS 6.0 Resource Kit добавьте add *.microsoft.com к списку надёжных сайтов. 2. Создайте папку с именем PERFTEST, например: md%systemdrive%\perftest 3. Контроллер WCAT запрашивает три входных файла:
Скриптовый файл Создайте новый файл с именем script.cfg в каталоге perftest и вставьте в него следующий контент: NEW TRANSACTION Примечание: Замените запись <your image name> (<имя вашего изображения>) именем файла JPG. При наличии многочисленных файлов JPG можно добавить новую транзакцию. Убедитесь, что каждой транзакции присваивается новый ClassID. Файл распределения Файл распределения сообщает WCAT, как будут оцениваться запросы. С двумя URL-адресами, представленными выше, выполним распределение 50/50. Каждый ClassID получает запрашиваемые 50% времени. Создайте файл с именем %systemdrive%\perftest\distribution.cfg в каталоге perftest и вставьте в него следующий контент: 1 50 Файл конфигурации Ниже представлены рекомендуемые параметры для теста:
Создайте новый файл с именем config.cfg в каталоге perftest и вставьте в него следующий контент: Warmuptime 5s 4. Запустите контроллер, выполнив следующие команды: Cd \perftest Как только подключаются все клиенты, будет запущен perf test. 5. Поскольку имеется только один клиент, откройте ещё одну командную оболочку с повышенным правом доступа и выполните следующее: "%programfiles%\IIS Resources\WCAT Client\wcclient.exe" localhost Для выполнения данной процедуры с несколькими клиентами установите NumClientMachines в config.cfg на более высокий номер и подключите клиентов к контроллеру с помощью команды wcclient, указав имя контроллера машины. Примечание: При выполнении данного действия на 64-разрядной версии Windows WCAT инсталлируется в каталоге "program files (x86)" , а для запуска WCATнужно использовать %programfiles(x86)% . 5. Вот результаты первого запуска: ######################################################################## Значимое число для просмотра представляет собой количество запросов в секунду. В данном случае имеется 14 запросов в секунду. Предостережение - чем больше файлов JPG, тем меньше запросов можно увидеть. Вполне возможно, что компьютер связан с сетью: IIS 7.0 не сможет больше обрабатывать запросы, поскольку сеть насыщается отправленными данными. Лучшие результаты файлов JPG можно увидеть при размере фотографии 200-300 КБ. Добавление кэширования вывода Код для динамической вставки сообщения об авторских правах является довольно медленным. Четырнадцать запросов в секунду не является быстрым для веб-сервера. IIS 7.0 выполняет тестирование гораздо лучше. Всё, что необходимо сделать, это создать политику кэширования, которая устанавливает URL-адреса с расширением JPG в кэш-память в режиме ядра. Вот как это можно добавить с политикой кэширования: Добавление политики кэширования с помощью IIS 7.0 Management Tool (инструмента управления IIS 7.0)
Примечание: Пользовательский интерфейс кэширования выхода недоступен в версиях до Windows Vista Service Pack 1. Добавление политики кэширования с помощью командной строки Для выполнения той же самой процедуры с помощью инструмента appcmd введите следующую команду: %windir%\system32\inetsrv\appcmd set config "Default Web Site/pictures" Повторите запуск выполнения, чтобы увидеть, что и как надо изменить в параметрах конфигурации. 1. Запустите контроллер, выполнив следующие команды: Cd \perftest 2. Запустите клиента с помощью следующего действия: "%programfiles%\IIS Resources\WCAT Client\wcclient.exe" localhost Примечание: При выполнении данного действия на 64-разрядной версии Windows WCAT инсталлируется в каталоге "program files (x86)" , при этом для запуска WCATнужно использовать %programfiles(x86)% . Вывод данных по образцу ######################################################################## Улучшенные способы кэширования вывода Счётчики Для уточнения производительности в выходном кэше посмотрите на счётчик кэширования вывода на "Reliability and Performance Monitor" ("Мониторе надёжности и производительности"). Существует много интересных счётчиков. Вот один пример того, как использовать "Монитор надёжности и производительности" вместе с кэшированием вывода.
Можно увидеть, что число кэшированных URI увеличивается в зависимости от количества запрашиваемых пунктов во время тестирования. Процедура кэширования в режиме ядра IIS Кэширование вывода IIS 7.0 поддерживает две политики кэширования. Политика кэширования вывода в пользовательском режиме использует кэш, который находится в рабочем процессе IIS 7.0. Другая политика кэширования представляет собой политику кэширования в режиме ядра, при которой кэш-память находится в HTTP.SYS, драйвере режима ядра. Кэширование контента в режиме ядра позволяет веб-сайту проходить быстрее. Модифицируйте конфигурацию приложения фотографий для использования кэширования в режиме ядра. Вот как выглядит текущая конфигурация (%systemdrive%\inetpub\wwwroot\pictures\web.config): <?xml version="1.0" encoding="UTF-8"?> Теперь измените её для использования кэширования в режиме ядра: 1. Откройте %systemdrive%\inetpub\wwwroot\pictures\web.config 2. Измените настройку <caching> на следующее: <caching> Можно увидеть, что атрибут varyByHeaders больше не используется. Это происходит потому, что kernelModeCache не поддерживает некоторые функции, которые поддерживаются при кэшировании вывода в пользовательском режиме. Ограничения кэширования вывода в режиме ядра Есть два существенных различия между кэшированием вывода в пользовательском режиме и в режиме ядра.
Поиск сбоя в кэшировании Failed Request Event Buffering (FREB) (Буферизация события неудачного запроса) является лучшим способом выяснения, был ли кэширован тот или иной запрос. FREB даёт информацию о причинах невыполненного кэширования. Вот пример из журнала регистрации FREB. В этом случае, событие HTTPSYS_CACHEABLE говорит о том, что запрос не получит кэширование, потому что кэширование в режиме ядра невозможно. Для получения более подробной информации о том, как работать с FREB см.this IIS.NET article Используйте следующую команду для определения, какой контент кэшируется в режиме ядра: netsh http show cachestate Сложности кэширования Даже при активации кэширование вывода IIS7.0 не сразу кэширует запрос. Запрос должен быть сделан несколько раз, прежде чем IIS 7.0 примет его в качестве "cache worthy" ("заслужающего внимания для кэширования"). Настройку значения, заслужающего внимания для кэширования, можно выполнить в разделе ServerRuntime, описанного в MSDN article. Два свойства, определяющие привлекательность для кэширования, представлены как frequentHitTimePeriod и frequentHitThreshold. Запрос кэшируется только в случае, если большое количество запросов <frequentHitThreshold> для кэшируемых URL-адресов приходят во время <frequentHitTimePeriod>. Настройка по умолчанию для frequentHitTimePeriod составляет 10 секунд. Настройка по умолчанию для frequentHitThreshold составляет 2 секунды. Кэширование наиболее популярных страниц В приведённом выше примере все файлы с расширением JPG помещаются в кэш-память. Это не всегда работает, потому что иногда есть желание выбрать и поместить только специфические документы в кэширование вывода. Вот как это можно сделать с помощью наиболее часто запрашиваемой страницы, документа по умолчанию:
Резюме Использование функции кэширования вывода IIS 7.0 для полу-динамического контента может улучшить веб-сайт. Можно увидеть значительное повышение производительности и пропускной способности. Простого изменения конфигурации достаточно, чтобы воспользоваться этой функцией. |