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