Обновлять каждые 5 секунд - как кешировать s3 файлы? - PullRequest
0 голосов
/ 08 ноября 2019

Я храню файлы изображений моей пользовательской модели на s3. Мой веб-интерфейс получает новые данные из серверной части (nodeJS) каждые 5 секунд. В каждой из этих выборок извлекаются все пользователи, что включает получение файла изображения из s3. Как только приложение масштабируется, это приводит к огромному количеству запросов на s3 и высокой стоимости, поэтому я полагаю, что кэширование файлов на сервере имеет смысл, так как они редко меняются после загрузки.

Как бы я это сделал? Кэшировать файл, скачанный с s3, в локальную файловую систему сервера и загружать его снова только в случае новой загрузки? Или есть лучший механизм для этого?

В качестве альтернативы, когда я устанавливаю заголовок кэша для файлов s3, они по-прежнему выбираются каждый раз, когда я вызываю s3.getObject, или это уже достигает того, что я пытаюсьделать? * * 1006

1 Ответ

0 голосов
/ 11 ноября 2019

Вы были правы с точки зрения стоимости, которую CloudFront не улучшит. Я вводил в заблуждение.

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

Cache-control = max-age=172800

Вы можете сделать это в консоли или, например, через aws cli.

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

Проверка кэшированных ответов с помощью ETags TL; DR Сервер использует HTTP-заголовок ETag для передачи токена проверки. Маркер проверки включает эффективные проверки обновления ресурса: данные не передаются, если ресурс не изменился.

Если вы запрашиваете файлы с помощью метода s3.getObject, он все равно выполнит запрос, поэтому он загрузитСнова файл.


Нажатие не запрашивая:

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

---

Не так эффективно с точки зрения затрат, более сфокусирован на скорость.

Вы можете использовать CloudFront какCDN для вашего S3 ведра. Это позволит вам быстрее получить файл, а также CloudFront будет обрабатывать кэш для вас.

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

Из документов :

Хранение статического содержимого с помощью S3 дает много преимуществ. Но чтобы помочь оптимизировать производительность и безопасность вашего приложения при эффективном управлении затратами, мы рекомендуем вам также настроить Amazon CloudFront для работы с корзиной S3 для обслуживания и защиты контента. CloudFront - это сеть доставки контента (CDN), которая обеспечивает безопасное и масштабное размещение статического и динамического веб-контента, видеопотоков и API-интерфейсов по всему миру. В принципе, доставка данных из CloudFront может быть более экономичной, чем доставка данных из S3 непосредственно вашим пользователям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...