运行 Firebase Cloud Functions 中每个用户的调度程序?

Running a scheduler for each user in Firebase Cloud Functions?

我希望 运行 一个根据我的云功能中的每个用户 运行 的调度程序,而不是 运行 同时为所有用户提供的通用调度程序。

例如,如果用户 A 执行某个操作,则调度程序(例如每 30 分钟一次)仅针对用户 A 而不是其他用户启动。 但是随后 UserB 也执行相同的操作并在不同的时间为自己启动调度程序。

现在 UserA 和 UserB 的调度程序可以 运行在不同的时间但相同的间隔(30 分钟)

如何创建这样的函数? 非常感谢您的帮助。

单独使用 Cloud Functions 无法为每个用户独立安排函数执行。您只能根据您在功能配置中提供的计划安排单个功能。显然,它不会为每个用户部署新功能而扩展。

你有两个选择:

  1. 尽可能频繁地(每 1 分钟)部署一个 运行 的 scheduled function。让它查询数据库以确定每个用户需要 运行 哪些工作项目,并安排它们执行。根据工作量,您可能希望通过 pubsub 将这些卸载到其他函数调用。

  2. 在每个用户的基础上,使用 Cloud Tasks 安排应该为用户完成的第一项工作(可以实施以调用 HTTP 触发器)。任务的有效负载应描述要完成的工作(至少应包含它所代表的用户的 ID)。当该任务完成时,HTTP 触发器将必须确定下一次定期调用的时间,并按此安排它。您将有效地在队列 "pending" 执行中始终有一个任务。如果你的函数以某种方式无法建立下一个任务,那么周期性就会中断,你将不得不以某种方式弄清楚如何重新启动它。

选项 1 更容易实施,IMO,但如果调用需要精确地发生在分钟的确切秒数,则您失去了计时的粒度。您还需要维护一个数据库或其他一些存储来查询以确定如何告诉每分钟函数应该为任何给定用户做更多的工作。

选项 2 更难正确实施,需要使用具有新 API 的全新产品,但您将能够以更精细的粒度安排任务。