xxl-job设计思想
⼀、简介
XXL-JOB是⼀个分布式任务调度平台,其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接⼊多家公司线上产品线,开箱即⽤。
⼆、源码
地址:
结构
xxl-job-admin:调度中⼼ xxl-job-core:公共依赖 xxl-job-executor-samples:执⾏器Sample⽰例(选择合适的版本执⾏器,可直接使⽤,也可以参考其并将现有项⽬改造成执⾏器):xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执⾏器,推荐这种⽅式;:xxl-job-executor-sample-frameless:⽆框架版本;
三、Springboot如何整合xxl-job
1. 初始化调度数据库
//源码地址: /xxl-job/doc/db/tables_xxl_job.sql
2. Maven依赖
3. 配置⽂件信息:端⼝,地址,数据库连接,线程池,国际化,token认证,报警邮件服务端等等
4. 配置XxlJobConfig:注解⽅式或者继承类⽅式
5. 创建Handler接⼝:具体任务的业务逻辑
四、xxl-job架构思想
1. 将调度⾏为抽象为调度中⼼公共平台,⽽平台本⾝不承担业务逻辑,调度中⼼负责发送调度请求。
2. 将任务抽象成分散的JobHandler,交由执⾏器统⼀管理,执⾏器负责接收调度请求,并且执⾏对应的业务逻辑,调度和任务完全解
耦。
3. 调度和任务完全解耦,提⾼了系统稳定性和扩展性。
4. 其中调度中⼼⽀持可视化的动态管理调度信息,包括任务和执⾏器的curd,GLUC开发,报警信息配置,调度机制:轮询,第⼀个,最
后⼀个,随机性,⼀致性Hash等算法等,所有操作实时⽣效,同事⽀持调度中⼼⽇志查看和操作,执⾏器的状态和⽇志查看。
5.架构图
五、总结
常⽤的定时任务以及分布式框架实现:
1. while (true) + 线程休眠
通过轮询+线程休眠实现定时任务。
2. java.util.Timer + java.util.TimerTask
3. ScheduleExecutorService
jdk1.5作为并发⼯具被引⼊,是最理想的定时任务实现⽅案
4. Quartz
5. SpringTask
6. SpringBoot注解+@
7. xxl-job分布式调度中⼼
以上实现⽅式⼀些区别,对⽐:
xxl-job官⽹描述quartz不⾜之处:
问题⼀:调⽤API的的⽅式操作任务,不⼈性化;
问题⼆:需要持久化业务QuartzJobBean到底层数据表中,系统侵⼊性相当严重。
springboot推荐算法问题三:调度逻辑和QuartzJobBean耦合在同⼀个项⽬中,这将导致⼀个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况下,此时调度系统的性能将⼤⼤受限于业务;
问题四:quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运⾏任务,会导致节点负载悬殊⾮常⼤;⽽XXL-JOB通过执⾏器实现“协同分配式”运⾏任务,充分发挥集优势,负载各节点均衡。
XXL-JOB弥补了quartz的上述不⾜之处。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论