Node.JS 作业/后台进程和高可用性
Node.JS Job / Background Process and high availability
我正在设计一个新的 Node.JS 应用程序。我看到了很多关于获得高可用性生产环境的选项和可能性:负载平衡应用程序和反向代理、Redis 集群、MongoDB 副本和分片部署等。
我计划的解决方案需要一个后台进程,对特定 MongoDB 表和内存中的 Redis 数据进行一些处理。该作业需要每分钟 运行,我不能 运行 与同一作业的另一个实例并行。
我知道如何使用计时器在 Node 中构建此类作业。另一方面,我知道我可以有一些监视进程来探测作业进程,但我可以看到一个关于如何替换另一台主机中出现故障的应用程序的明确解决方案。
我找到了一些关于“HA Singleton”(Java 世界中的一种模式)和基于数据库的锁来解决这种情况的博客文章。可能我可以使用存储在 Redis 复制数据存储上的锁来实现锁定机制,多个作业共享锁状态,但我想实现一些“极端”情况会很困难(一个作业共享几个锁状态上一个作业后的毫秒数)。
有没有关于如何解决这种情况之王的最佳实践模式?
我为此使用了 mongodb-queue。为了获得 "periodic singleton" 行为,我在启动时使用适当的 delay
设置创建了一个队列,检查 queue.size()
如果为零则添加一个作业。然后我 运行 定期执行 queue.get
的 setInterval
。如果 returns 为 null,则为空操作。如果它 returns 一份工作,完成工作,然后 queue.add
然后下一个。
我正在设计一个新的 Node.JS 应用程序。我看到了很多关于获得高可用性生产环境的选项和可能性:负载平衡应用程序和反向代理、Redis 集群、MongoDB 副本和分片部署等。
我计划的解决方案需要一个后台进程,对特定 MongoDB 表和内存中的 Redis 数据进行一些处理。该作业需要每分钟 运行,我不能 运行 与同一作业的另一个实例并行。
我知道如何使用计时器在 Node 中构建此类作业。另一方面,我知道我可以有一些监视进程来探测作业进程,但我可以看到一个关于如何替换另一台主机中出现故障的应用程序的明确解决方案。
我找到了一些关于“HA Singleton”(Java 世界中的一种模式)和基于数据库的锁来解决这种情况的博客文章。可能我可以使用存储在 Redis 复制数据存储上的锁来实现锁定机制,多个作业共享锁状态,但我想实现一些“极端”情况会很困难(一个作业共享几个锁状态上一个作业后的毫秒数)。
有没有关于如何解决这种情况之王的最佳实践模式?
我为此使用了 mongodb-queue。为了获得 "periodic singleton" 行为,我在启动时使用适当的 delay
设置创建了一个队列,检查 queue.size()
如果为零则添加一个作业。然后我 运行 定期执行 queue.get
的 setInterval
。如果 returns 为 null,则为空操作。如果它 returns 一份工作,完成工作,然后 queue.add
然后下一个。