[Java 探索者之路] 一个大厂都在用的分布式任务调度平台
温馨提示:这篇文章已超过385天没有更新,请注意相关的内容是否还可用!
分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统,在此环境下,各个任务可以在独立的节点上运行。它有助于提升资源利用率,增强系统扩展性以及提高系统对错误的容忍度。
文章目录
- 1. 分布式任务调度平台
- 1. 基本概念
- 1.1 任务调度
- 1.2 分布式计算
- 2. 分布式任务调度平台的功能
- 3. 分布式任务调度平台的应用场景
- 4. 简而言之
- 2. 什么是 xxl-job
- 2.1 XXL-JOB的架构
- 3. xxl-job 的简单使用
- 1. 源码拉取
- 2. 启动 db
- 3. 初始化调度中心数据库
- 4. 修改调度中心的数据库配置以及 logback 的日志地址
- 5. 成功启动调度中心
- 6. 打开调度中心的 web 页面
- 7. 启动示例执行器代码
- 8. 随便找一个任务注册
- 9. 查看日志信息,发现执行结果失败了
- 10. 回去看一眼源码,发现是
1. 分布式任务调度平台
1. 基本概念
1.1 任务调度
任务调度,是指在多任务的环境下,合理地分配系统资源,调度各个任务在什么时候,由哪一个处理器处理,以达到满足用户需求、提高系统资源利用率、提高系统吞吐量的目的。
1.2 分布式计算
分布式计算是指多个计算机系统之间通过网络连接,共享系统资源来实现高性能计算的技术。这种计算技术可以应对大数据量、高并发量、高I/O的场景。
2. 分布式任务调度平台的功能
分布式任务调度平台主要用于管理和调度任务,其主要功能包括:
- 任务调度:按照预设的规则(如:时间点、时间间隔等)触发任务的执行。
- 负载均衡:根据系统的负载情况,自动调整任务在各节点间的分配,均衡各节点的负载。
- 容错处理:当某个节点出现故障时,能自动将该节点上的任务转移到其他节点上执行。
- 任务监控:能够实时监控任务的运行状况,如运行时间、运行结果等。
3. 分布式任务调度平台的应用场景
以下是一些常见的应用场景:
- 定时任务:在特定时间执行某项任务,例如每天晚上12点备份数据库。
- 周期性任务:周期性地执行某项任务,例如每隔一小时统计网站的访问量。
- 流量控制:在系统流量大量增长时,分布式任务调度平台可以按照预定的规则,调度更多的资源来处理任务,以应对流量峰值。
总的来说,分布式任务调度平台是大型分布式系统不可或缺的一部分,是分布式环境中任务管理的关键组件。
4. 简而言之
分布式调度平台,就是有个老大决定一个定时任务在多台机器中的哪一台机器执行。
2. 什么是 xxl-job
XXL-JOB是一个全功能、高扩展性的开源分布式任务调度框架,也是一个优秀的定时任务调度平台,给开发者带来便捷的定时任务管理和控制能力。它的核心目标是开发迅速、学习简单、轻量级、易扩展。
2.1 XXL-JOB的架构
XXL-JOB的系统架构设计清晰明了,可以粗略的分为三层:
- 调度中心:调度中心是XXL-JOB的核心,负责触发调度操作,同时提供操作界面。
- 执行器:执行器是任务运行的载体,负责接收调度中心的触发信号并执行相应的任务。
- 调度数据库:用于记录调度信息,如任务信息、调度日志等。
值得一提的是,XXL-JOB支持自定义任务处理逻辑,得益于这一点,它能用于各种场景,例如常见的数据同步、数据清洗等。
3. xxl-job 的简单使用
进入(xxl-job 的官网) ,如果想了解下的可以了解下,不想了解的就直接开始吧。
因为是开源项目,所以我接下来也是直接拉取的源码进行实验。如果是线上环境建议使用容器进行集群部署。
1. 源码拉取
- 打开 github 官网,选择 realease 版本,因为 master 可能存在不稳定代码,但是实验嘛,其实也无所谓。https://github.com/xuxueli/xxl-job/
- 获取到下载链接进行下载
- 拉取到的项目结构大概是以下这样,其中 docker目录是我 docker-compose的数据库相关文件,方便测试。
以下是我的 docker-compose相关文件信息
2. 启动 db
进入到指定目录 docker 目录, 一键启动目录
3. 初始化调度中心数据库
复制源码文件中的 db 文件到数据库中执行初始化。
我这里就直接到 http://127.0.0.1:3307phpmyadmin 进行数据库操作了。
执行前后
4. 修改调度中心的数据库配置以及 logback 的日志地址
5. 成功启动调度中心
6. 打开调度中心的 web 页面
浏览器打开 http://127.0.0.1:8080/xxl-job-admin/, 输入初始账号 admin 密码 123456
登录成功
7. 启动示例执行器代码
可以看到启动了两个服务分别在 9998的无框架服务以及 9999的 spring 项目。回到调度中心的 web 页面,你会发现两个执行器已经自动注册到了调度中心。
在数据库中的表现为
此时,假如我们去修改其中一个调度器的名称,重新启动会怎样呢?
可以看到只剩 9999 的服务
这时候我们需要手动把新的执行器添加上。
刷新可以看到新的执行器自动注册
8. 随便找一个任务注册
启动任务
9. 查看日志信息,发现执行结果失败了
10. 回去看一眼源码,发现是

![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/b9f7261ca941185bf79742386c5e6b39.jpeg)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/6b6c72dc1550473419903e0023733f61.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/da7c32ff63bbe3684b79f8725540d609.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/f4c16dda1ecebdf6f5a70fa39b94b91e.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/24de39035d56fbb2da91721c64033ebe.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/58e48e70b454c12ae698750d5e15727c.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/efc2a3d4f8e56b58e5bac9195d574f5d.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/97da6fd9856ef8c5b2d44090827d9e15.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/632d6279c2cd84cc82834618d01d4dc3.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/f860a238c16cf95bc53070dd419a11f6.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/a34878e9197289bc2eedfdce6245f041.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/8d17a1ea6d0a7f1dea36448f33c99008.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/f90ac4810f5faba7598399d8ff7993b7.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/c690fa52ac1db190706734316b26a8a3.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/07260f63359401dc33d2943c06193f2e.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/691547cd106049d3fd5bcb002f8953a6.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/c476969c3495f51915300f416dbd3ecd.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/c6744cf78ee7e25767452beae2b4e85b.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/308f538479394bfe749f9a09e1d36898.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/6fa50103bc85d7ffbee2bd0f3024355f.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/d93ff9c0d194ae8cb95ba9679af17709.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/693f8580b831af1e17f67b96c84a429f.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/f6aa01bad072025e5a59d5e36a10c9fc.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/3f20948c96f5e1c3ac2add17b074fcab.png)
![[Java 探索者之路] 一个大厂都在用的分布式任务调度平台](https://img-blog.csdnimg.cn/img_convert/89422053301ff68eb7b70f012117d4b8.png)