Как Instagram использует Amazon S3?


Мне нужно некоторое представление об инженерии 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.

Author: CyberJunkie, 2012-09-22

1 answers

На самом деле этот 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 разместил бы все файлы в одной огромной корзине, это, скорее всего, самый разумный способ сделать это, а затем, когда вы станете большим, вы будете копировать части корзин и распределять их по регионам и субрегионам в зависимости от спроса или отправлять их в cloudfront, как это делает Vimeo.

Редактировать

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

Однако в этом есть огромные преимущества. Как и репликация на пользователя и cloudfront на пользователя, однако есть и недостатки:

  • Множество отдельных http-запросов, когда отображается много изображений пользователей, достаточно справедливо, что это все к домену S3, но я не уверен, сколько поддоменов вам разрешено для SEO и браузеров, чтобы воспользоваться этим (я думаю, 6 в IE6).

  • Резервное копирование и репликация могут быть сложнее, так как вам нужно будет выполнять их для каждого пользователя, а не для одной корзины.

  • Перемещение ведер в cdn и т. Д. Может быть проблематичным, так как вам снова придется делать это для каждого пользователя.

  • Мне кажется, я помню, что видел максимальный предел для ведер в S3, поэтому я не уверен, как это будет эффективно масштабироваться тбх.

 5
Author: Sammaye, 2012-09-23 09:55:39