我试图找出一种设计模式,用于在一个无状态的Node后端中调度多个实例同时运行的事件。
用例示例。
现在我最好的想法是使用bee-queue或者bull来排队延迟的作业。它应该能够存储状态,并确保作业只执行一次。然而,我觉得这可能会引入一个单点故障,特别是在Redis上维护状态几个月,然后希望未来版本的队列库还能用。
另一个选择是一个服务工作者,每隔n分钟就会对数据库中即将发生的事件进行轮询,但这对于多租户的SaaS来说,似乎是一个潜在的扩展问题。
有没有更强大的设计模式来解决这个问题?
不要担心redis会崩溃。它很稳定,最终你可以决定冻结版本。
如果有未来会执行的作业,我建议使用一个数据库,比如Mongo或Redis,有一个磁盘存储。因此,你将在重启后幸存下来,你不必重新发明轮子,并且已经有一套不错的工具来实现可扩展性。