欢迎访问特米网-生活知识百科|生活百科小窍门|生活小常识大全|日常生活小窍门|生活常识百科宝典

特米网-生活知识百科|生活百科小窍门|生活小常识大全|日常生活小窍门|生活常识百科宝典

特米网 > 生活 >

浅析分布式定时任务调度

www.huikebi.com 2024-04-28 16:23 生活

在平常的业务场景中,常常有一些场景需要用定时任务,而且对于目前迅速消费的年代,天天都需要发送各种推送,消息都需要依靠定时任务去完成,应用很广泛,这个时候选择一个好的定时任务调度系统就看上去非常重要。

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, 登录后运行界面如下图所示。

Tags:科技

热点排行
热门推荐
热门tag
项栏 木纤维 校车 东方鼎立 云视通 胃病 芦丁 失效 槐花蜜 杰伦 高梨临 穿鞋 宫颈 剃须刀 万宝宝 小家电 园林 车辆保险申请 实力 纯度 圆锥形 黄腻苔 庄园 空间站 药丸 废旧 丁子 公交 音量 侧翻 钉子 任青安 粗粮 性兴奋 城市 倒挂 房中 恶臭 脱毛 红糖 鱼塘 秀丽 大咖什么意思 豆类 花会 广元 前沿科技 林西 除奸 普通 指导委员会 情况 氨基酸 消结 别立福 余生 新乐 楚国 维生素D 血迹