Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点进程和跨多个节点的复制_Node.js_Kubernetes_Deployment_Replication_Docker Swarm - Fatal编程技术网

Node.js 节点进程和跨多个节点的复制

Node.js 节点进程和跨多个节点的复制,node.js,kubernetes,deployment,replication,docker-swarm,Node.js,Kubernetes,Deployment,Replication,Docker Swarm,我有一个集装箱节点应用程序,它运行在DigitalOcean服务器上。当我在服务器上更新应用程序时,应用程序必须关闭一小段时间。为了能够更新应用程序并避免宕机,我目前正在阅读零宕机部署/蓝绿部署,目的是在我对自己使用Docker Swarm和Kubernetes的能力更有信心时,尽快集成它们 但是,当我想象我的应用程序被复制到多个节点时,有一件事让我非常困惑。在我的应用程序中,用户可以定义一些规则。例如,每天上午11点,我想给鲍勃发一封电子邮件 当我的应用程序启动时,它从数据库获取所有CronT

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

但是,当我想象我的应用程序被复制到多个节点时,有一件事让我非常困惑。在我的应用程序中,用户可以定义一些规则。例如,每天上午11点,我想给鲍勃发一封电子邮件

当我的应用程序启动时,它从数据库获取所有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封


Docker Swarm、Kubernetes甚至AWS EC2等技术是如何处理此类问题的?

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

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

感谢您的回答@coderanger!在第一种情况下,我将返回到我的原始问题,即每当我需要更新服务/守护进程时,它将不得不停止一段时间。只是,它现在会在我的后端的一个子集上,所以它仍然是一个加号。在第二种情况下,你知道Docker Swarm是否可以做到这一点吗?这里没有魔法,如果你运行代码的多个副本,那么你就运行多个副本。Kube vs.Swarm不会改变这一点的。很抱歉造成混乱。在我的最后一句话中,我的意思是“你知道你在回答中提到的领导人选举系统是否可以在Docker Swarm或Kubernetes中实现?”这是JS中使用sidecar和K8s领导人选举API的一个例子。我不认为API是直接暴露在JS客户端库中的,但这应该是一个起点。谢谢你的回答@coderanger!在第一种情况下,我将返回到我的原始问题,即每当我需要更新服务/守护进程时,它将不得不停止一段时间。只是,它现在会在我的后端的一个子集上,所以它仍然是一个加号。在第二种情况下,你知道Docker Swarm是否可以做到这一点吗?这里没有魔法,如果你运行代码的多个副本,那么你就运行多个副本。Kube vs.Swarm不会改变这一点的。很抱歉造成混乱。在我的最后一句话中,我的意思是“你知道你在回答中提到的领导人选举系统是否可以在Docker Swarm或Kubernetes中实现?”这是JS中使用sidecar和K8s领导人选举API的一个例子。我不认为API直接暴露在JS客户端库中,但这应该是一个起点。