Отказоустойчивый планировщик - как?
Стоит задача на разработку планировщика для формирования отчетов, одно из требований высокая отказоустойчивость, какими практиками можно добиться этого свойства? Сам крон простой до безобразия - сбор данных и отправка.
Допустим есть такой планировщик
@Cron('0 9 1 * *')
handleCron() {
try{
const report = this.reportService.getReport();
this.mailerService.send(report);
}catch(e){
console.log(e)
}
}
Если такой планировщик упадет, то отчеты перестанут формироваться. Я знаю что можно добавить статусы, отслеживать их и проверять,но какие пути есть еще?
Ответы (1 шт):
Ну, можно формировать очереди. Одна - обработчик отчётов, формирующий очередь писем. Если отчет обработан - пометить, не обработан - потом повторить.
И такой же на отправку писем. Отправлено - пометить, нет - потом повторить. При правильном подходе можно добавить к записям счётчики ошибок и при достижении каких-то разумных пределов игнорировать такие записи и строить по ним отдельный отчет для дальнейшего анализа проблемы.