在无状态的Node.js应用中调度函数调用。

问题描述 投票:0回答:1

我试图找出一种设计模式,用于在一个无状态的Node后端中调度多个实例同时运行的事件。

用例示例。

  1. 创建一个带有发布日期时间的消息对象,并将其保存到数据库中。
  2. 可选择更新发布时间或删除对象。
  3. 当达到发布时间时,消息内容会被发送到第三方API端点。

现在我最好的想法是使用bee-queue或者bull来排队延迟的作业。它应该能够存储状态,并确保作业只执行一次。然而,我觉得这可能会引入一个单点故障,特别是在Redis上维护状态几个月,然后希望未来版本的队列库还能用。

另一个选择是一个服务工作者,每隔n分钟就会对数据库中即将发生的事件进行轮询,但这对于多租户的SaaS来说,似乎是一个潜在的扩展问题。

有没有更强大的设计模式来解决这个问题?

node.js publish-subscribe cron-task task-queue
1个回答
0
投票

不要担心redis会崩溃。它很稳定,最终你可以决定冻结版本。

如果有未来会执行的作业,我建议使用一个数据库,比如Mongo或Redis,有一个磁盘存储。因此,你将在重启后幸存下来,你不必重新发明轮子,并且已经有一套不错的工具来实现可扩展性。

© www.soinside.com 2019 - 2024. All rights reserved.