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

127 阅读2分钟

分布式定时任务

分布式定时任务 = 自动化 + 定时执行 + 海量数据 + 高效稳定

发展历程

在我们平时使用 Windows 中我们可能会遇到一个这样得情况,我们的网络可能出现问题,需要我们对计算机的网络进行重置,重置完成之后,显示几分钟后计算机会进行重启,这其实就是一个定时任务,我们也可以自定义自己的定时任务在 windows 中,我们可以使用命令

shutdown -s -t 600 

然后把命令的内容保存在一个 .bat 文件当中,我们对文件进行双击之后就可以执行定时任务,我们还可以使用windows 中的计算机管理中系统工具下的任务计划程序,创建我们需要的定时任务

在 Linux 中我们可以使用 Cronjob command 进行任务的创建,在linux 平台下使用简单且稳定可靠,但是只是适用在 Linux 发行版的操作系统之中,也只能进行单台机器的操作

我们还可以使用各个语言提供的方法进行定时任务

      Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                SyncLocalCache();
            }
        },5000, 5 * 60 * 1000);
func main() {
    ticker := time.NewTicker(5 * time.Minute)
    for {
        select {
            case <- ticker.C :
            SyncLocalCache()
        }
    }
}

在业内常见的定时任务框架

  • Xxl-Job - 美团
  • ScheduleX - 阿里巴巴
  • TCT - 腾讯
  • Elastic-Job - 当当网
  • Saturn - 唯品会

Xxl-job 是一个分布式任务调度平台,是一个轻量级的分布式调度框架,核心目标是开发迅速 学习简单 轻量级 易于扩展;支持分片以及任务依赖和子任务依赖

Xxl-job 开源免费,并且轻量级,开箱即用,操作简单,上手快,维护成本低,对中小型企业友好

Schedule-X 是阿里巴巴基于Akka 架构自研发的新一代分布式任务调度平台,提供定时调度 调度任务编排以及分布式批量处理等功能

TCT - 分布式调度服务是腾讯云自主研发的高性能 高可靠通用的分布式任务调度中间件。可以指定时间规则触发调度任务,保障调度任务的可靠有序执行,支持时间表达式 调度任务执行生命周期的管理,用于解决传统定时调度任务单点和并发性的问题

分布式定时任务 & 单机定时任务 两者都可以实现自动化定时 延时 周期任务的调度,但是分布式定时任务可以支持更加庞大的业务体量,它的性能 伸缩性和稳定性更高

分布式定时任务 & 大数据处理引擎 可以对海量的数据进行处理,在性能 伸缩性以及稳定性方面都很高,但是在大数据处理引擎中主要的核心问题并不是分布式定时任务,两者的目的在于大数据需要将源数据进行处理形成结果数据,分布式除了这个还可以使用 HTTP 和 RPC 服务

实现原理

核心框架

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

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

Note:额外地需要增加一个控制台(Admin),进行任务的管理以及干预

20230214214508.png

主要的功能架构

20230214214612.png

控制台

  • 任务 Job 任务的元数据
  • 任务实例 JobInstance 在周期性任务中会生成多个任务实例
  • 任务的结果 Jobresult 任务实例运行的结果
  • JobHistory 更改任务的信息,任务实例的对应任务元数据可以不同

任务元数据是用户对所要执行的任务的一些属性定义(任务的类型 调度时机 执行行为)

任务实例是一个确定的 Job 的一次运行实例

触发器

触发器的主要职责是,对于给定的任务,解析触发的规则,在规定的时间触发任务的调度

触发器设计的一些约束

  • 支持大量任务
  • 支持妙级的任务调度
  • 周期性任务的执行次数
  • 保证秒级扫描的高性能(避免资源的浪费)

触发器的高可用需要解决的核心问题

  • 不同的业务之间的调度相互影响时的处理方法
  • 负责扫描以及触发的机器出现故障的解决方式

思路

  • 在存储上,不同国别 业务进行资源的隔离
  • 运行时,不同国别 业务分开执行
  • 部署时 采用多机房集群部署 避免单点故障的发生,使用锁来保证任务的触发