Перейти к основному содержимому

Кэш и хранилища

Два независимых уровня​

Быстрый уровень: 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 у сервиса сейчас нет.