Как создать серверное преобразование файлов - PullRequest
0 голосов
/ 03 июня 2019

Я занимаюсь разработкой системы, в которой я хочу использовать функции без серверов в корзинах AWS и S3.

У меня есть несколько файлов Word в корзине S3, и я хочу выполнить некоторые преобразования для этих файлов (этот код будет написан мной, который я хочу разместить с использованием функций без сервера, скажем, имя этой службы FileTransformation сервис) и генерировать новые файлы.

Предположим, пользователь отправляет запрос на преобразование файлов, и запрос включает в себя имя файлов.

Теперь у меня есть следующие вопросы:

  • Я не хочу, чтобы службы выполняли последовательный материал, например, если user1 дал 10 имен файлов в запросе, а другой user2 также дал запрос еще на 15 файлов , Я не хочу что-то вроде «когда user1 запрос закончен, тогда user2 запрос должен начаться». Как я могу справиться с этим?
  • Предположим, user1 и user2 запросили статус их запроса, как я могу сообщить об этом? Нужно ли что-то еще сделать в моем сервисе FileTransformation?
  • Как я могу уведомить пользователя в случае сбоя запроса?

Есть ли какой-либо сервис AWS, который я должен учитывать при разработке вышеуказанного сервиса?

Я думаю, мы можем использовать брокер сообщений для отправки запросов на обслуживание. CloudWatch для сообщения об ошибках или что-то.

1 Ответ

2 голосов
/ 03 июня 2019

Ваш дизайн может выглядеть следующим образом:

  1. S3 Bucket имеет триггер события objectCreated (настройка в разделе уведомлений корзины S3), который запускает Lambda для обработки
  2. Файлы загружаютсяв S3 Bucket
  3. Каждый файл запускает лямбду для его обработки (параллельные лямбды, поэтому это не последовательный
  4. Если лямбда сталкивается с ошибкой, он может уведомить пользователя (см. примечание ниже для решения этой проблемы)
  5. Как только Lambda завершит обработку, она может делать все, что вы пожелаете (например, отправлять результаты по электронной почте через SES или сохранять полученный файл в S3)

Я не хочу, чтобы службы выполняли последовательные операции

Когда вы используете AWS Lambda, которая не требует сервера, ваша Lambda будет запускать несколько одновременных экземпляров (которые можно ограничить и/ или зарезервировать, используя зарезервированное значение одновременных выполнений).

Предположим, что user1 и user2 запросили статус своего запроса

To sВ дополнение к этому, вы можете захотеть реализовать DynamoDB, который содержит статус каждого запроса.Когда лямбда запускается, она может записать в DynamoDB со статусом «в процессе», который затем может быть обновлен до «выполнено» или «не выполнено» соответственно.Тогда у вас будет отдельный API, который читает эту таблицу всякий раз, когда пользователь запрашивает обновление

Как я могу уведомить пользователя, если запрос не выполняется между ними?

Вы можете загрузитьфайл с префиксом, который содержит электронную почту пользователя или любой другой носитель уведомлений, например: files/userA/userA@test.com/file.doc.Таким образом, когда лямбда запускается и начинает обработку, если она не обрабатывается, она знает, на какую электронную почту отправить результат.

Редактировать: На основании комментария, если вы хотите приближениягде файл уже присутствует в S3, и пользователь запрашивает обработку, затем просто отправляет сообщения пользователя в очередь SQS и затем имеет для него лямбда-триггер (он будет запускать параллельные выполнения Lambdas для обработки очереди, а не последовательные).Или вы могли бы сделать так, чтобы API напрямую вызывал Lambda, а затем заставлял пользователя ждать (если обработка относительно быстрая, это тоже подойдет)

...