У меня есть контейнерное приложение Node, которое работает на сервере DigitalOcean. Когда я обновляю приложение на сервере, приложение на некоторое время отключается go. Чтобы иметь возможность обновлять приложение и избегать простоев, я в настоящее время читаю о развертывании с нулевым временем простоя / развертывании «сине-зеленый» с намерением интегрировать Docker Swarm и Kubernetes, как только я буду более уверен в своей способности использовать их .
Но кое-что действительно смущает меня, когда я представляю, что мое приложение реплицируется на несколько узлов. В моем приложении пользователь может определить некоторые правила. Так, например, каждый день в 11:00 я хочу, чтобы электронное письмо отправлялось Бобу.
Когда мое приложение запускается, оно выбирает все CronTriggers из базы данных и создает объекты CronTrigger, которые живут в приложении.
const { CronJob } = require('cron');
module.exports = class CronTrigger {
constructor(cronString) {
this.job = new CronJob(cronString, () => {
// Send email here
}, null, false, 'America/Toronto');
this.job.start();
}
}
Но что произойдет, если мое приложение будет реплицировано на несколько узлов? Означает ли это, что CronTrigger будет выполняться столько раз, сколько существует узлов? Если у меня кластер из 3 узлов, как я могу убедиться, что в 11 утра Бобу будет отправлено только одно письмо, а не 3?
Как решается проблема такого рода с такими технологиями, как Docker Рой, Кубернетес или даже AWS EC2?