基于时间的通知服务

Time based notifications service

我正在处理订阅,其中用户订阅了一个计划并且它有一个过期

所以基本上每个用户存储都有一个 expiration 字段。

我希望能够在用户计划实际过期时立即收到通知。

现在,我有一项每天对所有用户运行一次的工作,并检查是否有人已过期,但理想情况下,我希望在用户过期时获得服务器回发或某种事件 运行 每天都这样。

您能想到处理此类事情的任何第三方服务/数据库/其他工具吗?

许多服务,例如 Stripe,会在用户的订阅续订/过期时通过 webhook 通知您。他们只是像我一样 运行 重复工作吗?

希望我说得足够清楚,如果能帮助我将搜索重点放在 Google 中,也将不胜感激。

我当前的堆栈是 Mongodb、Node.js、AWS

谢谢

我们不确定 Stripe 如何处理它。

我想到了两个解决方案。让我们从简单的开始:

定时任务

正如您提到的,您已经有了一个 Cronjob 解决方案,但您可以改为 运行 每小时或每 10 分钟。只需确保将查询优化到最大程度,这样它就不会超重到 运行。

它很有吸引力,易于实施,边缘情况很少,但正如您可能遇到的那样,一旦您达到数百万客户,它可能会拖累性能。

计时器

实现各不相同,您需要担心边缘情况,但概念:

  1. 在开始日* (00:00) 查询所有设置为今天过期的客户,将它们保存到数组(内存中)。按时间对数组进行排序(最好是降序)。
  2. 创建定时器以在最后一个数组的元素时间执行。
  3. 功能:如果Client X现在到期,查询数据库以确保订阅没有被延长。如果不是,请通知。
  4. 从跟踪数组中删除 Client X。重复步骤 2.

在开始日* - 也 运行 在脚本启动时。