我正在设计一个新的 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/