这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
一、分布式定时任务
定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。
分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
按触发时机分类:
- 定时任务
- 延时任务
- 周期任务
业内定时任务框架
- Xxl-job很大一个优势在于开源且免费,并且轻量级,开箱即用,操作简易,上手快,企业维护起来成本不高,因而在中小型公司使用非常广泛。
- SchedulerX可在阿里云付费使用。它功能非常强大,在阿里巴巴内部广泛使用并久经考验。
- TCT仅在腾讯内部使用,未开源,也未商用。
二、实现原理
分布式定时任务核心要解决触发、调度、执行三个关键问题。
- 触发器:Trigger,解析任务,生成触发事件
- 调度器:Scheduler,分配任务,管理任务生命周期
- 执行器:Executor,获取执行任务单元,执行任务逻辑
除此之外,还需要提供一个控制台(Admin),提供任务管理和干预的功能。
数据流
控制台
基本概念:
- 任务:Job,任务元数据(是用户对任务属性定义,包括任务类型调度时机、执行行为等)。
- 任务实例:Joblnstance,周期任务会生成多个任务实例(是一个确定的Job的一次运行实例。)。
- 任务结果:JobResult,任务实例运行的结果
- 任务历史:JobHistory,用户可以修改任务信息,任务实例对应的任务元数据可以不同,因而使用任务历史存储
触发器
核心职责:给定一系列任务,解析它们的触发规则,在规定的时间点触发任务的调度。
方案:
- 定时扫描 + 延时消息
- 时间轮
- 数据库锁模式
调度器
节点选择:
- 随机节点执行
- 广播执行
- 分片执行