У нас есть веб-приложение, используемое клиентами, и у них есть возможность создавать отчеты. Отчет содержит электронная почта и запланированное время (например: каждый день, 9 часов утра).
Когда запланированное время соответствует , текущее время веб-приложение выполняет некоторую работу и отправляет результат на электронную почту.
У меня есть одно требование, когда мне нужно реализовать масштабируемую архитектуру cron поверх swf.
Моя необходимая архитектура выглядит следующим образом:
- Пользователь создает отчет (СОВЕРШЕНО)
- Webapp сохраняет отчет в БД и отправляет данные отчета и таймер в микросервис cron через SQS (служба простых запросов). (DONE)
- Микросервис Cron считывает входящие сообщения SQS и отправляет обратно сообщение SQS по истечении таймера. (НУЖНО ЭТО)
- Webapp читает сообщение SQS и запускает функции Data Analyzer и Emailer для отправки проанализированных данных. (DONE)
Из того, что я читал о сервисе SWF, мы можем создавать задания cron и автомасштабирования SWF. Как создать масштабируемый микросервис cron с помощью SWF?
Открыто для любых предложений ...
P.S. Веб-приложение написано на nodejs, очень хорошо будет написать микросервис на nodejs.
Обновление 1: Потратив некоторое время на изучение возможных решений,
Я нашел https://github.com/capside/CloudCron проект. Но это зависит от события cloudwatch. Для многих запланированных задач это может потребовать много IMO.
Обновление 2:
Банджо Обайоми предложил использовать лямбда-функции с SQS и CWE.
Решение 1:
- Webapp отправляет сообщение SQS.
- Сообщение SQS запускает лямбда-функцию1
- Лямбда-функция создает правило CWE
- Правило CWE запускает лямбда-функцию2
- Лямбда-функция2 отправляет сообщение SQS обратно в веб-приложение.
Ограничения:
Мы можем создать только 100 правил CWE для каждого региона. Это означает, что веб-приложение не может генерировать более 100 отчетов с запланированной датой.
Ссылки:
хрон-в-AWS-с лямбда-функции