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

100 阅读3分钟

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

引例

每年春节前的集卡领红包类游戏如何设计技术方案?

集卡领红包类游戏主要分两部分:

  • 年前定时扫描并计算各用户集卡完成度和预计红包金额,同时需汇总公司预计总支出;
  • 年中定时开奖并发放红包奖励;

技术设计点主要指向分布式定时任务,需要考虑的难点包括:

  • 自动化
  • 定时执行
  • 海量数据处理
  • 稳定执行

定时任务发展历程

  1. 单机定时任务

    • Timer、Ticker:跨平台,仅单机可用
    • ScheduledExecutorService:拥有线程池处理 ,仅单机可用
  2. 任务调度式定时任务框架

    • Quartz:单机任务更优性能,无负载均衡,无分布式并行处理
  3. 分布式定时任务框架

    分布式定时任务框架支持定时任务平台化管理,分布式部署和海量数据处理;分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台, 并实现集群管理调度和分布式部署的一种定时任务的管理方式。

    • 触发时机分类
      1. 定时任务:指定在T时间执行
      2. 延时任务:一次执行完成后,隔T时间后再次触发执行
      3. 周期任务:分隔T时间触发执行一次
    • 分布式定时任务特定
      1. 自动化:全自动完成定时任务的调度和执行
      2. 平台化:基于平台化的思维管控一系列的分布式定时任务
      3. 分布式:在分布式系统环境下运行任务调度,突破单机定时任务的性能瓶颈
      4. 伸缩性:采用集群方式部署,可以随时按需扩缩容
      5. 高可用:单点故障不影响最终任务结果,可以做到故障转移
    • 分布式定时任务执行方式
      1. 单机任务:随机触发一台机器执行任务, 适用于计算量小、并发度低的任务(R1 --> C1)
      2. 广播任务:广播到所有机器上执行同一个任务,比如所有机器一起清理日志(R1 --> C1, C2, C3....Cn)
      3. Map任务:一个任务可以分出多个子任务,每个子任务负责一部分的计算。 适用于计算量大,单机无法满足要求的任务(R --> R1, R2, R3, R4 ---> C1, C2, C3, C4)
      4. MapReduce任务:在Map任务的基础上,还可以对所有子任务的结果做汇总计算,适用于计算量大,并且需要对子任务结果做汇总的任务(R --> R1, R2, R3, R4 ---> C1, C2, C3, C4 --> R)
    • 分布式定时任务框架
      1. Xxl-job:开源免费,推荐
      2. SchedulerX
      3. TCT
      4. Elastic-job
      5. Saturn

分布式定时任务实现原理

  1. 业务模型
    • 任务(Job):任务元数据,定义任务属性,包括调度时机,执行频率
    • 任务实例(JobInstance): 周期任务会生成多个任务实例
    • 任务结果(JobResult):任务实例运行的结果
    • 任务历史(JobHistory):用户可以修改任务信息,任务实例对应的任务元数据可以不同,因而使用任务历史存储
  2. 核心架构
    • 触发器(Trigger):负责解析任务,生成触发事件;通过分布式锁提高可用性
      1. 定期扫描+消息队列延时处理
      2. 时间轮遍历
    • 调度器(Scheduler):负责任务分配,管理任务生命周期
      1. 随机调度执行
      2. 广播执行
      3. 分片执行
    • 执行器(Execute):负责执行任务逻辑
      1. 基于注册中心,可以做到执行器的弹性拓展
      2. 回调
      3. 心跳检测
    • 控制台(Admin):提供管理和干预功能

参考资料

分布式定时任务实现原理 - 掘金 (juejin.cn)