Веб-Сервисы Amazon. Какой Подход Для Хранения Аватаров В S3 Имеет Наименьшую Стоимость?

  • Автор темы Asd3
  • Обновлено
  • 21, Oct 2024
  • #1

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

Однако они могут заменять свои аватары, что вызывает проблемы. Поскольку s3 распространяется на CloudFront, мне нужно сделать недействительным кеш для имени файла, когда они загружают свой новый аватар (поскольку он заменяет старый файл аватара). Но в случае с CloudFront аннулирование обходится дорого.

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

Другой вариант — вообще не использовать CloudFront, а просто загрузить в s3 и сделать корзину s3 общедоступной. Но проблема в том, что CloudFront гораздо щедрее в отношении затрат и сумм GET-запросов (2 000 000 в месяц с CloudFront и только 20 000 в месяц с корзинами S3).

По сути, у меня есть три варианта, и я не уверен, какой выбрать, учитывая вышеизложенное:

1) Замените файлы в s3, а затем сделайте файл недействительным в CloudFront.

  • Проблема: аннулирование стоит дорого

2) Просто добавьте больше файлов в корзину s3 и используйте CloudFront.

  • Проблема: старые, неиспользуемые аватары просто сидят и тратят место в сегменте 3

3) Не используйте CloudFront, а просто замените файл в s3 и затем обслуживайте его из корзины.

  • Проблема: CloudFront имеет более дешевые запросы GET и лучший пользовательский опыт с учетом задержки.

Редактировать: В данном случае я спрашиваю про AWS с s3 и CloudFront. Я хочу наиболее эффективно автоматизировать процесс, с помощью которого пользователь может загрузить аватар в мою серверную службу. В частности, меня смутила перезапись старых аватаров. Общий процесс «PreSigned URL -> Загрузить в s3 -> Распространить через CloudFront» кажется адекватным, но я не уверен, как учесть перезапись старых, больше не используемых файлов в этом плане, учитывая, что выбор кажется быть между дорогостоящим аннулированием или сохранением устаревших файлов.

#amazon-web-services #amazon-s3 #amazon-cloudfront #cache

Asd3


Рег
14 Dec, 2010

Тем
61

Постов
200

Баллов
535
  • 25, Oct 2024
  • #2

Для лучшей производительности присвоение имен многим небольшим файлам в корзине s3 может быть не лучшей идеей, если только user_id не является случайной строкой. Посмотрите, как работает алгоритм хеширования S3 https://aws.amazon.com/blogs/aws/amazon-s3-performance-tips-tricks-seattle-hiring-event/

Так что замена его случайным хеш-значением может быть не так уж и плоха. Конечно, вам нужно хранить хэш в профиле пользователя или вам нужно его из чего-то вычислить. Если вы добавите что-то вроде идентификатора профиля или временной метки последнего изменения, вы можете сделать sha1/md5 (userid+lastchanged), и если вы обновите временную метку, у вас будет хеш текущего аватара.

Старую можно просто удалить. CloudFront удалит его из своего кэша после истечения срока действия. https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html

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

Это своего рода вопрос программирования, но я понимаю вашу точку зрения: он очень специфичен для среды AWS и требует особых знаний о том, как работает инфраструктура.

 

O_kalinin


Рег
16 Mar, 2020

Тем
83

Постов
214

Баллов
639
Похожие темы Дата