Кэш и хранилища
Два независимых уровня
Быстрый уровень: RAM, Valkey, Memcached или none. Постоянное хранилище: disk или S3. Эти настройки комбинируются независимо.
Valkey и Memcached заменяют локальный RAM-кэш. При их отказе скрытый RAM-кэш не включается. Ошибка кэша допускает обработку через следующий уровень или исходник.
Минимальный disk pool
cache_pools:
local:
retention: 168h
max_entry_bytes: 52428800
write_timeout: 5s
memory:
backend: in_process
capacity_bytes: 536870912
max_entry_bytes: 5242880
ttl: 15m
storage:
backend: disk
directory: /cache/disk
capacity_bytes: 10737418240
min_free_bytes: 1073741824
Каталог disk pool обслуживает один процесс. Каталоги разных pools не должны пересекаться между собой и с исходниками. Для нескольких экземпляров используйте S3 и, если требуется, общий быстрый backend.
Три разных срока
| Настройка | Смысл |
|---|---|
retention | Максимальный срок хранения результата |
memory.ttl | Срок одного размещения в быстром уровне |
revalidate_after | Интервал проверки HTTPS-источника |
Попадание в кэш не продлевает TTL. Повторная валидация не продлевает retention. Изменения локального файла проверяются при запросах.
S3
В S3 сохраняются обычные WebP/AVIF-файлы и отдельный manifest с валидаторами и контрольной суммой. Сначала публикуется изображение, затем manifest. Отсутствующие или повреждённые объекты приводят к повторной обработке источника.
Для deployment выделите отдельный prefix. Нужны операции GetObject, PutObject, DeleteObject; у конкретного провайдера может потребоваться ограниченный ListBucket. Сервис не создаёт bucket и не меняет его policy.
Lifecycle должен сохранять объекты дольше максимального retention с запасом. Для versioned bucket настройте удаление предыдущих версий и delete markers отдельно. Credentials передавайте через окружение или стандартную цепочку AWS credentials.
Внешний CDN
CDN можно поставить перед HTTP-сервисом. Учитывайте согласованный формат в ключе кэша и Vary: Accept. Прямая доставка из S3 требует отдельной схемы URL и авторизации: готового presigned redirect или публичного purge API у сервиса сейчас нет.