这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天.
本次课程讲解了关于分布式定时任务,课程从发展历史开始,从Linux命令-CronJob中可以利用简单的定时规则给任务进行定期清理,或者使用SyncLocalCache()函数对任务进行清理,但是利用CronJob只能在linux平台下进行清理。但是利用程序函数可以跨平台进行清理。
在Quartz中,单任务会利用调度器将子任务进行划分,达到单任务的极致划分,但是没有负载均衡。所以在大规模公司中用的较少,从而引入分布式定时任务。
分布式定时任务核心原理共有四层,触发器,调度以及执行,和整体控制管理。
在任务创建时用户会将代码以及触发规则传送至控制台并缓存在DB中,传至定时任务后开始执行,所以任务创建和任务执行可以解耦,当任务创建后给任务执行时,一个任务可能被多次执行,所以执行可能会出现瓶颈,所以可以创建多个执行,一次进行分布式定时,均衡负载使得执行压力减小。
在控制台中,单项任务可以创建多个实例,并记录在任务历史中,每个实例可运行多次,多次得到运行结果。
大部分分布式定时任务都是基于上图,扫描任务并记录在DB数据库中,一部分交给进程处理,并写入延时数据库,在写入延时数据库时改变其状态。防止再次重复扫描。延迟调度后最后写入DB数据库中。
调度任务从数组思维出发,其处理时间复杂度较高,所以转变到树的思维可以将时间复杂度从n降到lgn,最后发现用循环时钟计时任务会很快,但是时钟仅可以创建60个任务,所以要想更多维度不同的任务需要重新定义时间任务计时,将其分为多个不同表盘,每个表盘代表时,分,秒,还可以增加天,日,月,年等,从不同时间维度处理更多任务,此过程时间复杂度块。
整体分布式定时任务需要仔细学习,尤其是了解底层逻辑,认识到触发,调度,执行之间的内在关联以及实现,在实际案例中进行观察以及练习会更容易理解。