Общие сведения о локальном кэше службы приложений Azure

Примечание.

Локальный кэш не поддерживается в приложениях-функциях и контейнерных приложениях Службы приложений, например в Контейнерах Windows или в Службе приложений в Linux. Версия локального кэша, доступная для этих типов приложений — это кэш приложения.

Содержимое Службы приложений Azure хранится в Службе хранилища Azure; оно доступно в долгосрочном режиме в общей папке содержимого. Эта схема рассчитана на работу с различными приложениями и имеет следующие атрибуты:

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

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

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

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

Примечание.

Если вы используете Java (Java SE, Tomcat или JBoss EAP), то по умолчанию артефакты Java — файлы JAR, WAR и EAR — копируются локально в рабочую роль. Если приложение Java также зависит от доступа только для чтения к другим файлам, задайте для JAVA_COPY_ALL значение true, чтобы эти файлы также копировались. Если локальный кэш включен, он имеет приоритет над этим улучшением для Java.

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

  • Папка D:\home содержит локальный кэш, который создается в экземпляре виртуальной машины при запуске приложения. В папке D:\local по-прежнему размещается временное хранилище конкретной виртуальной машины.
  • Локальный кэш содержит данные разового копирования папок общего хранилища содержимого /site и /siteextensions соответственно в папках D:\home\site и D:\home\siteextensions. Файлы копируются в локальный кэш при запуске приложения. Размер обеих папок каждого приложения по умолчанию ограничен 1 МБ, но может быть увеличен до 2 ГБ. Обратите внимание, что по мере увеличения размера кэша загрузка кэша займет больше времени. Если вы увеличили ограничение локального кэша до 2 ГБ, а размер копируемых файлов превышает максимальный (2 ГБ), служба приложений автоматически игнорирует локальный кэш и считывает данные из удаленной общей папки.

Важно!

Если скопированные файлы превышают определенный предел размера локального кэша или если ограничение не определено, операции развертывания и переключения могут завершиться ошибкой. Дополнительные сведения см. в разделе "Вопросы и ответы ".

  • Локальный кэш доступен для чтения и записи. Но при перемещении виртуальных машин или перезапуске приложения все изменения в кэше отменяются. Не следует использовать локальный кэш для приложений, которые хранят критически важные данные в хранилище содержимого.
  • Папки D:\home\LogFiles и D:\home\Data содержат файлы журналов и данные приложения. Две подпапки хранятся локально в экземпляре виртуальной машины и периодически копируются в общее хранилище содержимого. Приложения могут сохранять файлы журналов и данные, записывая их в эти папки. Хоть копирование в общее хранилище содержимого выполняется самым оптимальным образом, файлы журналов и данные могут быть потеряны из-за внезапного сбоя экземпляра виртуальной машины.
  • На потоковую передачу журналов влияет оптимальное копирование. Вы можете наблюдать задержку в потоковой передаче журналов около одной минуты.
  • В общем хранилище содержимого присутствуют некоторые изменения структуры папок LogFiles и Data для приложений, которые используют локальный кэш. Теперь в них есть подпапки, в которых используется следующий шаблон именования: "уникальный идентификатор + метка времени". Каждая подпапка соответствует экземпляру виртуальной машины, на котором запущено приложение.
  • Остальные папки в D:\home остаются в локальном кэше и не копируются в общее хранилище содержимого.
  • Развертывание приложений через любой поддерживаемый метод публикуется напрямую в устойчивое общее хранилище содержимого. Чтобы обновить папки D:\home\site и D:\home\siteextensions в локальном кэше, необходимо перезапустить приложение. Чтобы организовать эффективный жизненный цикл, см. инструкции далее в этой статье.
  • На веб-сайте диспетчера служб в качестве представления содержимого по умолчанию по-прежнему отображается общее хранилище содержимого.

Включение локального кэша в службе приложений

Примечание.

Локальный кэш не поддерживается в ценовых категориях F1 или D1.

Локальный кэш настраивается с помощью нескольких зарезервированных параметров приложения. Эти параметры приложения можно настроить следующими способами.

Настройка локального кэша на портале Azure

Включите локальный кэш для каждого веб-приложения с помощью этого параметра приложения: WEBSITE_LOCAL_CACHE_OPTION = Always

Azure portal app settings: Local Cache

Настройка локального кэша с помощью Azure Resource Manager

...

{
    "apiVersion": "2015-08-01",
    "type": "config",
    "name": "appsettings",
    "dependsOn": [
        "[resourceId('Microsoft.Web/sites/', variables('siteName'))]"
    ],

    "properties": {
        "WEBSITE_LOCAL_CACHE_OPTION": "Always",
        "WEBSITE_LOCAL_CACHE_SIZEINMB": "1000"
    }
}

...

Изменение размера локального кэша

По умолчанию размер локального кэша равен 1 ГБ. Он включает папки /site и /siteextensions, которые копируются из хранилища содержимого, а также любые другие локально созданные журналы и папки данных. Чтобы увеличить это ограничение, используйте параметр приложения WEBSITE_LOCAL_CACHE_SIZEINMB. Размер кэша для каждого приложения можно увеличить до 2 ГБ (2000 МБ). Обратите внимание, что по мере увеличения размера локального кэша, загрузка кэша займет больше времени.

Рекомендации по использованию локального кэша службы приложений

Мы рекомендуем использовать локальный кэш в сочетании с функцией промежуточных сред .

  • Добавьте прикрепленный параметр приложения WEBSITE_LOCAL_CACHE_OPTION со значением Always в рабочий слот. Если вы используете параметр WEBSITE_LOCAL_CACHE_SIZEINMB, также добавьте его в рабочий слот в качестве прикрепленного параметра.
  • Создайте промежуточный слот и выполните в нем публикацию. Если вы используете локальный кэш для рабочего слота, настройте промежуточный слот так, чтобы он не использовал локальный кэш. Таким образом упрощается жизненный цикл построения, развертывания и тестирования для промежуточного слота.
  • Протестируйте свой веб-сайт относительно промежуточной области.
  • По завершении выполните операцию переключения между промежуточным и рабочим слотами.
  • Прикрепленные параметры имеют имена и привязаны к слоту. Поэтому при переключении между промежуточным и рабочим слотами промежуточный слот наследует параметры локального кэша приложения. Через несколько минут новый рабочий слот будет запущен с локальным кэшем и будет разогрет после переключения. После завершения переключения слотов рабочий слот будет работать с локальным кэшем.

Вопросы и ответы

Что делать, если превышено ограничение размера локального кэша?

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

 Размер локального кэша Копированные файлы Результат
≤ 2 ГБ ≤ размер локального кэша Считывается из локального кэша.
≤ 2 ГБ > Размер локального кэша Считывает из удаленной общей папки.
Примечание. Операции развертывания и переключения могут завершиться ошибкой.

Можно ли использовать локальный кэш с моим приложением?

Да, если приложению требуется высокопроизводительное надежное хранилище содержимого, а также если это веб-приложение не сохраняет в хранилище важные данные во время работы, а его общий размер не превышает 2 ГБ. Чтобы узнать общий размер папок /site и /siteextensions, используйте расширение сайта Azure Web Apps Disk Usage.

Как узнать, переключился ли мой веб-сайт на использование локального кэша?

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

Новые изменения только что опубликованы, но они еще не отразились в моем приложении. Почему?

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

Примечание.

Параметр развертывания запуск из пакета несовместим с локальным кэшем.

Где находятся мои журналы?

Если вы используете локальный кэш, журналы и папки данных выглядят немного иначе. Однако структура вложенных папок остается прежней, за исключением того, что они размещаются во вложенной папке с именем в формате "уникальный идентификатор виртуальной машины + метка времени".

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

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

Исключается ли при использовании локального кэша копирование каких-либо каталогов на более быстрый локальный диск?

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

Как освободить журналы локального кэша после операции управления сайтом?

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

Почему Служба приложений начинает отображать ранее развернутые файлы после перезапуска, когда включен локальный кэш?

Если Служба приложений начинает отображать ранее развернутые файлы при перезапуске, проверка для присутствия параметра приложения — "WEBSITE_DISABLE_SCM_SEPARATION=true". После добавления этого параметра все развертывания с помощью KUDU начинают запись на локальную виртуальную машину, а не в постоянное хранилище. Рекомендации, приведенные в этой статье, следует использовать, когда развертывание всегда должно выполняться в промежуточном слоте, в котором не включен локальный кэш.

Дополнительные ресурсы

Справка по переменным среды и параметрам приложений