как гласит заголовок моего вопроса, я хотел бы знать, является ли это хорошей практикой или нет,
Я знаю, что могу смонтировать его в экземпляре EC2, но мне было интересно, может ли это вызвать некоторые проблемы, поскольку я буду добавлять дополнительные экземпляры для масштабирования своего приложения; у вас есть опыт с этим?
Я использую S3, чтобы разрешить загрузку файлов через скрипт PHP, поэтому в основном вопрос:
Является ли хорошей практикой использование mouting или есть более эффективные способы обработки пользовательских файлов?
заранее спасибо
php
amazon-ec2
amazon-s3
Энрико Туттобене
источник
источник
Ответы:
Если вы используете S3 для хранения данных из пользовательских загрузок, особенно в распределенной среде, одним из важных соображений является тот факт, что S3 «в конечном итоге согласован» (хотя некоторые регионы согласованы для чтения после записи). Следствием этого является то, что вы можете успешно загрузить файл, но если вы проверите его существование сразу после этого, может оказаться, что он не существует. Эта проблема более заметна для таких сценариев, как обновления или удаления, где даже согласованность чтения после записи не поможет.
Вышеуказанное будет применяться к вашим загрузкам на S3 независимо от выбранного вами подхода. Фактически, это справедливо для большинства проблем, которые можно ожидать от S3 - это не столько подход, который используется для хранения данных, сколько ограничения S3, которые, вероятно, будут наиболее проблематичными.
S3fs использует API S3 - как и PHP (или другой) SDK. Более того, S3 разработан для обработки достаточно высоких уровней параллелизма - поэтому (кроме проблем с согласованностью) не должно быть проблем с монтированием его на нескольких экземплярах (учитывая, что это не традиционная файловая система - такие проблемы, как блокировка, и т. д. обрабатываются на стороне S3).
Тем не менее, есть некоторые потенциальные преимущества и недостатки каждой реализации:
S3fs:
SDK:
С точки зрения «безопасности» вы можете иметь в виду «предотвращение повреждения данных» или «предотвращение несанкционированного доступа». Что касается первого, SDK может немного помочь для решения возможных проблем (в форме более подробных ошибок), но базовое хранилище остается тем же, и я ожидаю, что различия будут незначительными. Что касается контроля доступа - вы можете использовать IAM для создания ограниченной учетной записи, но для этой учетной записи все еще потребуется доступ на чтение / запись к вашим файлам S3. Оба должны быть в достаточной степени безопасными, в любом случае ваша система должна быть скомпрометирована для получения доступа к вашей корзине S3 - однако я бы предположил, что с S3fs (поскольку учетные данные обычно хранятся вне webroot и вообще не доступны через PHP) там немного лучше безопасность.
Личное мнение: я бы предпочел s3fs для случая, когда существует один каталог для загрузки (например, один сайт, использующий его) и где доступ будет довольно простым (просто нужно загружать файлы и иногда обновлять / удалять). Если вам потребуется более сложный доступ (например, частичная загрузка, несколько сегментов и т. Д.) Или вы собираетесь использовать S3 SDK для других целей, то я бы также использовал SDK для загрузки.
источник
Я бы предпочел загрузку на S3 через PHP lib. Это проще, чем монтировать S3 на каждом сервере.
Проверьте этот пример: http://aws.amazon.com/code/126
Для одного из моих проектов я использовал эту библиотеку: http://undesigned.org.za/2007/10/22/amazon-s3-php-class . Работал очень хорошо для меня.
источник
Вы можете разрешить пользователям загружать прямо на s3 из браузера, не загружая их на свой сервер (а затем загружать на s3.)
Вот хорошие советы для этого: https://leonid.shevtsov.me/post/demystifying-s3-browser-upload/
после загрузки файла, если вам нужно обработать файл (zip, transcode и т. д.), вы можете использовать S3fs
источник