Допустим, у вас есть экземпляр1, экземпляр2 и экземпляр3, запущенный в AWS.Каков наилучший способ позволить пользователям загружать файлы в среду балансировки нагрузки AWS?
Все они работают под управлением Apache, а веб-приложение, которое вы запускаете, должно позволить пользователям загружать изображения, что имеет место во многих проектах.
Также, когда вы показываете изображение, вам нужно обрезать его до нужного размера, поэтому вам в основном нужно убедиться, что все экземпляры имеют доступ к тем же файлам в любое время.
Итак, скажем, пользователь загружает изображение в экземпляр1, а другой пользователь просматривает страницу, в которой одно и то же изображение отображается в размере 100x100, и он попадает в экземпляр2. Другой пользователь пытается увидеть одно и то же изображение размером 300x300 на экземпляре3. И многие другие размеры, которые нелегко предсказуемы.
Так что вам в основном нужна распределенная файловая система, я использую Gluster FS. Таким образом, все экземпляры имеют доступ к тем же файлам, когда создается запрос на просмотр изображения, у меня есть PHP-скрипт, который проверяет, чтобы изображение уже было изменено до заданных размеров, если да, это покажет их, если оно не изменит размер это, а затем показать снова.
Gluster FS работает очень плавно, и я очень доволен этим, за исключением того, что я думаю, что я изобретаю колесо, и AWS должно иметь какое-то решение для этого. С верхней командой я вижу, что glusterfs всегда использует некоторые из моих процессоров.
Я также использую CloutFront для кэширования вывода моего сценария изменения размера, что в значительной степени снижает нагрузку на сервер, но Gluster FS по-прежнему стоит дорого работать.
Вы можете использовать rsync и какое-то задание cron, чтобы сделать то же самое без Gluster FS, но это большая работа и не очень надежная, потому что вам нужно знать, когда запускать процесс rsyncing, и вы все равно не будете получите большие преимущества, предоставляемые Gluster FS. Я также попробовал s3fs, и я просто хотел бы сказать, что это был абсолютный кошмар.
Приводы NFS также кажутся очень примитивными по сравнению с Gluster FS, я думаю, что они используют UDP, поэтому они обрабатывают ваши данные, как будто это не имеет значения.
Так что лучший способ сделать что-то подобное? Я попытался найти распределенную файловую систему, предлагаемую AWS, так как я думаю, что у многих разработчиков будут одинаковые или подобные проблемы, но их нет.
Вы можете сказать, что загружаете только s3, но s3 мне не помогает, мне нужно знать, изменилось ли изображение или нет, затем измените размер и подавайте или просто подавайте, поэтому мне нужно что-то, что я могу написать скрипт для.
Вы также можете сказать, а почему бы вам не изменить размер всех изображений, а затем загрузить их все s3, поэтому я не могу сделать это, что
- Есть около 1 миллионов изображений, и 100 размеров, так что вы мы ищем объявление гигантское количество файлов, которые будут преобразованы
- Там могут быть новые размеры добавляются каждый день, поэтому размер первой стратегии не работает
Отличного вопроса. Я не совсем понял, почему вы ограничиваетесь написанием скрипта при проверке того, существует ли изображение или нет. Почему бы вам просто не пойти дальше, разместить все на S3 и использовать доступные SDK для проверки наличия файла или нет и загрузить новые измененные изображения на S3? – Viccari