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

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

我正在计划的解决scheme需要后台进程,在特定的MongoDB表和内存Redis数据上进行一些处理。 工作需要每分钟运行一次,而且不能与同一工作的另一个实例并行运行。

我知道如何使用定时器在Node中构build这种工作。 另一方面,我知道我可以有一些监测过程来探测工作过程,但是我可以看到一个清楚的解决方法,就是如何replace另一个主机中的失败的应用程序。

我发现了一些关于“HA Singleton”(Java世界中的一种模式)的博客文章,以及用于解决这种情况的基于数据库的锁。 也许我可以使用存储在Redis复制数据存储上的锁来实现一个locking机制,其中有多个作业将locking状态合并在一起,但是我想这将很难实现一些“极端”情况(一个作业将locking状态合并以前的工作之后的毫秒)。

如何解决这个国王的情况有什么最佳做法的模式?

我用这个mongodb队列 。 为了获得“周期性单例”行为,我在启动时创build了一个具有适当delay设置的队列,检查queue.size() ,如果为零,则添加一个作业。 然后我运行一个定期执行queue.getsetInterval 。 如果它返回null,这是一个无操作。 如果它返回一个工作,那么做下一个工作,然后queue.add