这是我参与「第五届青训营」伴学笔记创作活动的第12天。本篇为第五届字节跳动青训营-寒假专场-后端基础课程的笔记。
定时任务背景
从最简单的说起:如何在一台机器实现定时任务,大致有以下方法:
- 在 windows里面,我们新创建一个bat文件,里面写好一段代码,比如10分钟后关机,shutdown -s -t 60。然后双击大功告成
- liinux也有自带 corn表达式
但是上面两种方式都无法跨平台,想要解决,就可以通过代码来 实现。
- Timer类的定时任务,这样对资源利用不好
- 调度线程池,可以。
然而,上面的还是不完美,因为生产环境的部署往往都是集群模式,而我们一些任务为了避免数据重复,只希望在某一台机器进行。这样,分布式定时任务就出现了。
分布式定时任务
-
定义
- 定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。
- 分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
-
特点
-
执行模式
- 单机任务
- 广播任务
- Map任务
- MapReduce任务
分布式定时任务核心要解决触发调度执行3个关键问题
- 触发器: 解析任务生成触发事件
- 调度器:分配任务管理任务生命周期
- 执行器:获取任务执行单元执行任务逻辑
对于互联网大厂是采用轮询 DB,然后选出距离时间前1个小时的数据,然后投递mq延时消息。便达到了分布式定时任务的效果。