设计基于时间的系统以在事件发生之前触发特定时间

时间:2016-12-01 14:18:07

标签: events timer architecture backend

我想设计一个如下所示的系统:

  • T时间,会发生E事件
  • 我定义了延迟D和一些操作A
  • T - D时间(D发生前E秒),我的系统执行操作A

我的问题是,如果我在定义操作和延迟T - D时存储时间(A, D),并且T发生更改,那么我将不得不更新存储的时间。这可能会导致我的系统出现一些不一致的情况,因为我必须考虑每次触及事件的生命周期时应该更新的所有事件。

如果我决定不存储T - D,那么我看到的唯一解决方案是不断检查更多事件。如果我每小时都有一个cron作业,那个cron作业将不得不接收所有未发生的事件,计算current time + D,然后对T进行检查。这可能会导致大量无用的计算。

是否有解决此类问题的标准方法?我不想被迫说T如果不完全必要,就不能改变/** * Override to allow different servers to use different tables * * @return string */ public function getTable() { if (is_null($this->table)) { if (str_contains(config('database.mysql.host'), 'SOMETHING_DIFFERENT')) { $this->table = 'database1.sales_rank'; } else { $this->table = 'database2.sales_rank'; } } return parent::getTable(); } 。我一直在研究像基于事件的架构这样的术语,但我似乎找不到合适的答案,也许我使用了错误的搜索。

一个很好的例子是Stripe" trial_will_end"在用户试用结束前3天触发的事件。然而,这3天的延迟是固定的,如果我在此事件发出后延长试验,我无法知道会发生什么。我想根据它们的实现,它会触发两次,或者不会。

我希望我的问题很明确,如果没有,请不要犹豫提问,我会编辑我的帖子。

0 个答案:

没有答案