实时处理并反馈给用户是系统的主要内容,但有时也会遇到非实时的任务需求,比如在确定的时间点发布重要公告,或者需要在用户做了一件事情的几分钟后对其作出特定动作,比如发个优惠券。
如果业务规模比较小,有时也可以通过数据库配置轮询来对这种任务进行简单处理,但一旦上了规模,就要寻找更好的解决方案。
一般有两种思路来解决这个问题:
- 实现一套类似 crontab 的分布式定时任务管理系统
- 实现一个支持定时发送消息的消息队列
两种思路衍生出了一些不同的系统,但本质都差不多,都是需要实现一个定时器(timer)。
在单机的场景下定时器其实并不少见,如在和网络数据库连接时会调用SetReadDeadline()函数,就是在本地创建一个定时器,在到达指定的时间后,我们会接收到定时器的通知,告诉我们时间已到,如果此时读取未完成,就可以认为是发生了网络问题,从而中断读取。
下面从定时器开始, 探究延时任务系统的实现。
最后编辑: kuteng 文档更新时间: 2022-03-29 17:59 作者:kuteng