Настройка кэширования выходных данных IIS 7

Тали Смит

службы IIS (IIS) включает функцию кэша вывода, которая может кэшировать динамическое содержимое PHP (или выходные данные из Microsoft® ASP.NET или классической ASP или других динамических страниц) в памяти. Это может привести к огромным улучшениям производительности, так как скрипт, используемый для создания динамических выходных данных, не требуется выполняться для каждого запроса. Кэш может отличать выходные данные, кэшированные на основе значений строки запроса, а также заголовков HTTP, отправляемых от клиента на сервер. Кэш также интегрирован с драйвером режима ядра Http.sys, повышая производительность.

Когда следует использовать кэширование выходных данных

Веб-содержимое можно разделить на две основные категории: статическое содержимое и динамическое содержимое.

  • Статическое содержимое не изменяется с запроса на запрос. Содержимое, возвращаемое в веб-браузер, всегда одинаково. Примерами статического содержимого являются HTML,JPG или GIF-файлы.
  • Динамическое содержимое — это выходные данные, которые изменяются при каждом запросе. Примеры включают ASP.NET или содержимое PHP.

Между этими двумя категориями является полудинамический контент. Представьте себе динамическую ASP.NET страницу, которая выполняет запрос базы данных. Нет причин выполнять этот запрос по каждому запросу, если базовые таблицы базы данных изменяются редко.

СЛУЖБА IIS автоматически кэширует статическое содержимое (например, HTML-страницы, изображения и таблицы стилей), так как эти типы содержимого не изменяются с запроса на запрос. СЛУЖБА IIS также обнаруживает изменения файлов при внесении обновлений, а службы IIS очищают кэш по мере необходимости.

Функция кэширования выходных данных IIS предназначена для полудинамичного содержимого. Он позволяет кэшировать статические ответы для динамических запросов и повысить масштабируемость.

Обратите внимание, что не каждая динамическая страница может воспользоваться преимуществами кэша выходных данных. Страницы с высокой персонализированной (например, корзиной или транзакциями электронной коммерции) не являются хорошими кандидатами, так как динамические выходные данные, скорее всего, не запрашиваются повторно, а память, используемая для кэширования содержимого, будет потеряна. Содержимое, выводимое в результате запроса типа POST на HTML-форму, также недоступно для кэширования.

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

Выбор политик кэша

IIS поддерживает два типа политик кэша:

  • varyByQuerystring, в котором URL-адрес совпадает, но значение строки запроса зависит.
  • varybyHeaders, который может различать кэш на основе заголовков HTTP, отправляемых от клиента на сервер.

Недопустимое кэширование

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

IIS поддерживает два способа отмены динамического содержимого:

  • Используйте простой период ожидания. Свойство конфигурации — CacheForTimePeriod.
  • Обнаружение изменения базового ресурса — свойство конфигурации — CacheUntilChange. Используйте этот тип схемы недопустимости только в том случае, если требуется очистка кэша при изменении базового ресурса.

Настройка готовности кэша

Даже если включить кэширование выходных данных, службы IIS не сразу кэшируют запрос. Он должен запрашиваться несколько раз, прежде чем IIS рассматривает запрос, который должен быть "достойным кэша". Готовность кэша можно настроить с помощью раздела ServerRuntime, описанного в статье "Класс ServerRuntimeSection".

Два свойства определяют готовность кэша:

  • frequentHitTimePeriod
  • frequentHitThreshold

Запрос кэшируется только в том случае, если в пределах кэшированного URL-адреса поступает <frequentHitTimePeriod>больше <frequentHitThreshold> запросов. Значение по умолчанию frequentHitTimePeriod — 10 секунд. Значение по умолчанию frequentHitThreshold — 2 попадания.

Настройка кэширования выходных данных с помощью диспетчера IIS

Кэш довольно легко настроить с помощью функции пользовательского интерфейса в новом средстве администрирования IIS.

  1. В меню "Пуск" щелкните Администратор istrative Tools и выберите диспетчер службы IIS (IIS).

  2. В представлении дерева слева найдите приложение.

  3. Выберите пункт меню "Кэширование выходных данных".

  4. В правом столбце нажмите кнопку "Добавить " в меню "Действие ". Здесь можно добавить правило кэширования выходных данных.

  5. Например, в поле расширения имени файла введите .php и выберите кэширование в режиме пользователя.

  6. Нажмите кнопку "Дополнительно", а затем выберите проверка переменные строки запроса.

  7. Введите соответствующие переменные в текстовом поле строк запроса.

    Снимок экрана: диалоговое окно

    Рис. 1. Пример кэширования выходных данных

Настройка кэширования выходных данных с помощью файла 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 и работает для всех типов приложений.

Проверка счетчиков производительности

Чтобы увидеть производительность в кэше выходных данных, можно просмотреть счетчики кэша выходных данных в мониторе надежности и производительности.

  1. В меню "Пуск" щелкните Администратор istrative Tools, а затем щелкните "Надежность" и Монитор производительности. (В Windows Vista® или Windows® 7 Администратор istrative Tools находится в панель управления.)
  2. Выберите Монитор производительности в представлении дерева справа и щелкните на + панели инструментов.
  3. Перейдите к счетчику кэша веб-служб, а затем щелкните его, чтобы открыть его.
  4. Добавьте счетчик кэшированных URL-адресов.

При выполнении теста производительности можно увидеть, что число кэшированных URI увеличивается с числом, если запрашиваются элементы.

Использование кэширования в режиме ядра

Кэш выходных данных IIS поддерживает две политики кэша:

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

Кэширование содержимого в режиме ядра позволяет ускорить производительность веб-сайта. Пример использования кэширования в режиме ядра можно найти в статье кэширования выходных данных IIS.

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

  • Кэш выходных данных в режиме ядра не поддерживает модули и функции, которые должны выполняться в пользовательском режиме, таких как проверка подлинности или авторизация. Например, если включены такие схемы проверки подлинности, как обычная проверка подлинности или проверка подлинности Windows®, политика кэша не работает. Содержимое обслуживается, но не кэшируется. Дополнительные сведения о том, почему ответы могут не кэшироваться в режиме ядра, см. в этой статье базы знаний.
  • Кэш выходных данных в режиме ядра поддерживает атрибут varyByHeaders, но не отличаетсяByQuerystring.

Устранение неполадок с кэшированием

Буферизация событий неудачных запросов (FREB) — лучший способ выяснить, кэшируется ли ваш запрос; Вы также можете узнать, почему запрос не кэшируется. Например, событие HTTPSYS_CACHEABLE в журнале FREB может сказать, что запрос не кэшируется, так как кэш в режиме ядра не включен.

Следующая команда позволяет узнать, какое содержимое кэшируется в режиме ядра:

netsh http show cachestate

Кэш выходных данных можно настроить для кэширования только страницы по умолчанию (наиболее часто запрашиваемая страница):

  1. Создайте файл с именем default.aspx в каталоге приложения %systemdrive%\inetpub\wwwroot\<your application> и добавьте следующий код:

    <%=DateTime.Now%>
    
  2. В меню "Пуск" щелкните Администратор istrative Tools и выберите диспетчер службы IIS (IIS).

  3. Используйте представление дерева слева, чтобы перейти к приложению.

  4. Щелкните "Представление содержимого" в нижней части страницы.

  5. Выберите документ по умолчанию (например, страницу Default.aspx).

  6. В меню "Действия" справа нажмите кнопку "Перейти к представлению функций". Каждый настроенный параметр теперь применяется только к документу по умолчанию.

  7. Откройте параметр правил кэширования выходных данных.

  8. Добавьте .aspx в виде расширения файла.

  9. Выберите кэширование в режиме ядра, выберите интервал времени, включите кэшированные файлы монитора и введите интервал времени, например 00:00:30.

  10. Перейдите к http://localhost//<your application> Обозреватель ® Windows® Internet. Постоянно обновляя страницу (нажмите клавиши CTRL+F5, чтобы убедиться, что вы не используете кэш браузера), вы увидите, что время не изменяется в течение 30 секунд.

Примечание.

Эта статья основана на информации из статьи "Кэширование выходных данных IIS 7 для динамического содержимого — ускорение приложений ASP и PHP" Билла Стайплса, опубликованного 2 мая 2007 года.

См. также