Можем ли мы использовать хранилище BLOB-объектов Azure для ImageCache в ImageResizer?

Мы в основном используем рекомендованную облачную архитектуру, в которой исходные изображения хранятся в хранилище BLOB-объектов Azure, imageresizer работает в службе приложений Azure, а Azure CDN - это уровень CDN.

Тем не менее у нас возникла проблема с ImageResizer v3, слотами для развертывания службы приложений Azure и DiskCache.

Мы используем промежуточный слот в нашей службе приложений Azure, чтобы предотвратить сбои. Мы также используем плагин DiskCache. Без какой-либо конфигурации imagecache записывается в D:\home\site\wwwroot\imagecache\, который зависит от слота.

Это порождает две проблемы:

  1. Когда мы меняем слоты, используемый кеш изображений устарел, и многие изображения будут отсутствовать.
  2. У нас всегда есть устаревший кэш изображений, занимающий дисковое пространство в нашем плане обслуживания приложений, наш советник из Microsoft рекомендовал использовать хранилище BLOB-объектов вместо виртуальной локальной файловой системы для DiskCache.

Я заметил, что нет BlobCachePlugin или S3CachePlugin, и мне было интересно, есть ли для этого веские причины.

Мои вопросы:

  1. Есть ли причина не хранить кэш изображений в хранилище BLOB-объектов Azure с помощью пользовательского Blob StorageCachePlugin, который реализует интерфейс ICache?
  2. Если есть веская причина, какую альтернативную архитектуру вы посоветуете, чтобы избежать проблем со слотами для развертывания?

2 ответа

Решение

Кэши должны быть с низкой задержкой. Если поместить кэш в хранилище BLOB-объектов, то даже попадание в кэш будет работать ужасно, вероятно, добавив 800-1800 мс на запрос. Если бы сервер Redis был доступен, есть способы сделать эту работу лучше, но он все равно не будет работать так же хорошо, как использование хранилища с низкой задержкой.

Решения проблемы холодного кэша:

  1. Разогрейте промежуточный слот, дублируя реальные запросы к нему (идеальная ситуация, так как он также нагревает кэши без IR).
  2. Если это невозможно, то вы можете рассмотреть какую-то запланированную копию между imagecache папки на каждом сервере, который "только добавляет" файлы. Не пытайтесь изменять или удалять файлы или каталоги, которые активно обслуживаются.
  3. Используйте распределенную файловую систему с низкой задержкой или общий сетевой диск с низкой задержкой. Однако измерьте задержку, потому что это будет проблемой, если у вас нет очень хорошего сетевого соединения между серверами. Существуют хранилища BLOB-объектов, которые могут быть достаточно быстрыми, чтобы использовать их для кэширования, но обычно только тогда, когда вы сами управляете ими, чтобы обеспечить низкую задержку.

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

Если у вас есть CDN перед вашим веб-приложением, то нужен ли вам вообще плагин DiskCache (или запрошенное кеширование хранилища BLOB-объектов)?

После того как изображение было обработано веб-приложением, оно затем кэшируется одним из пограничных серверов CDN, поэтому для чего предназначено его кэширование в хранилище веб-приложений /BLOB-объектов?

Другие вопросы по тегам