跨多个节点的节点进程和复制
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 执行移动到您只有 运行 一个副本的另一个守护进程来解决这个问题,或者使用某种领导者选举系统,以便只有一个副本 运行在任何给定时间发送它们。
我有一个容器化的 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 执行移动到您只有 运行 一个副本的另一个守护进程来解决这个问题,或者使用某种领导者选举系统,以便只有一个副本 运行在任何给定时间发送它们。