javascript - Node.JS 作业/后台进程和高可用性

标签 javascript node.js mongodb design-patterns redis

我正在设计一个新的 Node.JS 应用程序。我看到了获得高可用性生产环境的许多选项和可能性:负载平衡应用程序和反向代理、Redis 集群、MongoDB 副本和分片部署等。

我计划的解决方案需要一个后台进程,对特定的 MongoDB 表和内存中的 Redis 数据进行一些处理。该作业需要每分钟运行一次,并且我不能与同一作业的另一个实例并行运行。

我知道如何使用计时器在 Node 中构建此类作业。另一方面,我知道我可以有一些监控进程来探测作业进程,但我可以看到一个关于如何替换另一台主机中出现故障的应用程序的明确解决方案。

我发现了一些关于“HA Singleton”(Java 世界中的一种模式)的博客文章,以及用于解决这种情况的基于数据库的锁。也许我可以使用存储在 Redis 复制数据存储上的锁来实现锁定机制,并通过多个作业池化锁状态,但我想实现一些“极端”情况会很困难(一个作业池化几个锁状态)上一次作业后的毫秒数)。

有没有关于如何解决这种情况的最佳实践模式?

最佳答案

我用过mongodb-queue为了这。为了获得“周期性单例”行为,我在启动时使用适当的延迟设置创建了一个队列,检查queue.size(),如果为零则添加一个作业。然后我运行一个 setInterval 定期执行 queue.get。如果返回 null,则表示无操作。如果它返回一个作业,则执行该工作并 queue.add 然后执行下一个作业。

关于javascript - Node.JS 作业/后台进程和高可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28733046/

相关文章:

javascript - Google Apps 脚本变量重新分配

node.js - 浏览器同步 : command not found after installing locally

mongodb - 一次增加数百个计数器,redis 还是 mongodb?

javascript - 如何禁用 html 元素的悬停事件

javascript - jquery 在 div 悬停时更改图像路径并使其类处于事件状态?

node.js - TypeScript 模块命名空间,同时在编译后保留多个文件

javascript - Promises 和 Q - 使用 forEach 完成一系列函数

ruby-on-rails-3 - 无法在轨道上的可安装引擎中加载模型

javascript - Vue - 指令绑定(bind)在元素刷新时不起作用

node.js - 使用我自己的数据库或 Google map API(或其他解决方案)实现城市地理编码?