这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
分布式定时任务是工作中必不可少的技能
定义
定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。
分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
执行模式
- 单机任务
- 广播任务
- Map任务
- MapReduce任务(java的hadoop大数据分析)
分布式定时任务发展历史
- Linux命令-CronJob
- 单机定时任务-Timer、Ticker(如go语言time包里的Ticker)
- 单机定时任务-ScheduledExecutorService
- 任务调度- Quartz
- 分布式定时任务
业内流行框架
Xxl-job | SchedulerX | TCT | Elastic-job | Saturn | |
---|---|---|---|---|---|
来源公司 | 美团点评 | 阿里巴巴 | 腾讯 | 当当网 | 唯品会 |
是否开源 | 是 | 否 | 否 | 是 | 是 |
任务编排 | 子任务依赖 | 支持 | 支持 | 不支持 | 不支持 |
任务分片 | 支持 | 支持 | 支持 | 支持 | 支持 |
高可用 | 支持 | 支持 | 支持 | 支持 | 支持 |
故障转移 | 支持 | 支持 | 支持 | 支持 | 支持 |
可视化运维 | 支持 | 支持 | 支持 | 支持 | 支持 |
- 美团点评Xxl-job
- 阿里巴巴SchedulerX
- 腾讯TCT
分布式定时任务核心架构
- 控制台Admin
- 触发器Trigger
- 调度器Scheduler
- 执行器Executor
- 核心架构
- 数据流
- 功能架构
控制台Admin
触发器Trigger
分布式中避免单点故障:通过数据库行锁或分布式锁(Redis锁或Zookeeper锁)实现高可用
方案一:腾讯字节方案——定期扫描+延时消息
方案二:Quartz方案——时间轮
环形数组和链表结合,提高效率,多个轮或者单个轮的倍数来扩大计数
查询和修改的时间复杂度都为O(1)
调度器Scheduler
资源来源
- 业务系统
- 定时任务平台
执行器Executor
业务应用
所有需要定时、延时、周期性执行任务的业务场景,都可以考虑使用分布式定时任务