分布式定时任务那些事儿 | 青训营笔记

52 阅读2分钟

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

一、分布式定时任务

定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。

分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。

按触发时机分类:

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

截图_20230208175634.png

截图_2230208175724.png

业内定时任务框架

截图_20230208180042.png

  • Xxl-job很大一个优势在于开源且免费,并且轻量级,开箱即用,操作简易,上手快,企业维护起来成本不高,因而在中小型公司使用非常广泛
  • SchedulerX可在阿里云付费使用。它功能非常强大,在阿里巴巴内部广泛使用并久经考验
  • TCT仅在腾讯内部使用,未开源,也未商用。

二、实现原理

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

  • 触发器:Trigger,解析任务,生成触发事件
  • 调度器:Scheduler,分配任务,管理任务生命周期
  • 执行器:Executor,获取执行任务单元,执行任务逻辑

除此之外,还需要提供一个控制台(Admin),提供任务管理和干预的功能。

数据流

截图_20230208181617.png

控制台

基本概念:

  • 任务:Job,任务元数据(是用户对任务属性定义,包括任务类型调度时机、执行行为等)。
  • 任务实例:Joblnstance,周期任务会生成多个任务实例(是一个确定的Job的一次运行实例。)。
  • 任务结果:JobResult,任务实例运行的结果
  • 任务历史:JobHistory,用户可以修改任务信息,任务实例对应的任务元数据可以不同,因而使用任务历史存储

触发器

核心职责:给定一系列任务,解析它们的触发规则,在规定的时间点触发任务的调度。

方案:

  • 定时扫描 + 延时消息
  • 时间轮
  • 数据库锁模式

调度器

节点选择:

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

执行器

解决方案对比

截图_20230208183642.png