Как обрабатывать количество запросов, которые нужно выполнять каждый час.

Вопрос или проблема

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

Я хочу запустить их на ECS, чтобы рабочие могли забрать эти запросы и выполнять их с максимальным параллелизмом 5. Мой вопрос: какой лучший способ отслеживания выполнения запросов? Вся метаинформация о запросе (название запроса, путь и т. д.) хранится в таблице Dynamo.

В идеале я хочу отправлять эти записи в очередь SQS каждый час, то есть по расписанию очередь SQS заполняется 100 записями для запросов, которые выполняются на Aurora Postgres. Рабочие на ECS постоянно опрашивают очередь, чтобы получить метаинформацию о запросах, выполнять их и удалять сообщение из очереди. Рабочие сокращаются, как только SQS становится пустым.

Я хочу использовать запланированную лямбду для заполнения очереди и помощи в развертывании EKS. Я усложняю здесь проектирование?

вставьте описание изображения здесь

Ответ или решение

Обработка Запросов на Часовой Основании: Оптимальное Решение

Вам необходимо реализовать систему для обработки примерно 100 запросов на ежечасной основе, избегая использования 100 отдельных AWS Lambda функции. Это разумный подход, который позволит эффективно масштабировать вашу систему в будущем. В этом ответе мы обсудим архитектурное решение с использованием Amazon ECS и SQS для оптимизации процесса обработки запросов.

1. Архитектура Системы

Использование SQS и ECS:
Ваша идея заключается в том, чтобы использовать Amazon SQS для управления очередями запросов. Вместо того чтобы создавать индивидуальные функции Lambda для каждого запроса, вы можете использовать одну Lambda для пополнения очереди SQS с метаданными запросов. Затем ваши работники в ECS будут постоянно опрашивать очередь, обрабатывая запросы в параллельном исполнении.

Параллелизм:
Вы можете задать максимальное количество параллельных обработчиков, равное 5. Это значит, что ваши работники будут одновременно выполнять количество запросов, равное 5, что идеально соответствует вашим требованиям к производительности и ограниченному количеству ресурсов.

2. Порядок Выполнения Запросов

  • Планировщик Lambda: Вы можете использовать AWS Lambda с триггером CloudWatch Events для запуска функции, которая будет заполнять очередь SQS каждый час. Эта функция извлекает метаданные из таблицы DynamoDB и формирует сообщения для SQS.

  • Очередь SQS: Запросы будут добавляться в SQS, где каждый запрос будет представлен в виде сообщения. Таким образом, при каждом срабатывании триггера, ваша Lambda будет обновлять очередь новыми заданиями.

  • Обработчики ECS: Рабочие процессы (workers) на ECS будут настроены для постоянного опроса SQS. Для этого вы можете использовать Docker контейнеры, которые будут запускаться и выполнять запросы, забирая их из очереди и обрабатывая по одному за раз до достижения максимального параллелизма.

3. Мониторинг и Учет Состояния

Для отслеживания выполнения запросов вы можете реализовать дополнительные механизмы:

  • Использование CloudWatch: Вы можете настроить метрики CloudWatch для отслеживания количества сообщений в очереди SQS, а также времени обработки каждого запроса. Это поможет вам отслеживать производительность и выявлять любой потенциал для оптимизации.

  • Логирование: Каждое выполнение запроса может записываться в логе, что позволит вам отслеживать успешные и проваленные обработки. При наличии провальных запросов, вы сможете добавлять их обратно в очередь для повторной обработки.

4. Масштабируемость

Этот подход позволяет легко масштабировать вашу систему. Если ваше число запросов возрастёт, вы сможете увеличить количество параллельных обработчиков на ECS без необходимости кардинальных изменений в архитектуре.

Использование EKS:
Если вам нужно больше контроля и возможности управления микросервисами в будущем, вы можете рассмотреть возможность использования Amazon EKS (Elastic Kubernetes Service). Однако это может усложнить вашу архитектуру в данный момент и потребовать дополнительных ресурсов для настройки и обслуживания.

Заключение

Ваше решение на базе SQS и ECS для обработки заявок звучит оптимально, обеспечивая требуемую гибкость и масштабируемость. Использование Lambda для пополнения очереди и ECS для обработки запросов позволит вам элегантно управлять предстоящими вызовами, даже если количество запросов в будущем возрастёт. Вам стоит рассмотреть реализацию данных рекомендаций и начать тестирование системы, чтобы убедиться, что она отвечает всем вашим требованиям.

Оцените материал
Добавить комментарий

Капча загружается...