Служба хранения для приложения shopify

Я разрабатываю онлайн-инструмент для проектирования продуктов для Shopify. Приложение будет размещено на моем веб-сервере. Пользователь разместит код JavaScript на своей веб-странице. Код откроет мое приложение в iframe (по иронии судьбы именно так работают приложения Shopify). Затем пользователь может использовать этот инструмент для создания дизайна и сохранить сгенерированное изображение на моем веб-сервере. Я хочу загружать изображения, созданные пользователем, на сервер хранения, а не хранить их на своем веб-сервере. Я ищу услугу / решение, которое позволило бы моему приложению создать учетную запись хранения для пользователя во время регистрации и указать максимально допустимое пространство для хранения. Служба также должна разрешать загрузку файлов через API. А загруженные файлы должны быть доступны по URL-адресу. Сервис также должен иметь возможность предоставлять аналитику для каждого пользователя.

AWS S3? Одна корзина на пользователя?

Chris 06.10.2018 00:19

@Chris S3 - хороший вариант, за исключением того, что вы не можете ограничить размер ведра. Для ограничения размера в мое приложение нужно добавить логику, чего я стараюсь избегать.

Usman Shaukat 06.10.2018 00:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это достаточно просто. Каждый раз, когда клиент использует ваш сервис для загрузки контента, вы знаете об этом. Поэтому запишите событие в простой структуре данных в вашем приложении. Если клиент превышает какой-то лимит, разберитесь с этим. Вы ведете автобус, поэтому можете сказать им, чтобы они заплатили больше, сойти или оставить все как есть. Amazon S3 настолько дешев, что никогда не будет стоить вам денег, а вероятность того, что какие-либо клиенты будут стоить вам денег, настолько мала, что у вас есть около десяти минут работы, чтобы сделать этот простой блок кода вещью и двигаться дальше.

Ответ принят как подходящий

Для других людей, оказавшихся в такой же ситуации, вот что я в итоге сделал

  1. Создал одну корзину в хранилище, совместимом с S3. Сделайте эту корзину общедоступной, потому что она будет содержать статические ресурсы, такие как изображения.
  2. Создал папку для каждого пользователя внутри этого ведра.
  3. Отслеживайте размер папки каждого пользователя. Хранилище S3, насколько мне известно, не предоставляет метода для получения размера папки, поэтому я получаю список всех объектов в папке и складываю их размер. Мы рассчитываем размер только при загрузке или удалении файла и сохраняем размер в БД.

Предложение @chris для одного ведра на пользователя было хорошим, и сначала я реализовал эту стратегию, но на более позднем этапе я столкнулся с препятствием. Я обнаружил, что S3 не позволяет вам получать доступ к контенту через HTTPS. Чтобы получить доступ к контенту через HTTPS, мы должны использовать Cloudflare или любой другой CDN, где вы создаете зону (https) и указываете ведро в качестве источника. Имея по одной корзине на пользователя, нам нужно создать новую зону для каждого нового пользователя. Эта ситуация была не идеальной, так как многие сети CDN взимают дополнительную плату за каждую новую созданную зону. Поэтому мы решили использовать одну корзину для всех пользователей и создать в ней папку для каждого пользователя. Затем мы создали зону в нашей CDN и указали общедоступный путь корзины в качестве источника зоны CDN.

Мы также планируем ограничить один сегмент данными не более чем для 100 пользователей и создавать новый сегмент после каждых 100 новых пользователей.

Другие вопросы по теме