分布式定时任务那些事儿 | ByteTech笔记

232 阅读3分钟

01 发展历程

  • windows批处理、windows任务计划程序
  • Linux命令CronJob
  • 单机定时任务Timer、Ticker
  • 任务调度-Quartz
  • 分布式定时任务

什么是分布式定时任务?

  • 定时任务:系统为了自动完成特定的任务,实时、延时、周期性完成任务调度的过程
  • 分布式定时任务:把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。

按触发时机分类:

  • 定时任务
  • 延时任务
  • 周期任务

分布式定时任务特点: 自动化、平台化、分布式、伸缩性、高可用

执行方式:

  • 单机任务
  • 广播任务
  • Map任务
  • MapReduce任务

业内流行框架:Xxl-job、SchedulerX、TCT

02 实现原理

2.1 核心架构

分布式定时任务核心要解决触发、调度、执行三个关键问题

image.png

数据流

image.png

功能架构

image.png

2.2 触发器

方案1 定期扫描+延时消息(腾讯、字节方案)

image.png

方案2 时间轮(Quartz)

链表-最小堆-时间轮-多级时间轮

image.png

时间轮由最小堆优化而来

image.png

时间轮的优化:多级时间轮方案(时分秒轮)

高可用

  • 存储上,不同国别、业务做资源隔离
  • 运行时,不同国别、业务分开执行
  • 部署时,采用多机房集群化部署,避免单点故障,通过数据库锁或分布式锁(Redis或Zookeeper)保证任务只被触发一次

2.3 调度器

资源来源

业务系统提供 / 定时任务平台提供

节点选择

随机节点执行、广播执行、分片执行

image.png

N个执行器Executor,M个业务数据区段,最好M>=N,且M是N的整数倍

高级特性

  • 任务编排:使用有向无环图(DAG)进行任务编排
  • 故障转移:确保部分执行单元任务失败时,任务最终成功
    • 分片任务基于一致性hash策略分发任务,当某Executor异常时,调度器会将任务分发到其他Executor
  • 高可用:调度器可以集群部署,做到完全的无状态,靠消息队列的重试机制保障任务一定会被调度

2.4 执行器

image.png

  • 注册、调度、回调、心跳检测
  • 基于注册中心,可以做到执行器的弹性扩缩容

03 业务应用

电商

  • 订单30分钟未付款自动关闭订单
  • 定时给商家、达人发送消息,给用户发送youhuiquan

互动

  • 支付宝集五福
  • 字节春节集卡瓜分红包

游戏

  • 活动结束后批量补发用户未领取的奖励
  • 定期更新游戏内榜单

其他解决方案

发货后超过10天未收货时系统自动确认收货

  • 使用分布式定时任务的延时任务
  • 使用消息队列的延时消息或者定时消息

春节集卡活动统计集卡用户的用户个数和总翻倍数

  • 使用分布式定时任务的MapReduce任务
  • 使用大数据离线处理引擎Hive离线做统计
  • 使用大数据实时处理引擎Flink实时做累计

其他解决方案对比

image.png

04 总结

image.png