目前正在处理多进程/多主机nodeJS应用程序我遇到了问题,我需要你的帮助。
我的应用程序包含流程,每个人都可以托管几个独特的工作。我必须实时知道我的系统上当前是否正在运行作业。
这是我目前的解决方案:
此解决方案非常有效,除非出现网络问题。这可能是因为Redis发布/暂停不会超时:
Note that the timeout only applies to number clients and it **does not apply** to Pub/Sub clients, since a Pub/Sub connection is a push style connection so a client that is idle is the norm.
Redis似乎保留了幽灵订阅者,当我发布到频道时,它会返回1个订阅者,但它并不存在。
您有想法管理此案例吗?
ps:我之前的解决方案是:
答案 0 :(得分:0)
如果您可以保证您的工作不会崩溃,您可以随时使用原始解决方案的变体。
每个作业设置一个键" job_UUID"在redis中将TTL设置为N(一个足够大的数字用于完成该过程,它将仅作为超时) 作业完成,在执行期间捕获任何异常。 作业完成后,将从redis中删除密钥
在这种情况下,您总是有实时的。当进程正在运行时,值将存在。只有当您的工作在不删除值的情况下死亡时,您才会看到不一致。一旦安全防护超时通过,TTL将自动删除该值。
如果您需要实时更强大的功能,那么您可能会使用错误的工具来完成工作。对于进程协调,ZooKeeper非常棒。不像Redis那样通用,由于问题的分布式特性,设置肯定有点复杂,但对于流程编排和实时故障转移非常有用。