Вот несколько советов, которые вы могли бы просмотреть или реализовать в зависимости от возможностей вашего оборудования:
Разделение
Разделите ваше текущее приложение на два отдельных артефакта: веб и кампанию. Это позволяет развертывать, перестраивать, повторно развертывать и управлять каждой службой независимо. А также иметь автономные или универсальные команды.
источник: https://skelia.com/articles/5-major-benefits-microservice-architecture/
Отказоустойчивость
Если вам нужно приложение, которое не t влияет на сбой, cra sh или любое событие, требующее перезапуска, вы должны использовать что-то за пределами вашего приложения.
Обычно это за пределами - это база данных . Вы можете использовать файл json, если база данных вам не подходит.
Campaign
У нас здесь две сущности:
campaign_configurations
| identifier | desc | cron_expression |
|-------------------|----------------|-----------------|
| month_discounts | discounts ... | 0 0 1 * * |
| reminder_shop_car | a reminder ... | */10 * * * * |
| | | |
Также вы можете добавить столбец для контроля срока действия cron с датой начала и окончания.
campaign_executions
| execution_date | execution_status | execution_log |
|---------------------|------------------|---------------|
| 10-10-2020 01:00:00 | finished | ... |
| 10-10-2020 14:30:00 | error | ... |
| 10-10-2020 14:35:00 | executing | ... |
Запуск приложения
Когда ваша nodejs кампания запускается / перезапускается из-за сбоя или запланированного обслуживания, это должен быть поток:
- чтение таблицы campaign_configurations и получить все выражения cron за допустимый период.
- используйте алгоритм, чтобы определить, нужно ли сегодня выполнять ваши выражения cron. Пример:
- cron только в декабре (Рождество) не должен запускаться сегодня: 3 июня
- cron каждые 5 минут, должен выполняться в следующие 5 минут
- Каждое выполнение в начале должно создавать запись в таблице campaign_executions со статусом: pending
- Каждое выполнение может использовать node-schedule для выполнения logi c.
- Новые исполнения не должны выполняться, если предыдущее выполнение находится в состоянии ожидания или в состоянии ошибки. Согласно вашей внутренней бизнес-логике c.
Приложение исправно
Когда приложение исправно, оно должно запросить таблицу campaign_configurations для выполнения новые или измененные выражения cron (объясненный ранее поток)
Это может происходить каждые 30 минут, чаще и реже, в соответствии с вашим внутренним бизнес-логом c.
Вы можете использовать node-schedule для этой задачи.