Будет ли состояние карты AWS Step Functions наилучшим вариантом для обработки 10 миллионов строк CSV? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть рабочий процесс, который может потребовать тысяч или миллионов лямбда-вызовов, и я пытаюсь понять, позволит ли состояние карты Step Functions указать количество необходимых мне исполнений.

Я создаю службу, котораябудет вызван файлом CSV, загруженным в корзину S3. CSV-файл будет содержать миллионы регистраций событий, которые необходимо обработать (поток разных лямбд), и будет содержать сводку успехов, неудач и т. Д. Глядя на различные сервисы, я думаю, что пошаговые функции будут работать для организации потока,Состояние карты допускает динамическое количество вложенных рабочих процессов, но я не нашел, каким может быть это максимальное число. Я могу пакетировать свои исполнения, чтобы ограничить рабочие процессы, если число может быть в тысячах. Если нет, то я рассматриваю какой-либо способ использования SQS или пытаюсь понять, является ли AWS Batch допустимой опцией.

Хорошо ли будет работать состояние отображения пошаговых функций для такого потока с динамическим числом выполненийили другой сервис будет лучшим вариантом для моей задачи?

1 Ответ

0 голосов
/ 09 ноября 2019

Я бы не использовал пошаговые функции для этого варианта использования. Map состояние требует параметр ItemsPath, который указывает на массив элементов в Data (JSON, который передается из одного состояния в другое). Размер этого JSON ограничен 32 КБ (фактически, вероятно, около 32 КБ, я не углублялся в детали обработки кодирования пошаговыми функциями). Так что это фактически исключает Map в пошаговых функциях, потому что вы просто достигнете предела обслуживания с таким количеством данных.

В этом случае использования я думаю, что было бы лучше использовать SQS и Lambda. Загрузка файла в S3 запускает Lambda, что запускает пакетное задание AWS, которое, в свою очередь, загружает файл CSV и отправляет сообщения для каждой строки в одну или несколько очередей SQS (если вы хотите использовать другую лямбду для разных типов строк). Lambda имеет встроенную интеграцию с SQS, так что вы можете использовать это.

Имейте в виду, что SQS может дублировать сообщение, поэтому ваша лямбда должна работать правильно, даже если одна и та же строка обрабатывается несколько раз (лямбда должна быть идемпотентной). По сути, любой элемент вашей системы должен быть идемпотентным, если вы хотите иметь надежную, распределенную систему.

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

...