1.调度平台简介2.xxl-job简介3.代码模拟演示
1.调度平台简介
为何须要调度平台
其实是程序的发展开源调度系统,须要引入统一任务整治
1,每位服务器各个服务下的任务管理混乱,生命周期未能统一协调管理
2,定时任务运行异常告警未能统一对接
3,随着时间下降,当定时任务达到几千上万的时侯,定时任务就十分无法管理,线上跑了多个定时任务,每位定时任务哪些时侯运行,属于那个应用和那个开发负责等等问题显得很难解决。
1.1程序现况
业务的大幅扩张,造成单机服务未能满业务需求。这时侯须要对单体大服务进行切开,服务迈向SOA(微服务化)
这些场景中,调度任务的布署如上图所示。容易造成job的内容相互干扰,也不能统一管理任务。所以统一配置任务调度平台变得十分必要。
1.2有什么开源调度平台
xxl-job#/轻量级分布式任务调度框架
Elastic-Job分布式弹性作业框架
opencron建立且通用的开源定时任务调度系统(linux系统)
LTS,light-task-scheduler分布式任务调度框架
Uncode-Schedule分布式任务调度组件
1.3调度平台对比
功能特点
1.4对比结果
综上,xxl-job是较好的选择方案,可满足绝大多数配置需求,也轻量化,依赖也低。简单动态自定义任务参数故障转移Rolling实时日志
2.xxl-job简介
1,概述特点
2,背景发展
3,构架设计
4,快速入门
2.1概述特点
概述
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩充。现已开放源代码并接入多家公司线上产品线,开箱即用。
特点
1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
2、动态:支持动态更改任务状态、启动/停止任务,以及中止运行中任务,即时生效;
3、调度中心HA(中心式):调度采用中心式设计,“调度中心”基于集群Quartz实现并支持集群布署,可保证调度中心HA;
4、执行器HA(分布式):任务分布式执行,任务"执行器"支持集群布署,可保证任务执行HA;
5、注册中心:执行器会周期性手动注册任务,调度中心将会手动发觉注册的任务并触发执行。同时,也支持自动录入执行器地址;
6、弹性扩容缩容:一旦有新执行器机器上线或则下线,上次调度时将会重新分配任务;
7、路由策略:执行器集群布署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不常常使用、最近最久未使用、故障转移、忙碌转移等;
8、故障转移:任务路由策略选择"故障转移"情况下,假如执行器集群中某一台机器故障,将会手动Failover切换到一台正常的执行器发送调度恳求。
9、阻塞处理策略:调度过分密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
10、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务;
11、任务失败重试:支持自定义任务失败重试次数,当任务失败时将会根据预设的失败重试次数主动进行重试;其中分片任务支持分片细度的失败重试;
12、任务失败告警;默认提供电邮形式失败告警,同时预留扩充插口,可方面的扩充邮件、钉钉等告警形式;
13、分片广播任务:执行器集群布署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可按照分片参数开发分片任务;
14、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群因而动态降低分片数目,协同进行业务处理;在进行大数据量业务操作时可明显提高任务处理能力和速率。
15、事件触发:不仅"Cron形式"和"任务依赖形式"触发任务执行之外,支持基于风波的触发任务形式。调度中心提供触发任务单次执行的API服务,可依照业务风波灵活触发。
16、任务进度监控:支持实时监控任务进度;
17、Rolling实时日志:支持在线查看调度结果,而且支持以Rolling形式实时查看执行器输出的完整的执行日志;
18、GLUE:提供WebIDE,支持在线开发任务逻辑代码,动态发布,实时编译生效,省略布署上线的过程。支持30个版本的历史版本回溯。
19、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python、NodeJS、PHP、PowerShell等类型脚本;
20、命令行任务:原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只须要提供命令行即可;21、任务依赖:支持配置子任务依赖,当父任务执行结束且执行成功后将会主动触发一次子任务的执行,多个子任务用冒号分隔;
22、一致性:“调度中心”通过DB锁保证集群分布式调度的一致性,一次任务调度只会触发一次执行;
23、自定义任务参数:支持在线配置调度任务入参,即时生效;
24、调度线程池:调度系统多线程触发调度运行,确保调度精确执行,不堵死塞;
25、数据加密:调度中心和执行器之间的通信进行数据加密,提高调度信息安全性;
26、邮件报案:任务失败时支持短信报案,支持配置多电邮地址群发报案电邮;
27、推送maven中央库房:将会把最新稳定版推送到maven中央库房,便捷用户接入和使用;
28、运行报表:支持实时查看运行数据,如任务数目、调度次数、执行器数目等;以及调度报表,如调度日期分布图,调度成功分布图等;
29、全异步:任务调度流程全异步化设计实现开源调度系统,如异步调度、异步运行、异步反弹等,有效对密集调度进行流量削峰,理论上支持任意时长任务的运行;
30、跨平台:原生提供通用HTTP任务Handler(Bean任务,"HttpJobHandler");业务方只须要提供HTTP链接即可,不限制语言、平台;
31、国际化:调度中心支持国际化设置,提供英文、英文两种可选语言,默认为英文;
32、容器化:提供官方docker镜像,并实时更新推送dockerhub,进一步实现产品开箱即用;
2.2背景发展
发展
于2015年中,在github上创建XXL-JOB项目库房并递交第一个commit,骤然进行系统结构设计,UI选型,交互设计……
于2015-11月,XXL-JOB总算RELEASE了第一个大版本V1.0linux安装教程,此后我将之发布到OSCHINA,XXL-JOB在OSCHINA上获得了
"第62期开源中国源创会"听众反响热烈。
"2017年度最受欢迎中国开源软件"评选步入了前30强。
"2017码云最火开源项目"评选进去了前20强。
"2018年度最受欢迎中国开源软件"评选排行第19名。
至今,XXL-JOB已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和大数据作业等,截至最新统计时间为止,XXL-JOB已接入的公司(155家+)包括不限于:
-1、大众点评;
-2、山东学而网路科技有限公司;
-3、安徽慧通互联科技有限公司;
-4、人人聚财金服;
-5、上海棠棣信息科技股份有限公司
-6、运满满
-7、米其林(中国区)
-8、妈妈联盟
-9、九樱天下(上海)信息技术有限公司-
10、万普拉斯科技有限公司(一加手机)-……
2.3构架设计
构架图
调度模块(调度中心):负责管理调度信息百度网盘LINUX,根据调度配置发出调度恳求,自身不承当业务代码。调度系统与任务前馈,增强了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删掉,GLUE开发和任务报案等,所有上述操作还会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。
执行模块(执行器):负责接收调度恳求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护愈发简单和高效;接收“调度中心”的执行恳求、终止恳求和日志恳求等。
2.4快速入门
环境搭建
1,mysql安装
2,mysql数据库初始化
3,zookeeper安装
4,xxl-job源码编译打包(或Docker镜像形式)
5,xxl-job调整配置文件配置
6,启动调度平台,添加执行器与job
7,顾客端引入xxl-job相关的maven的jar
8,xxl-job调用java的job
3.代码模拟演示
1,调度平台操作手册
2,调度BEAN模式
3,操作演示
3.1调度平台操作手册
执行器管理
新增|编辑|删掉
任务管理
执行|启动|日志|新增|编辑|删掉
新增任务
日常查看
启动/停止任务
可对任务进行“启动”和“停止”操作。须要注意的是,此处的启动/停止仅针对任务的后续调度触发行为,不会影响到早已触发的调度任务
自动触发一次调度
点击“执行”按钮,可自动触发一次任务调度,不影响原有调度规则。
查看调度日志
点击“日志”按钮,可以查看任务历史调度日志。在历史调入日志界面可查看每次任务调度的调度结果、执行结果等,点击“执行日志”按钮可查看执行器完整日志。
查看执行日志
击执行日志左侧的“执行日志”按钮,可跳转至执行日志界面,可以查看业务代码中复印的完整日志,如右图;
中止运行中的任务
仅针对执行中的任务。在任务日志界面,点击左侧的“终止任务”按钮,将会向本次任务对应的执行器发送任务中止恳求,将会中止掉本次任务,同时会清空掉整个任务执行队列。
中止运行中的任务
任务中止时通过"interrupt"执行线程的形式实现,将会触发"InterruptedException"异常。因而假如JobHandler内部catch到了该异常并消化掉的话,任务中止功能将不可用。
因而,倘若遇见上述任务中止不可用的情况,须要在JobHandler中应当针对"InterruptedException"异常进行特殊处理(向下抛出),正确逻辑如下:
try{
//TODO
}catch(Exceptione){
if(einstanceofInterruptedException){
throwe;
}else{
logger.warn("{}",e);
但是,在JobHandler中开启子线程时,子线程也不可catch处理"InterruptedException",应当主动向下抛出。
调度中心HA(集群)
调度中心支持集群布署,提高调度系统容灾和可用性。
调度中心集群布署时,几点要求和建议:
DB配置保持一致;
登录帐号配置保持一致;
集群机器时钟保持一致(单机集群忽略);
建议:推荐通过nginx为调度中心集群做负载均衡,分配域名。调度中心访问、执行器反弹配置、调用API服务等操作均通过该域名进行。
基于Quartz的集群方案,数据库选用Mysql;集群分布式并发环境中使用QUARTZ定时任务调度,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,假如触发器的名称和执行时间相同,则只有一个节点去执行此任务。
执行器集群
执行器支持集群布署,提高调度系统可用性,同时提高任务处理能力。
执行器集群布署时,几点要求和建议:
执行器反弹地址(xxl.job.admin.addresses)须要保持一致;执行器按照该配置进行执行器手动注册等操作。同一个执行器集群内AppName(xxl.job.executor.appname)须要保持一致;调度中心依据该配置动态发觉不同集群的在线执行器列表。
3.2调度BEAN模式
顾客端配置
1,BEAN模式
3.3操作演示
1,添加执行器
2,配置任务
3,实现job
4,执行一次
5,定时执行
6,停用任务
7,停止任务
8,执行器(job)集群布署
谢谢你们观看!
如有错误请强调相互交流,让鄙人也学习学习,感谢!