Отказоустойчивый планировщик - как?

Стоит задача на разработку планировщика для формирования отчетов, одно из требований высокая отказоустойчивость, какими практиками можно добиться этого свойства? Сам крон простой до безобразия - сбор данных и отправка.

Допустим есть такой планировщик

  @Cron('0 9 1 * *')
  handleCron() {
    try{
     const report = this.reportService.getReport();
     this.mailerService.send(report);
    }catch(e){
     console.log(e)
    }
  }

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


Ответы (1 шт):

Автор решения: Solt

Ну, можно формировать очереди. Одна - обработчик отчётов, формирующий очередь писем. Если отчет обработан - пометить, не обработан - потом повторить.

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

→ Ссылка