Мне нужно некоторое представление о разработке Instagram при загрузке файлов на Amazon S3. Я только начинаю с S3, и я думаю, что Instagram – хорошая модель для следования, потому что они загружают тысячи изображений каждый день. Мое приложение несколько похоже. Пользователи загружают изображения, могут удалять свои собственные изображения, а все изображения являются общедоступными.
В моем проекте я создаю объекты с префиксом папки для организации загрузки для каждого пользователя. например, username/filename
Мои объектные URL-адреса выглядят следующим образом:
https://s3.amazonaws.com/my_bucket/username/28c3d2c6ec098bd077d6b9cb5f13869d.jpg
но Instagram:
http://distilleryimage7.s3.amazonaws.com/f4947c1004ca11e2a0c81231380ff428_7.jpg
Я предполагаю, что distilleryimage7
– это имя ведра. Я не уверен, какая польза от этого типа URL. Я также предполагаю, что Instagram не использует ведро «файлы» и сохраняет все изображения в одном ведре.
Пожалуйста, поделитесь любыми передовыми методами в S3.
Этот URL-адрес на самом деле тот, который по умолчанию поддерживается S3. Для США и большинства ковшей вы можете сделать специальное разрешение DNS, которое позволяет использовать либо:
http://my_bucket.my_domain.com
С некоторыми изменениями к вашим собственным записям или:
http://my_bucket.s3.amazonaws.com
Если вы не хотите изменять какие-либо ваши записи A (небольшой учебник: http://docs.amazonwebservices.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs ).
Преимущества этого типа URL-адреса, конечно же, являются общей мыслью о том, что использование субодоменов для определенных активов ускоряет загрузку в браузере.
Конечно, это исправление. Один из них, используемый другими сайтами, такими как Facebook, Twitter и Youtube, – это использовать совершенно другой домен для такого рода вещей. Это помогает, так как это удаленный домен, специально предназначенный для этих активов (в этих доменах не должно быть файлов cookie).
Таким образом, это не самая лучшая практика S3, но большая часть веб-разработки в целом и охватывает гораздо более широкий взгляд на то, как программировать и размещать сайт в рабочей среде.
Да Instagram будет размещать все файлы в огромном одном ведре, это, скорее всего, самый разумный способ сделать это, а затем, когда вы получите большой, вы будете реплицировать части ковшей и разделить их по регионам и субрегионам, зависящим от спроса или ping их к облачному, как Vimeo.
Прочитав это дальше, я понял, что Instagram не размещает все в одном ведре. Немного странно, тем более, что ведро должно быть однозначно названо по всему S3, включая учетные записи других народов. Таким образом, они, вероятно, не используют имя пользователя напрямую, если это имя ведра еще не было принято.
Тем не менее, есть огромные преимущества. Подобно репликации для каждого пользователя и облачного интерфейса для каждого пользователя, однако есть и недостатки:
Множество отдельных HTTP-запросов, когда отображаются многие изображения пользователей, достаточно справедливо, что это все для домена S3, но я не уверен, сколько поддоменов вам разрешено для SEO и браузеров, чтобы воспользоваться им (я думаю, 6 в IE6).
Резервное копирование и репликация могут быть сложнее, так как вам нужно будет делать для каждого пользователя не для одного ведра.
Перемещение ведер в cdn и т. Д. Может быть проблематичным, поскольку вы снова должны делать это на пользователя.
Я думаю, что я помню, как я видел максимальное ограничение для ведер в S3, поэтому я не уверен, как это будет эффективно масштабироваться tbh.