跨多个节点的节点进程和复制

Node processes and replication across multiple nodes

我有一个容器化的 Node 应用程序,它在 DigitalOcean 服务器上运行。当我在服务器上更新应用程序时,应用程序必须关闭一小段时间。为了能够更新应用程序并避免停机,我目前正在阅读零停机部署/蓝绿部署,目的是在我对自己的能力更有信心时尽快集成 Docker Swarm 和 Kubernetes使用它们。

但是当我想象我的应用程序被复制到多个节点时,有些事情真的让我感到困惑。在我的应用程序中,用户可以定义一些规则。因此,例如,每天上午 11 点,我想向 Bob 发送一封电子邮件。

当我的应用程序启动时,它会从数据库中获取所有 CronTrigger 并构建存在于应用程序中的 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 点只向 Bob 发送一封电子邮件而不是 3 封?

DockerSwarm、Kubernetes 甚至 AWS EC2 等技术如何处理此类问题?

是的,您可以通过将实际的 cron 执行移动到您只有 运行 一个副本的另一个守护进程来解决这个问题,或者使用某种领导者选举系统,以便只有一个副本 运行在任何给定时间发送它们。