从 XXL-JOB 看主流分布式任务调度平台怎样设计调度中心和执行器这两个核心组件!

云计算 分布式
调度中心和执行器是分布式任务调度平台的两个核心组件,调度中心负责任务触发和调度,执行器负责任务执行和结果反馈。理解了这 2 个核心概念,就可以很容易地理解主流分布式调度平台的设计原理了。

大家好,我是君哥。

分布式任务调度平台执行一次调度任务,一般会经历下面的过程。

图片图片

在上图中,调度中心从注册中心拉取执行器列表,然后选择一个执行器来执行任务,任务执行完成后,执行器会把任务执行结果通知调度中心。

主流的分布式任务调度平台,比如 XXL-JOB、PowerJob 等都设计了调度中心、执行器这两个核心组件。

1.调度中心

调度中心的作用不光是简单的任务触发,还包括管理执行器列表、任务结果管理等。

1.1 任务调度方式

任务调度方式主要包括定时调度和 API 触发调度。

定时调度有两种方式,一种是调度中心在配置的任务执行时间给执行器发送任务调度信号,直接把任务发起。第二种是调度中心给任务执行器发送任务触发时间,任务执行器自己触发,比如使用延迟队列。

API 触发调度一般是调度中心收到外部 API 请求后,发起任务调度。

1.2 任务管理

调度中心可以创建、更新、删除任务。下图来自 XXL-JOB 官网,XXL-JOB 在调度中心配置任务。

图片图片

1.3 任务结果

调度中心监控任务执行结果,查看任务执行日志,对于执行失败的任务也可以采取一些处置措施,比如重新触发任务执行。

1.4 调度时效

定时任务对执行开始时间有要求,这就需要调度中心能够高效地把任务调度请求发出去,不能积压调度任务。

1.5 调度策略

调度策略决定了调度中心选择哪一个执行器来执行任务,比如第一个、最后一个、随机、轮询、广播等。

2.执行器

执行器是分布式任务调度系统中最核心的部分,它是真正执行跑批任务、决定跑批结果的组件。

2.1 执行器注册

执行器要想收到任务触发信号,必须首先在注册中心进行注册,被调度中心成功拉取到。

注册成功后,需要周期性地给注册中心发送心跳,让调度中心感知到。

2.2 集群部署

为了保证整个调度平台的高可用,执行器必须集群部署,这样如果调度中心选择调度的节点出现故障,可以进行重试把信号发送给下一个节点,不用担心任务不能被成功调度。

图片图片

2.3 多线程设计

执行器为了提高执行效率,一般会启动多线程。执行器应该能支持线程数量灵活配置。比如一个数据量比较大的任务,可以配置多线程分段处理。但为了不影响同一个执行器上的其他任务,不能把线程数配置地太高,比如可以使用一半的线程处理当前任务。

对于更加复杂的批量任务,也可以设计成多个执行器参与来提高效率。比如一个任务调度到 4 个执行器执行,每个执行器 4 个线程参与,提高执行效率。

图片图片

2.4 动态扩容

当所有的执行器都满负荷运行,会出现任务排队的情况,如果执行器集群可以动态扩容,就可以增加几个执行器节点,调度中心把任务调度到新的节点上。

2.5 阻塞控制

单个执行器很可能会出现批次任务排队的情况,有必要采取一些阻塞控制策略。比如按照入队顺序依次执行,或者丢弃排队的任务直接给调度中心返回失败。

3 总结

调度中心和执行器是分布式任务调度平台的两个核心组件,调度中心负责任务触发和调度,执行器负责任务执行和结果反馈。理解了这 2 个核心概念,就可以很容易地理解主流分布式调度平台的设计原理了。

责任编辑:武晓燕 来源: 君哥聊技术
相关推荐

2023-11-07 07:56:40

2022-12-29 08:32:50

xxl-job缓存Schedule

2022-01-27 08:44:58

调度系统开源

2023-01-04 09:23:58

2024-08-07 08:15:47

2023-05-08 16:38:46

任务调度分布式任务调度

2023-11-22 10:07:22

2022-06-13 07:43:21

分布式Spring

2021-12-26 00:03:27

响应式编程异步

2020-09-29 19:20:05

鸿蒙

2023-06-26 00:14:28

Openjob分布式任务

2020-11-06 12:12:35

HarmonyOS

2024-09-23 04:00:00

java架构分布式系统

2022-06-20 15:32:55

Stage模型分布式开发

2024-07-31 08:18:40

2019-11-15 10:16:27

分布式任务框架

2021-11-10 16:10:18

鸿蒙HarmonyOS应用

2024-05-23 10:19:57

2022-09-23 13:57:11

xxl-job任务调度中间件

2021-11-29 08:48:00

K8S KubernetesAirflow
点赞
收藏

51CTO技术栈公众号