Узловые процессы и репликация на нескольких узлах - PullRequest
1 голос
/ 27 апреля 2020

У меня есть контейнерное приложение 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?

1 Ответ

0 голосов
/ 28 апреля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...