Зачем вам загружать активы прямо на S3? - PullRequest
2 голосов
/ 21 июня 2010

Я видел довольно много примеров кода / плагинов, которые продвигают загрузку ресурсов непосредственно в S3.Например, если у вас есть пользовательский объект с аватаром, поле загрузки файла будет загружено непосредственно в S3.

Единственный способ, которым я вижу это возможным, - это если пользовательский объект уже создан в базе данных и вашS3 bucket + path это что-то вроде

user_avatars.domain.com/some/id/partition/medium.jpg

Но тогда, если бы у вас был тег изображения, который пытался получить доступ к этому URL, когда аватар не был загружен, это дало бы плохой результат.Как бы вы справились с проверкой на существование?

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

Кроме того, ваши проверки будут сняты.

У меня возникают проблемы при мысли о ситуациях, когда прямая загрузка в S3 (или любое облако) является хорошей идеей, и я надеялся, что люди смогут уточнить правильное использованиеслучаи, или скажите мне, почему моя логика неверна.

Ответы [ 3 ]

3 голосов
/ 27 сентября 2010

Если вы размещаете свое Rails-приложение на Heroku, причина вполне может быть в том, что Heroku не разрешает загрузку файлов размером более 4 МБ:
http://docs.heroku.com/s3#direct-upload

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

3 голосов
/ 21 июня 2010

Зачем платить за хранение / пропускную способность / резервное копирование / и т.д.когда вы можете заставить кого-то в облаке справиться с этим за вас?

S3 (и другие опции облачного хранилища) справятся со всеми вашими головными болями.Вы получаете все необходимое хранилище, хорошую распределительную сеть (почти наверняка лучше, чем у вас самих, если вы не платите за премиальный CDN) и резервные копии.

Разрешение пользователям загружать файлы напрямую вS3 снимает с вас еще большую нагрузку.Я вижу проблемы с отслеживанием, но S3 довольно легко справляется с этой ситуацией.Если вы посмотрите на методы прямой загрузки, вы увидите, что вы можете принудительно перенаправить при успешной загрузке.

Затем Amazon передаст обработчику перенаправления следующее: bucket, key, etag

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

Проверьте эту ссылку для получения подробной информации: Amazon S3: загрузка через браузер с использованием POST

0 голосов
/ 08 марта 2013

Помните, как работают веб-серверы.

Если вы не используете такую ​​асинхронную веб-настройку, которую вы могли бы достичь с помощью Node.JS или Erlang (всего 2 примера), то каждый запрос на загрузку, который ваше веб-приложение обслуживает, связывает весь процесс или поток, пока файл загружается .

Представьте, что вы загружаете файл размером несколько мегабайт. Большинство интернет-пользователей не имеют чрезвычайно быстрых обратных ссылок, поэтому ваш веб-сервер тратит много времени, ничего не делая. Хотя он ничего не делает, он не может обслуживать любые другие запросы. Это означает, что ваши пользователи начинают получать длинные задержки и / или сообщения об ошибках от сервера. Это означает, что они начинают использовать какой-то другой сайт, чтобы сделать то же самое. Вы всегда можете запустить больше процессов и потоков, но каждый из них требует дополнительной памяти, что в конечном итоге означает дополнительные $.

Выполняя прямую загрузку на S3, помимо экономии пропускной способности, о которой упоминал Джастин Нисснер, и обходного пути Heroku, о котором говорил Томас Уотсон, вы позволяете Amazon беспокоиться об этой проблеме. У вас может быть однопроцессный веб-сервер, эффективно обрабатывающий очень большие загрузки, поскольку он передает эту реальную функциональность Amazon.

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

Редактировать: исправление опечаток

...