分布式定时任务|青训营笔记

146 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天

定时任务

自动化+定时执行+海量数据+高效稳定 = 分布式定时任务

分类

linux命令CronJob

image.png

优点:简单方便,稳定

缺点:只能同步一台机器。

用代码维护

比如Java的Timer,Go的Ticker

单机定时任务-ScheduledExecutorService

image.png

优点:有线程池功能

缺点:单机

任务调度-Quartz

image.png

缺点:没有负载均衡,不算分布式。

任务调度

任务调度的背景

在业务系统中有很多这样的场景:

1、账单日或者还款日上午 10 点,给每个信用卡客户发送账单通知,还款通知。如 何判断客户的账单日、还款日,完成通知的发送?

2、银行业务系统,夜间要完成跑批的一系列流程,清理数据,下载文件,解析文件, 对账清算、切换结算日期等等。如何触发一系列流程的执行?

3、金融机构跟人民银行二代支付系统对接,人民银行要求低于 5W 的金额(小额支付)半个小时打一次包发送,以缓解并发压力。所以,银行的跨行转账分成了多个流程: 录入、复核、发送。如何把半个小时以内的所有数据一次性发送?

类似于这种 1、基于准确的时刻或者固定的时间间隔触发的任务,或者 2、有批量数据需要处理,或者 3、要实现两个动作解耦的场景,我们都可以用任务调度来实现。

任务调度工具对比

层次举例特点
操作系统Linux crontab
Windows 计划任务
只能执行简单脚本或者命令
数据库MySQL、Oracle可以操作数据。不能执行 Java 代码
工具Kettle可以操作数据,执行脚本。没有集中配置
开发语言JDK Timer、ScheduledThreadPoolTimer:单线程
JDK1.5 之后:ScheduledThreadPool(Cache、Fiexed、Single):没有集中配置,日程管理不够灵活
容器Spring Task、@Scheduled不支持集群
分布式框架XXL-JOB,Elastic-Job

分布式定时任务原理

  • 控制台(Admin):提供任务管理和干预的功能。
  • 触发器(Trigger):解析任务,生成触发事件。
  • 调度器(Scheduler):分配任务,管理任务生命周期。
  • 执行器(Executor):获取执行任务单元,执行任务逻辑。