Настройка кэширования вывода IIS 7
Введение Internet Information Services 7 (IIS 7) включает в себя функцию кэширования вывода, с помощью которой можно кэшировать в память динамический контент PHP (или вывод данных из Microsoft ® ASP.NET или классического ASP, или других динамических страниц). Это может принести огромное повышение производительности, поскольку скрипт, обычно создаваемый для динамического вывода данных, не нуждается в запуске для каждого запроса. Кэширование может изменить выводимые данные, которые кэшируется на основе значений строки запроса, а также заголовков HTTP, посылаемых от клиента к серверу. Кэширование также интегрируется с драйвером Http.sys в режиме ядра, повышая производительность. Когда использовать кэширование вывода Веб-контент можно разделить на две основные категории: статический и динамический.
Между этими двумя категориями существует полу-динамический контент. Представьте себе динамическую страницу ASP.NET, которая выполняет запрос базы данных. Нет никакого смысла выполнять этот запрос при каждом требовании, если основные таблицы базы данных изменяются нечасто. IIS автоматически кэширует статический контент (например, страницы HTML, изображения и титульные листы), так как эти типы контента не меняются от запрос к запросу. IIS также обнаруживает изменения в файлах при выполнении обновлений и очищает кэш-память по мере необходимости. Функция кэширования вывода IIS 7 направлена на полу-динамический контент. Это позволяет кэшировать статические ответы для динамических запросов и увеличить масштабируемость. Обратите внимание, что не все динамические страницы могут воспользоваться кэшированием вывода. Высоко персонализированные страницы (например, интернет-магазина или транзакций электронной торговли) не походят для этого, так как динамический вывод нельзя запросить повторно, и память, используемая для кэширования контента, будет бесполезной. Контент, который выводится в результате запроса типа POST в форму HTML, также не кэшируется. Лучшими кандидатами для кэширования вывода являются страницы, которые создают данные динамически, но вряд ли изменяются от запроса к запросу, основываясь на URL-адресе или информации заголовка. Например, фото галерея типа приложений, которые динамически меняют размер изображений для отображения на веб-странице, являются отличными кандидатами на кэширование вывода, поскольку кэширование данных сохраняется на сервере из-за необходимости повторного процесса изменения размера изображения для каждого запроса. Другим хорошим примером типа приложения, который может воспользоваться функцией кэширования вывода данных, может служить приложение "информационное табло". Выбор политики кэширования IIS поддерживает два типа политики кэширования:
Недействительное кэширование С динамическим контентом данные могут часто меняться и нужно очищать кэш, позволяя поступать новым данным и выполнять повторное кэширование. Обратите внимание, что даже если данные изменяются каждую секунду, они все ещё могут быть полезны для кэширования, сайт может получать сотни запросов в секунду и более, а кэширование может сократить обращения к базе данных для их получения, оберегая веб-сервер и сервер базы данных от дополнительной работы. IIS поддерживает два способа инвалидации динамического контента:
Настройка значения, достойного внимания для кэширования Даже при активации кэширования вывода IIS 7 не сразу кэширует запрос. Запрос должен быть заявлен несколько раз, прежде чем IIS посчитает запрос "достойным внимания". Настройку значения, достойного внимания для кэширования, можно выполнить в разделе ServerRuntime, описанного в Microsoft® Developer Network (MSDN®) MSDN article. Два свойства определяют значение, достойное внимания для кэширования:
Запрос кэшируется только в случае, если большое количество запросов <frequentHitThreshold> для кэшируемых URL-адресов приходят во время <frequentHitTimePeriod>. Настройка по умолчанию для frequentHitTimePeriod составляет 10 секунд. Настройка по умолчанию для frequentHitThreshold составляет 2 секунды. Настройка кэширования вывода с помощью IIS Manager Кэш довольно легко настроить с помощью функции пользовательского интерфейса в новом инструменте администрирования IIS.
Настройка кэширования вывода с помощью файла Web.config Можно также настроить функцию кэширования в локальный файл Web.config, который находится в каталоге контента. Ниже приведен пример конфигурации, необходимой для страницы ShowStockPrice.asp с параметром varyByQueryString параметра * (значения кэша всех уникальных вариаций параметров строки запроса) и интервалом в 1 секунду. <configuration> <location path="showStockPrice.asp"> <system.webserver> <caching> <profiles> <add varybyquerystring="*"location="Any" duration="00:00:01" policy="CacheForTimePeriod" extension=".asp"> </profiles> </caching> </system.webserver> </location> </configuration> При желании кэширования этих данных в ядро для более быстрого выполнения нужно просто изменить атрибут политики на kernelCachePolicy. Примечание: Microsoft ASP.NET уже включает в себя функцию кэширования вывода, данная функция IIS работает параллельно с кэш-памятью ASP.NET и действует для всех типов приложений. Проверка счётчиков Для уточнения производительности в выходном кэше посмотрите на счётчик кэширования вывода на мониторе надёжности и производительности.
При запуске тестирования производительности можно увидеть, что число кэшированных URI увеличивается с количеством запрашиваемых пунктов. Использование кэширования в режиме ядра Кэширование вывода IIS 7 поддерживает две политики кэширования:
Обратите внимание на наличие двух существенных различий между кэшированием вывода в пользовательском режиме и в режиме ядра.
Поиск сбоя в кэшировании Failed Request Event Buffering (FREB) является лучшим способом выяснить, действительно ли запрос кэширован. Можно также узнать, почему запрос не кэшируется. Например, событие HTTPSYS_CACHEABLE в журнале регистрации FREB может сообщить, что запрос не получает кэширования, так как в режиме ядра кэширование не выполняется. Используйте следующую команду для определения, какой контент кэшируется в режиме ядра: netsh http show cachestate Кэширование наиболее популярных страниц Существует возможность настроить кэширование вывода только страниц по умолчанию (наиболее часто запрашиваемые страницы):
Примечание: Данная статья написана на основе информации из статьи “IIS7 Output Caching for Dynamic Content - Speed Up Your ASP and PHP Applications” Билла Стейпелса, опубликованной 2 мая 2007г. Ссылки для дальнейшей информации |