学习空间任务调度js css html

分布式定时调度-xxl-job

2022-11-14  本文已影响0人  AC编程

一、定时任务概述

1.1 定时任务认识
1.1.1 什么是定时任务

定时任务是按照指定时间周期运行任务。使用场景为在某个固定时间点执行,或者周期性的去执行某个任务,比如:每天晚上24点做数据汇总,定时发送短信等。

1.1.2 常见定时任务方案
1.2 分布式定时任务
1.2.1 遇到什么问题

上述的定时任务都是集中式(单体项目使用)的定时任务,在分布式中将会面临一些问题或不足

1、业务量大,单机性能瓶颈需要扩展
2、多台机器部署如何保证定时任务不重复执行
3、定时任务时间需要可调整,可以暂停
4、机器发生故障down机,定时任务依然可用,如何实现故障转移
5、定时任务,执行日志是否可监控

1.2.2 分布式定时任务xxl-job

XXL-JOB是一个分布式任务调度平台,于2015问世,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。其具备且不止如下能力

二、XXL-JOB初体验

2.1 官网
2.2 xxl-job架构设计
2.2.1 设计思想

将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性。

2.2.2 架构设计图

xxl-job分为 调度中心和执行器两大模块

1.调度模块(调度中心)

负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover(故障转移)。

2.执行模块(执行器)

负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;接收“调度中心”的执行请求、终止请求和日志请求等。

3.调度中心高可用

基于数据库的集群方案,数据库选用Mysql;集群分布式并发环境中进行定时任务调度时,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。

4.并行调度

调度采用线程池方式实现,避免单线程因阻塞而引起任务调度延迟。XXL-JOB调度模块默认采用并行机制,在多线程调度的情况下,调度模块被阻塞的几率很低,大大提高了调度系统的承载量。XXL-JOB的不同任务之间并行调度、并行执行。XXL-JOB的单个任务,针对多个执行器是并行运行的,针对单个执行器是串行执行的。同时支持任务终止。

5.执行器(任务)高可用

执行器如若集群部署,调度中心将会感知到在线的所有执行器,如“127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999”。多个执行器可以选择“路由策略”来采用轮询,随机等方式进行多机器调度。当任务”路由策略”选择”故障转移(FAILOVER)”时,当调度中心每次发起调度请求时,会按照顺序对执行器发出心跳检测请求,第一个检测为存活状态的执行器将会被选定并发送调度请求。调度成功后,可在日志监控界面查看“调度备注”

2.3 xxl-job安装
2.3.1 下载源码

请下载项目源码并解压,使用IDEA工具导入项目,源码仓库地址,

项目代码结构如下:

1
2.3.2 导入数据库

打开项目代码,获取 “调度数据库初始化SQL脚本” 并执行即可。“调度数据库初始化SQL脚本” 位置为: /xxl-job/doc/db/tables_xxl_job.sql ,数据库名:xxl_job

2.3.3 启动调度中心

打开 xxl-job-admin 的配置文件,/xxl-job/xxl-job-admin/src/main/resources/application.properties 对调度中心进行配置,重要配置如下

然后启动调度中心 ,执行 XxlJobAdminApplication#main 方法 , 启动之后,浏览器访问 http://localhost:18080/xxl-job-admin/jobinfo?jobGroup=2 ;注意URL中有个上下文路径。默认登录账号 “admin/123456”, 登录后运行界面如下图所示。

2
2.3.4 配置部署“执行器项目

“执行器”项目:xxl-job-executor-sample-springboot (提供多种版本执行器供选择,现以 springboot 版本为例,可直接使用,也可以参考其并将现有项目改造成执行器)

com.xxl.job.executor.service.jobhandler.SampleXxlJob中提供了简单的定时任务实例,
为方便用户参考与快速实用,示例执行器内原生提供多个Bean模式任务Handler,可以直接配置实用,如下:

2.4 配置定时任务
2.4.1 执行器创建

打开调度中心可视化界面,在执行器管理界面,添加新增执行器

3
2.4.2 创建任务

在任务管理界面,新增任务

4

创建好任务之后就可以执行了

5

调度日志

6
2.5 GLUE模式(Java)
2.5.1 添加任务

该模式支持在线编辑定时任务的内容,立刻执行,无需再开发工具中编辑代码,也无需重启项目。请点击任务右侧 “GLUE” 按钮,进入 “GLUE编辑器开发界面” ,见下图。“GLUE模式(Java)” 运行模式的任务默认已经初始化了示例任务代码,即打印Hello World。

7

任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler

2.5.2 编写代码

保存之后可以在操作按钮里面去编写任务

8

(“GLUE模式(Java)” 运行模式的任务实际上是一段继承自IJobHandler的Java类代码,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务),比如我的定时任务如下,编辑好之后点击保存

9

保存好之后,启动定时任务,效果如下

10
2.6 GLUE(Shell)
1 2 3

三、XXL-JOB集群部署

3.1 调度中心集群
3.1.1 问题概述

调度中心支持集群部署,提升调度系统容灾和可用性。调度中心集群部署时,几点要求和建议:

3.1.2 启动多个调度中心

修改调度中心端口,启动多个调度中心,我这里启动两个如

3.1.3 配置Nginx负载均衡

当启动多个调度器时,执行器配置调度中心部署跟地址可以用逗号分隔。执行器将会使用该地址进行“执行器心跳注册”和“任务结果回调”;为空则关闭自动注册。但是建议:推荐通过nginx为调度中心集群做负载均衡,分配域名。调度中心访问、执行器回调配置、调用API服务等操作均通过该域名进行。

四、最后

xxl-job确实很强大,功能也很全,经过该文章学习相信你可以把xxl-job给用起来了,但是如果你的项目是一个小体量的单体,我不太建议使用它,Quzrtz或者SpringBoot Task就足够 ,对于xxl-job个人还是有些笨重。

转载自:分布式定时调度-xxl-job

上一篇 下一篇

猜你喜欢

热点阅读