这是我参与「第五届青训营 」笔记创作活动的第22天
分布式定时任务
春节季卡瓜分20亿
- 用户规模 :亿级
- 资金规模:亿级
- QPS:百万级
要求:自动化+定时执行+海量数据+高效稳定 = 分布式定时任务
发展历程
Windows任务计划程序
- 10分钟后自动关机
- 桌面空白处新建文本文档
- 更改文件名和后缀为"自动关机.bat"
- 修改文件内容为"shutdown -s -t 600",代表10分钟后关机
- 双击运行该批次处理文件,电脑将会在10分钟之后自动关机
- 10点自动疫情打卡
- ...
Linux命令 -CronJob
单机定时任务 -Timer、Ticker -ScheduledExecutorService
- ScheduledExecutorService
- 拥有线程池
- 仅单机可用
Quartz
- 单任务极值控制
- 没有负载均衡机制
分布式定时任务
- 平台化管理
- 分布式部署
- 支持海量数据
什么是分布式定时任务?
- 定时任务
- 系统为了自动完成特定任务,实时、延时、周期性完成任务调度过程
- 分布式定时任务
- 把分散的,可靠性差的定时任务纳入统一的凭条,并实现集群管理调度和分布式部署的一种定时任务的管理方式
执行方式
- 单机任务
- 随机出发一台机器执行任务,适用于计算量小,并发度低的任务
- 广播任务
- 广播到所有机器上执行同一个任务,比如所有机器一起清理日志
- Map任务
- 一个任务可以分出多个子任务,每个子任务负责一部分的计算。适用于计算量大,单机无法满足要求的任务
- MapReduce任务
- 在Map的基础上,对所有子任务结果做汇总计算,适用于计算量大,并且对子任务结果做汇总的任务
主流框架
- Xxl-job
- SchedulerX
- TCT
分布式定时任务VS单机定时任务
- 关系
- 都可以实现自动化的定时,延时,周期性任务调度
- 差异
- 分布式定时任务可以支撑更大的义务题量
- 分布式定时任务的性能,伸缩性,稳定性更高
VS大数据处理引擎
-
关系
- 都可以对海量数据做处理
- 性能、伸缩性、稳定性都很高
-
差异
- 定时并不是大数据处理引擎要解决的核心问题‘
- 大数据处理引擎往往致力于将源数据处理成结果数据,分布式定时任务除了能做这个之外,还可以调用HTTP和RPC服务
核心架构
分布式定时任务核心要解决触发、调度、执行三个关键问题
- 触发器:Trigger,解析任务,生成出发时间
- 调度器: Scheduler,分配任务,管理任务生命周期
- 执行器:Executor,获取执行任务单元,执行任务逻辑
除此之外,还需要提供一个控制台(Admin)
控制台
基本概念
- 任务
- job,任务元数据
- 用户对于任务属性的定义,包括任务类型调度实际,执行行为等
- 任务实例
- jobinstance,任务运行的实例
- 是一个确定的job的一次运行实例
- 任务结果
- jobresult,任务实例运行的结果
- 任务历史
- jobhistory,用户可以修改任务信息,任务实例对应的任务元数据可以不同,因而使用任务历史存储
触发器
-
核心职责
- 给定一系列任务,解析它们的出发规则,在规定的时间点出发任务的调度
-
设计约束
- 需要大量任务
- 需支持秒级的调度
- 周期任务需要多次执行
- 需保证扫描的高性能,并避免资源浪费
-
方案
- 定式扫描+延时消息(腾讯字节方案)
- 时间轮(Quartz所用方案)
-
高可用
- 不同业务之间,任务调度相互影响怎么办?
- 负责扫描和出发的机器挂了怎么办?
- 解法思路:
- 存储上,不同国别,业务做资源隔离
- 运行时,不同国别,业务分开执行
- 部署时,采用多机房集群化部署,避免单点故障,通过数据库锁或分布式锁保证任务只被出发一次
-
问题引出
- 单Trigger模式
- Trigger集群
- 在触发调度之前,更新数据库中JobInstabce的状态,成功抢锁才会触发调度
调度器
- 资源来源
- 业务系统提供机器资源
- 使用该方案的公司:阿里、美团、字节
- 优点
- 任务执行逻辑与业务系统共用同一份资源、录用率更高
- 缺点
- 更容易发生定时任务脚本影响在线服务的事故
- 不能由定时任务平台控制扩缩容
- 定时任务平台提供机器资源
- 优点:
- 任务执行逻辑与业务系统提供的在线服务隔离,避免互相影响
- 可以支持优雅的扩缩容
- 缺点
- 消耗更多机器资源
- 业务系统提供机器资源
- 结点选择
- 随机结点执行
- 广播执行
- 分片执行
- 按照用户自定义的要求去做拆分
- 任务分片
- 通过任务分片来提高任务执行的效率和资源的利用率
- 任务编排
- 使用有向无环图DAG进行可视化任务编排
- 故障转移
- 确保部分执行单元任务失败时,任务最终成功