"Разветвление и соединение" с функциями без сервера (например, AWS Lambda) / Python - PullRequest
1 голос
/ 18 марта 2019

Я обрабатываю относительно большие изображения с помощью AWS Lambda (https://registry.opendata.aws/sentinel-2/).

. Чтобы обработать эти изображения, я разделил их на более мелкие изображения (~ 1500 "фишек"), которые можно обработатьнезависимо (количество микросхем непредсказуемо зависит от содержимого исходного изображения). Микросхемы обрабатываются параллельно с использованием нескольких вызовов лямбды, которая занимает «страницу» из пары сотен микросхем.

Вотгде я застрял: когда все страницы обработаны, мне нужно объединить результаты в одно выходное изображение, но как узнать, когда все страницы - «переменная партия вызовов» - завершены?

IЯ рассмотрел, например, запись информации о прогрессе в s3 или динамо и вызов функции объединения после каждой страницы, так что выполняется только последний вызов этой функции (когда проверка выполнения возвращается как завершенная). Я видел такие варианты, как futures / promises,но время обработки страницы чипов составляет порядка 10-15 минут, поэтому я не хочуt держать функцию «контроллера» в ожидании завершения фьючерсов / обещаний, потому что в этот момент дешевле использовать несколько вызовов.

Есть ли лучшее решение, которое выписывает информацию о ходе выполнения и проверяет ее несколько раз??

(NB. Я видел этот вопрос: Разветвление и соединение с Amazon Lambda )

1 Ответ

1 голос
/ 18 марта 2019

Вы можете добавить микросхемы в очередь с помощью Amazon SQS, и работники или Lambdas будут вытаскивать эти отдельные задания из очереди.Затем вы можете настроить оповещение cloudwatch, которое контролирует глубину вашей очереди, где нулевая глубина очереди (задание выполнено) запускает лямбду «завершения», которая объединит отдельные выходные микросхемы.

Я считаю, что CloudWatch предупреждает о состоянии очереди опроса с 5-минутными интервалами, поэтому для вашего случая использования, когда у вас есть длительное время обработки (~ 10-15 минут), это не будет узким местом здесь (время ожидания лямбдыВ любом случае, 15 минут, так что если вы установите опрос на 15 минут, ваша лямбда либо потерпит неудачу, либо будет завершена к тому времени).

Шаг за шагом, как это будет выглядеть:

  1. Загрузка нового файла на S3
  2. Загрузка запускает лямбду, чтобы разбить файл на «чипы» в новой папке
  3. Добавить все чипы в новую очередь
  4. Lambdas извлекают микросхемы из очереди
  5. , когда очередь пуста, запускает конгломерацию lambda

Вот еще один полезный ответ по настройке триггеров на основе состояния очереди: Эффективный способпроверить, пуста ли очередь SQS

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