分布式定时任务调度框架

1 分布式定时任务框架设计

1.1 所需的功能

一个分布式定时任务,需要具备有以下几点功能:
1)核心功能:定时调度、任务管理、可观测日志
2)高可用:集群、分片、失败处理
3)高性能:分布式锁
4)扩展功能:可视化运维、多语言、任务编排

1.2 整体架构

一个分布式定时任务调度框架一般分为3个模块:
调度中心:负责接收并分配任务,任务调度,核心调度模块。
任务执行:负责执行任务,执行完反馈给调度中心。
监控中心:主要负责节点管理,任务队列管理,监控管理等。

2 常见的分布式调度框架

2.1 QuartZ

2.1.1 基本概念


JOB: 定义自己的任务
JobDetail: 封装 JOB 对象的
scheduler调度器: 管理全部的任务(Scheduler)
Trigger触发器: 开启新的线程执行任务(jobDetail)

2.1.2 调度原理

在Quartz中,线程分为Scheduler调度线程和任务执行线程。
Scheduler调度线程主要有:执行常规调度的线程和执行misfired trigger的线程。
Scheduler有一个QuartzSchedulerThread(Thread的子类)属性,在scheduler实例化的时候,实例化了一个对象,并用ThreadExecutor启动该线程对象。该线程就是调度线程,主要任务就是不停的从JobStore中获取即将被触发的触发器(默认30s调度一次)。

2.1.3 分布式锁

使用数据库分布式事务锁。
1)默认不开启悲观锁,需要在配置文件中
org.quartz.jobStore.acquireTriggersWithinLock=true
2)也可以集成redis实现分布式锁

2.2 tbschedule

2.2.1 基本概念

任务:定义某一个任务,绑定实现IScheduleTaskDealSingle或者IScheduleTaskDealMulti的任务类,同时可以通过设置任务项,将任务同一时间分片。
策略:定义执行的时间,一般采用cron表达式。绑定某个任务以及绑定机器。用于按照某个时间点分配给不同机器执行某个任务。策略可以设置线程组数量,就是使用多少给线程组来同时处理任务。
机器:监控调度机的状态。

2.2.2 调度原理

策略会根据最小ID的机器,分配任务执行。定时器使用Timer实现。

2.2.3 分布式锁

使用zookeeper来做分布式锁,就是机器注册zookeeper后,会查找所有策略中绑定的机器,然后写入到策略节点下面。策略会根据最小ID的机器,分配任务执行。

2.2.4 任务分片

搞清楚几个参数的作用
1)策略中的线程组:该参数是该策略总共启动多少个线程组来执行任务
2)任务中的任务项:可以按照0、1、2、3、4或者A、B、C、D等划分
3)selectTasks(String taskParameter, String ownSign, int taskItemNum, List list, int eachNum)方法
其中 List list就是分配到不同线程组的任务项。
那么任务分片就是根据设定的任务项,将其分配到不同的线程组中实现分片功能。

2.3 Schedulerx2.0

分布式任务调度SchedulerX是阿里巴巴自研的基于Akka架构的分布式任务调度平台,兼容开源XXL-JOB、ElasticJob,支持Cron定时、一次性任务、任务编排、分布式执行批量任务等功能,具备高可用、可视化、可运维、低延时等能力。

2.4 elastic-job

2.4.1 基本概念

elasti-job分为2独立2大块,一个是lite-core(核心去中心化的调度),一个是cloud(监控平台)。

schedule:是会选出一个leader,作为每次任务执行时,分配任务(包括分片)的机器
job:是真正执行任务
Simple类型作业:意为简单实现,未经任何封装的类型。需实现SimpleJob接口。该接口仅提供单一方法用于覆盖,此方法将定时执行。与Quartz原生接口相似,但提供了弹性扩缩容和分片等功能。
Dataflow类型作业:Dataflow类型用于处理数据流,需实现DataflowJob接口。该接口提供2个方法可供覆盖,分别用于抓取(fetchData)和处理(processData)数据。(类似tbschedule的seletTask)
Script类型作业:Script类型作业意为脚本类型作业,支持shell,python,perl等所有类型脚本。只需通过控制台或代码配置scriptCommandLine即可,无需编码。执行脚本路径可包含参数,参数传递完毕后,作业框架会自动追加最后一个参数为作业运行时信息。

2.4.2 调度原理


定时任务触发时,如需重新分片,则通过主服务器分片,分片过程中阻塞,分片结束后才可执行任务。如分片过程中主服务器下线,则先选举主服务器,再分片

2.4.3 分布式锁

使用zookeeper来做分布式锁,就是机器注册zookeeper后,会选出leader,然后做分配工作,最后执行

2.4.4 分片原理

AverageAllocationJobShardingStrategy:基于平均分配算法的分片策略,也是默认的分片策略。
OdevitySortByNameJobShardingStrategy:根据作业名的哈希值奇偶数决定IP升降序算法的分片策略。
RotateServerByNameJobShardingStrategy:根据作业名的哈希值对服务器列表进行轮转的分片策略。

2.4.5 与quartz的关系

elastic-job使用了quartz的调度机制,内部原理一致,他可以看作是quartz的一个扩展实现,使用注册中心(zookeeper)替换了quartz的jdbc数据存储方式,此外,elastic-job又支持分片等特殊功能。对应的概念:

Job LiteJob
Trigger cron
Scheduler JobScheduler

底层其实使用LiteJob 实现了quartz的Job接口,在JobScheduleController.java创建创建trigger。

2.5 xxl-job

2.5.1 基本概念


调度中心:一个用于发布任务的中心,可以控制任务启动和停止,已经维护监控注册和日志
执行器:用于执行任务的客户端,调度中心会根据注册执行器,按照算法分配任务执行。执行器有一个appName,与调度中心的执行器管理的appName对应,名称一致才会分配任务
任务:设置任务、执行策略、分片机制、执行器等属性,其中执行器与执行器管理中选择一个执行器名称,这样就可以分配到对应appName的执行器。

2.5.2 调度原理

  • 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务,实际上是一台内嵌Server,默认端口9999;
  • 2、“执行器”执行任务逻辑;
  • 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务,是针对执行器开放一套API服务;#### 2.5.3 分布式锁

2.5.4 分片原理

执行器集群部署时,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;

2.6 LTS(light-task-scheduler)

3 serverless解决方案

利用容器化,定时启动执行器,执行任务。

4 方案对比

分布式定时任务调度框架相关推荐

  1. ElasticJob分布式定时任务调度框架以及生产遇到的问题

    ElasticJob分布式定时任务调度框架 1:maven配置 2:客户端xml配置 3:测试类 4:重点: 5:总结 1:maven配置 <!--elastic-job--><de ...

  2. python分布式任务调度_分布式定时任务调度框架

    1. 目标 把定时任务通过集群的方式进行管理调度,并采用分布式部署,保证系统的高可用,提高了容错.那么如何保证定时任务只在集群的某一个节点上执行,或者一个任务如何拆分为多个独立的任务项,由分布式的机器 ...

  3. 分布式定时任务调度框架Quartz

    文章目录 一.Quartz引言 二.Quartz使用 2.1 导入依赖 2.2 定义Job 2.3 API测试 2.3.1 细节 2.4 配置 2.5 核心类说明 三.Trigger触发器 3.1 S ...

  4. 分布式定时任务调度框架实践

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 分布式任务调度框架几乎是每个大型应用必备的工具,本文介绍了任务调度框架使用的需求背景和痛点,对业界普遍使用的开源分布式任务调度框架的 ...

  5. 实战技术:分布式定时任务调度框架实践

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 一.业务背景 1.1 为什么需要使用定时任务调度 (1)时间驱动处理场景:整点发送优惠券,每天更新收益,每天刷新标签数据和人群数据. ...

  6. 一文揭秘定时任务调度框架quartz

    之前写过quartz或者引用过quartz的一些文章,有很多人给我发消息问quartz的相关问题, quartz 报错:java.lang.classNotFoundException quartz源 ...

  7. 分布式定时任务调度中心

    分布式定时任务调度中心选型 目前主流的开源分布式定时任务调度中心据我了解主要是XXL-JOB和ELASTIC-JOB. 对比: 以上框架实现的功能大体都差不多,下面说下我选择XXL-JOB的原因: 1 ...

  8. 分布式定时任务调度实战

    目录 1.为什么需要定时任务 2.定时任务调度框架 2.1 单机 2.2 分布 3.xxl-job和elastic-job对比 3.1 支持集群部署方式 3.2 多节点部署任务执行方式 3.3 日志可 ...

  9. TBSchedule淘宝开源定时任务调度框架(附客户端源码demo)

    淘宝开源定时任务调度框架 下载TBSchedule源码svn地址:code.taobao.org/p/tbschedule/src/trunk/ 内容包括两部分:TBSchedule源码及开发依赖包t ...

  10. 遇见未知的Saturn |准备篇:分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)

    1.业务场景 保险人管系统每月工资结算,平安有150万代理人,如何快速的进行工资结算(数据运算型) 保险短信开门红/电商双十一 1000w+短信发送(短时汇聚型) 工作中业务场景非常多,所涉及到的场景 ...

最新文章

  1. 2.27 MapReduce Shuffle过程如何在Job中进行设置
  2. 2018.1.15 6周1次课
  3. linux下的 ifconfig 和 ip 命令
  4. 机器人整机主要产品规格参数
  5. ubuntu -- 不输入密码执行sudo
  6. C 基本语法 | 菜鸟教程
  7. Ubuntu 开机自动挂载硬盘
  8. Java中的垃圾回收器的类型概述 《对Java的分析总结》(六)
  9. socket编程持续交流java_socket编程的简单问题
  10. 深度操作系统 Deepin 20 BETA 发布
  11. 如何让政府性论坛外链最大利益化
  12. POJ 1984 Navigation Nightmare
  13. cocos2dx 圆盘抽奖_Cocos2D-X转盘游戏制作教程:博彩大转盘
  14. 视频压缩工具及使用方法
  15. Android开发入门基础
  16. 预测房价实验-房价数据集
  17. c罩杯尺码_B、C罩杯有多大?
  18. c语言 文件读取z整行操作,C语言文件操作函数之ferror feof clearerr
  19. Springboot_vue摄影作品图片展示交流平台
  20. 基于springboot在线考试报名系统毕业设计源码031706

热门文章

  1. win10易升_win10性能模式是什么?怎么开启?
  2. 用两个队列实现一个栈
  3. 《上海悠悠接口自动化平台》-1.新增API 与 各参数的描述
  4. 冒泡排序代码实现与详解
  5. 微软:2022 年开始,Win10 PC 设备才能免费升级 Win11
  6. Oracle Exadata初探
  7. 关于主机的思维导图_【思维导图大咖分享干货】关于思维导图中插图的用法细解!!...
  8. java 文件上传到服务器_Java上传文件到服务器端的方法
  9. vyos配置src-nat
  10. 【大数据分析】Spark介绍