特米网 > 生活 >
在平常的业务场景中,常常有一些场景需要用定时任务,而且对于目前迅速消费的年代,天天都需要发送各种推送,消息都需要依靠定时任务去完成,应用很广泛,这个时候选择一个好的定时任务调度系统就看上去非常重要。
1.1 什么是定时任务
定时任务是根据指定时间周期运行任务。用场景为在某个固定时间点实行,或者周期性的去实行某个任务,譬如:天天晚上24点做数据大全,定时发送短信等。
1.2 容易见到定时任务策略
While + Sleep : 通过循环加休眠的方法定时实行。
Timer和TimerTask达成 :JDK自带的定时任务,可以达成简单的间隔实行任务(在指定时间点实行某一任务,也能定时的周期性实行),没办法达成按日历去调度实行任务。
ScheduledExecutorService : Java并发包下,JDK1.5出现,是比较理想的定时任务达成策略。Eureka就用的是它。
QuartZ :用Quartz,它是一个异步任务调度框架,功能丰富,可以达成按日历调度,支持持久化。
用Spring Task:Spring 3.0后提供Spring Task达成任务调度,支持按日历调度,相比Quartz功能稍简单,但在开发基本够用,支持注释编程方法。
pringBoot中的Schedule :通过@EnableScheduling+@Scheduled最达成定时任务,底层用的是Spring Task。
1.3 分布式定时任务面临的问题
上述的定时任务都是集中式(单体项目用)的定时任务,在分布式中将会面临一些问题或不足
业务量大,单机性能瓶颈需要扩展;
多台机器部署怎么样保证定时任务不重复实行;
定时任务时间需要可调整,可以中止;
机器发生问题down机,定时任务依旧可用,怎么样达成问题转移;
定时任务,实行日志是不是可监控。
1.4 分布式定时任务面临的问题
实行器:批量运行程序,即实质运行作业逻辑的进程;
实行器组:逻辑定义,是多个实行器的集合。每一个作业都需要绑定一个实行器组,依据作业所配置的路由方案进行派发;
作业JOB:作业是批量逻辑的载体,是批量运行的最小单位;在Java里,作业对应的就是一个办法函数;在shell里,作业对应的就是一个sh脚本。
任务Task:任务是作业编排的容器,是多个作业怎么样有序运行的工作流概念。
1.5 分布式定时任务xxl-job
XXL-JOB是一个分布式任务调度平台,于2015问世,其核心设计目的是开发飞速、学习简单、轻量级、易扩展。现已开放源码并接入多家公司线上商品线,开箱即用。其拥有且不止如下能力:
简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
动态:支持动态修改任务状况、启动/停止任务,与终止运行中任务,即时生效;
调度中心HA(中心式):调度使用中心式设计,“调度中心”基于集群Quartz达成并支持集群部署,可保证调度中心HA;
实行器HA(分布式):任务分布式实行,任务实行器支持集群部署,可保证任务实行HA;
弹性扩容缩容:一旦有新实行器机器上线或者下线,下次调度时将会重新分配任务;
路由方案:实行器集群部署时提供丰富的路由方案,包含:第一个、最后一个、轮询、随机、一致- 性HASH、最不常常用、近期最久未用、问题转移、忙碌转移等;
问题转移:任务路由方案选择问题转移状况下,假如实行器集群中某一台机器问题,将会自动Failover切换到一台正常的实行器发送调度请求。
任务失败告警:默认提供邮件方法失败告警,同时预留扩展接口,可方面的扩展短信、钉钉等告警方法;
2、xxl-job构造设计
2.1 设计思想
将调度行为抽象形成“调度中心”公共平台,而平台自己并不承担业务逻辑,“调度中心”负责发起调度请求。
将任务抽象成分散的JobHandler,交由“实行器”统一管理,“实行器”负责接收调度请求并实行对应的JobHandler中业务逻辑。因此,“调度”和“任务”两部分可以相互解耦,提升系统整体稳定性和扩展性;
2.2 构造设计图
xxl-job分为调度中心和实行器两大模块。
2.2.1 调度模块(调度中心)
负责管理调度信息,根据调度配置发出调度请求,自己不承担业务代码。调度系统与任务解耦,提升了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
支持可视化、简单且动态的管理调度信息,包含任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果与实行日志,支持实行器Failover(问题转移)。
2.2.2 实行模块(实行器)
负责接收调度请求并实行任务逻辑。任务模块专注于任务的实行等操作,开发和维护愈加简单和高效;
接收“调度中心”的实行请求、终止请求和日志请求等。
XXL-JOB构造图V2.1.0
2.2.3 调度中心高可用
基于数据库的集群策略,数据库使用Mysql;集群分布式并发环境中进行定时任务调度时,会在每个节点会上报任务,存到数据库中,实行时会从数据库中取出触发器来实行,假如触发器的名字和实行时间相同,则只有一个节点去实行此任务。
2.2.4并行调度
调度使用线程池方法达成,防止单线程因阻塞而引起任务调度延迟。XXL-JOB调度模块默认使用并行机制,在多线程调度的状况下,调度模块被阻塞的几率非常低,大大提升了调度系统的承载量。
XXL-JOB的不同任务之间并行调度、并行实行。XXL-JOB的单个任务,针对多个实行器是并行运行的,针对单个实行器是串行实行的。同时支持任务终止。
2.2.5实行器(任务)高可用
实行器如若集群部署,调度中心将会感知到在线的所有实行器,如“127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999”。多个实行器可以选择“路由方案”来使用轮询,随机等方法进行多机器调度。
当任务”路由方案”选择”问题转移(F人工智能LOVER)”时,当调度中心每次发起调度请求时,会根据顺序对实行器发出心跳测试请求,第一个测试为存活状况的实行器将会被选定并发送调度请求。调度成功后,可在日志监控界面查询“调度备注”
3、xxl-job具体实践
3.1.下载网站源码请下载项目网站源码并解压,用IDEA工具导入项目网站源码仓库地址
https://github.com/xuxueli/xxl-job
项目代码结构如下:
3.2. 导入数据库
打开项目代码,获得 “调度数据库初始化SQL脚本” 并实行即可。
“调度数据库初始化SQL脚本” 地方为:
xxl-job/doc/db/tables_xxl_job.sql
数据库名:xxl_job
xxl_job_lock:任务调度锁表;
xxl_job_group:实行器信息表,维护任务实行器信息;
xxl_job_info:调度扩展信息表:用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、实行器、实行入参和报警邮件等等;
xxl_job_log:调度日志表:用于保存XXL-JOB任务调度的历史信息,如调度结果、实行结果、调度入参、调度机器和实行器等等;
xxl_job_log_report:调度日志报表:用户存储XXL-JOB任务调度日志的报表,调度中心报表功能页面会用到;
xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
xxl_job_registry:实行器注册表,维护在线的实行器和调度中心计器地址信息;
xxl_job_user:系统用户表;
3.3. 启动调度中心
打开 xxl-job-admin 的配置文件,
xxl-job/xxl-job-admin/src/main/resources/application.properties
对调度中心进行配置,要紧配置如下:
server.port : 依据状况修改端口
spring.datasource.url :指向刚刚筹备的数据库
spring.datasource.password : 记得修改成我们的数据库密码
spring.mail.username :配置我们的邮件账号
spring.mail.password :邮件的授权码
依据我们的状况进行修改,然后启动调度中心 ,实行XxlJobAdminApplication#main 办法 ,启动之后,浏览器访问
http://localhost:8080/xxl-job-admin;
注意URL中有个上下文路径。默认登录账号 admin/123456, 登录后运行界面如下图所示。
- 上一篇:山东气象预测准确吗山东气象台的地方在哪儿
- 下一篇:没有了
猜你喜欢
- 2024-04-26 四川科技馆2024年劳动节开闭馆通告
- 2024-04-25 湛江有科技馆吗
- 2024-04-19 2024五一天津科技馆当天可以预约吗
- 2024-04-10 2024年绍兴城投阿波罗科技公司第一批招聘简章
- 2024-04-09 首届宁夏初中生科普科幻作文大赛三等奖作品展示:中华饮食文化的五次科技革
- 2024-03-27 2024大连科技革新平台补贴申请条件+申请材料
- 2024-03-27 超能使者——核能
- 2024-03-25 2024清明节唐河县科技馆需要预约吗
- 热点排行
- 热门推荐
- 热门tag