Служба хранения для магазина приложений
Я разрабатываю онлайн-инструмент для разработки продуктов для Shopify. Приложение будет размещено на моем веб-сервере. Пользователь разместит код JavaScript на своей веб-странице. Код откроет мое приложение в iframe(по иронии судьбы, именно так работают приложения Shopify). Затем пользователь может использовать инструмент для создания дизайна и сохранит сгенерированное изображение на моем веб-сервере. Я хочу загрузить изображения, созданные пользователем, на сервер хранения, а не хранить их на своем веб-сервере. Я ищу услугу / решение, которое позволило бы моему приложению создать учетную запись хранения для пользователя во время регистрации и указать максимально допустимое пространство для хранения. Служба также должна разрешать загрузку файлов через API. И загруженные файлы должны быть доступны через URL. Служба также должна иметь возможность предоставлять аналитику для каждого пользователя.
1 ответ
Это достаточно просто. Каждый раз, когда клиент использует ваш сервис для загрузки контента, вы знаете об этом. Так что запишите событие в простой структуре данных в вашем приложении. Если клиент превышает какой-то лимит, разберитесь с ним. Вы едете на автобусе, поэтому вы можете сказать им, чтобы они платили больше, уходили или оставляли все как есть. Amazon S3 настолько дешев, что никогда не будет стоить вам денег, и вероятность того, что клиенты будут стоить вам денег, настолько низка, что у вас есть около десяти минут работы, чтобы сделать этот простой код блокирующим и идти дальше.
Для других людей, оказавшихся в такой же ситуации, вот что я в итоге сделал
- Создал одну корзину в хранилище, совместимом с S3. Сделайте эту корзину общедоступной, потому что она будет содержать статические ресурсы, такие как изображения.
- Создал папку для каждого пользователя внутри этого ведра.
- Отслеживайте размер папки каждого пользователя. Насколько мне известно, хранилище S3 не предоставляет метода для получения размера папки, поэтому я получаю список всех объектов в папке и складываю их размер. Мы рассчитываем размер только при загрузке или удалении файла и сохраняем размер в БД.
Предложение @chris для одного ведра на пользователя было хорошим, и сначала я реализовал эту стратегию, но на более позднем этапе я столкнулся с препятствием. Я обнаружил, что S3 не позволяет вам получать доступ к контенту через HTTPS. Чтобы получить доступ к контенту через HTTPS, мы должны использовать Cloudflare или любой другой CDN, где вы создаете зону (https) и указываете ведро в качестве источника. Имея по одной корзине на пользователя, нам нужно создать новую зону для каждого нового пользователя. Эта ситуация была не идеальной, так как многие сети CDN взимают дополнительную плату за каждую новую созданную зону. Поэтому мы решили использовать одну корзину для всех пользователей и создать в ней папку для каждого пользователя. Затем мы создали зону в нашей CDN и указали общедоступный путь корзины как источник зоны CDN.
Мы также планируем ограничить один сегмент данными не более чем для 100 пользователей и создать новый сегмент после каждых 100 новых пользователей.