В обоих сценариях важно учитывать повторные попытки в случае сбоя обработки для конкретного клиента. Одним из возможных способов распределения заданий по большому количеству контейнеров с повторными попытками было бы использование AWS SQS.
Один контейнер будет запускаться периодически каждые несколько часов и быть генератором заданий. Это создаст один элемент в очереди SQS для каждого клиента, который должен быть обработан. В ответ на элементы, появляющиеся в очереди, ECS запускает несколько «рабочих» контейнеров для потребления элементов из очереди. Это можно сделать для автоматического масштабирования относительно количества элементов в очереди, чтобы быстро раскрутить множество контейнеров, которые могут работать параллельно.
Каждый контейнер будет использовать свой собственный высокопроизводительный параллельный опросщик, подобный этому (https://www.npmjs.com/package/squiss), чтобы начать извлечение элементов из очереди и их обработку. Если работник потерпел неудачу или потерпел крах из-за ошибки, то SQS автоматически восстановит и после того, как истекло время ожидания, элементы из очереди, над которыми работник работал, были сброшены в очередь.
Такой подход обеспечит вам большую гибкость и позволит горизонтально масштабировать число работников, а любому из них будет обрабатывать любые задания из очереди, которую он забирает. Это также гарантирует, что каждый элемент, находящийся в очереди, будет обработан хотя бы один раз, и что ни один из них не будет удален навсегда в случае сбоя или ошибки.