我有一个在群集中运行的Node.js应用程序,因此,有很多应用程序同时运行并接受来自负载平衡器的请求的实例。你如何处理集群中基于时间的事件?
考虑我在我的应用程序中有一个“订阅”的概念,每个订阅都存储在中央数据库dateStart
和dateEnd
字段中。对于每次订阅,我需要发送通知,提醒客户订阅到期(例如,到期前14天,7天和3天)。此外,我需要将订阅标记为过期,并在时间到时执行一些额外的逻辑。
什么来处理多实例的应用,基于时间的事件的最佳实践?
我可以让我的应用程序来运行到期程序,例如每五分钟一次,但之后我将不得不处理并发问题,因为每个实例都会尝试这样做,而我们不希望通知被提交两次。
感谢您抽出时间来分享。它看起来像一个强大的解决方案,我会牢记这一点!但是,我正在考虑采用行级锁定的类似方法,但在更细化的级别上。我在想,每个工作人员都可以从数据库中提取挂起的“作业”,并锁定要处理的行,然后将每个作业标记为“完成”。我希望通过这种方式,工作将更均匀地分配到所有实例中,锁定将防止工作人员抓住已经挂起的工作。你怎么看? –
如果您想利用多个节点来处理作业负载,那么这也是一种有效的方法。我选择把主要角色作为争论的焦点,这样我所需要关心的就是确保只有一个人成为首要工作并且工作。我认为,只要在每个工作记录中您都有一个空中状态,标记谁在工作,以及他们最后一次接触工作的时间,您应该能够确定工作是否失败,并在合理的超时后恢复工作。 – NinePlanFailed