Небольшие проблемы с файлами в AWS S3 - PullRequest
1 голос
/ 04 апреля 2019

У меня есть приложение, где

В день генерируется от 1 до 100 миллионов даже более мелких XML-файлов, и я должен загрузить их в одну из корзин S3, как только в отдельных XML-файлах. Эта корзина S3 связана с CloudFront, чтобы наш клиент по всему миру мог быстрее получать доступ к XML-файлам.

У меня все работает нормально, кроме затратной части. Стоимость S3-запроса увеличивается с каждым днем, так как количество файлов не увеличивается. Файлы должны быть отправлены, как только они появятся, и должны быть доступны для доступа из cloudFront.

Есть ли какое-нибудь решение, которое может сэкономить мои затраты здесь? Размер xml-файлов не более 2 КБ.

Позвольте мне уточнить здесь еще несколько моментов, которые я пробовал до сих пор. Я подумал объединить все небольшие xmls в первый раз и затем отправить их на S3, но проблема в том, что у нас должно быть некоторое вычисление в AWS, чтобы извлечь его снова в небольшие файлы, потому что конечный пользователь будет принимать только отдельные файлы xml. А извлечение и создание небольших файлов и повторное сохранение в S3 обойдется еще дороже.

Поэтому, пожалуйста, не стесняйтесь предложить какую-то другую систему вместо S3, которая может подойти для этого варианта использования. Я также пробовал HBASE, но проблема запуска и управления HBASE в AWS. Также мы попробовали Dynamo DB, но это также стоило дороже.

1 Ответ

0 голосов
/ 04 апреля 2019

API-вызовы взимаются за объект, независимо от его размера.Загрузка 1 байта стоит столько же, сколько загрузка 1 ГБ.Поэтому обычно небольшие объекты могут привести к резкому росту затрат на API.

В следующем сценарии вы можете пакетировать несколько объектов и загружать их как один файл в S3 Bucket.

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

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

Это сэкономит вам стоимость переноса данных PUT.

Пример кода для лямбды дляразархивировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...