一文读懂分布式任务调度平台XXL-JOB
基本介绍
同一服务多个实例的任务存在互斥时,需要统一协调
定时任务的执行需要支持高可用、监控运维、故障告警
需要统一管理和追踪各个服务节点定时任务的运行情况,以及任务属性信息,例如任务所属服务、所属责任人
功能特性
- 简单灵活提供Web页面对任务进行管理,管理系统支持用户管理、权限控制;支持容器部署;支持通过通用HTTP提供跨平台任务调度;
- 丰富的任务管理功能支持页面对任务CRUD操作;支持在页面编写脚本任务、命令行任务、Java代码任务并执行;支持任务级联编排,父任务执行结束后触发子任务执行;支持设置任务优先级;支持设置指定任务执行节点路由策略,包括轮询、随机、广播、故障转移、忙碌转移等;支持Cron方式、任务依赖、调度中心API接口方式触发任务执行
- 高性能调度中心基于线程池多线程触发调度任务,快任务、慢任务基于线程池隔离调度,提供系统性能和稳定性;任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,有效对密集调度进行流量削峰;
- 高可用任务调度中心、任务执行节点均 集群部署,支持动态扩展、故障转移支持任务配置路由故障转移策略,执行器节点不可用是自动转移到其他节点执行 支持任务超时控制、失败重试配置 支持任务处理阻塞策略:调度当任务执行节点忙碌时来不及执行任务的处理策略,包括:串行、抛弃、覆盖策略
- 易于监控运维支持设置任务失败邮件告警,预留接口支持短信、钉钉告警;支持实时查看任务执行运行数据统计图表、任务进度监控数据、任务完整执行日志;
系统设计
1 设计思路
2 系统组成
- 调度模块(调度中心):负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover
- 执行模块(执行器):负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;接收“调度中心”的执行请求、终止请求和日志请求等
3 工作原理
- 任务执行器根据配置的调度中心的地址,自动注册到调度中心
- 达到任务触发条件,调度中心下发任务
- 执行器基于线程池执行任务,并把执行结果放入内存队列中、把执行日志写入日志文件中
- 执行器的回调线程消费内存队列中的执行结果,主动上报给调度中心
- 当用户在调度中心查看任务日志,调度中心请求任务执行器,任务执行器读取任务日志文件并返回日志详情
4 HA设计
4.1 调度中心高可用
Connection conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
connAutoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
preparedStatement = conn.prepareStatement( "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
preparedStatement.execute();
# 触发任务调度
# 事务提交 conn.commit();
4.2 任务调度高可用
- 路由策略调度中心基于路由策略路由选择一个执行器节点执行任务,XXL-JOB提供了如下路由策略保证任务调度高可用:忙碌转移策略:下发任务前向执行器节点发起rpc心跳请求查询是否忙碌,如果执行器节点返回忙碌则转移到其他执行器节点执行(参考 com.xxl.job.admin.core.route.strategy.ExecutorRouteBusyover)故障转移策略:下发任务前向执行器节点发起rpc心跳请求查询是否在线,如果执行器节点没返回或者返回不可用则转移到其他执行器节点执行 (参考com.xxl.job.admin.core.route.strategy.ExecutorRouteFailover)
- 阻塞处理策略当执行器节点存在多个相同任务id的任务未执行完成,则需要基于阻塞策略对任务进行取舍:串行策略:默认策略,任务进行排队、丢弃旧任务策略、丢弃新任务策略(参考:com.xxl.job.core.biz.impl.ExecutorBizImpl#run)
同类框架比较
使用
1 快速上手
2 注意事项
- 1 时钟同步问题调度中心和任务执行器需要时间同步,同步时间误差需要在3分钟内,否则抛出异常 参考:com.xxl.rpc.remoting.provider.XxlRpcProviderFactory#invokeService
if (System.currentTimeMillis() - xxlRpcRequest.getCreateMillisTime() > 3*60*1000) { xxlRpcResponse.setErrorMsg("The timestamp difference between admin and executor exceeds the limit."); return xxlRpcResponse;
}
- 2 时区问题任务由调度中心触发,按照在调度中心设置任务的cron表达式触发时,需要注意部署调度中心的机器所在的时区,按照该时区定制化cron表达式
- 3 任务执行中服务宕掉问题调度中心完成任务下发,执行器在执行任务的过程中,如果执行器突然服务宕掉,会导致任务的执行问题在调度中心是执行中,调度中心并不会发起失败重试。即使任务设置了超时时间,执行器宕掉导致导致任务长时间未执行完成,调度中心界面也不会看到任务超时,因为任务超时是由执行器检测的并上报给调度中心的
- 4 优雅停机问题执行器执行任务基于线程池异步执行,当需要重启时需要注意线程池中还有未执行完成任务的问题,需要优雅停机,可以直接基于XxlJobExecutor.destroy()优雅停机,注意该方法在v2.0.2之前的版本存在bug导致无法优雅停机,v2.0.2及之后的版本才修复(参考:https://github.com/xuxueli/xxl-job/issues/727)
- 5 失败重试问题当执行器节点部分服务不可用,例如节点磁盘损坏,但在调度中心仍然处于在线时,调度中心仍可能基于路由策略(包括故障转移策略)路由到该未下线的节点,并不断重试,不断失败,导致重试次数耗尽。所以路由策略尽量不要采用固定化策略(例如固定第一个、固定最后一个策略)
总结
XXL-JOB上手还是比较简单,项目源码还是比较整洁,容易读懂,学习之后可以更加深入理解分布式系统设计、网络通信、多线程协同处理等知识点,推荐阅读
参考
一文读懂分布式任务调度平台XXL-JOB相关推荐
- 一文读懂大数据平台——写给大数据开发初学者的话!
一文读懂大数据平台--写给大数据开发初学者的话! 文|miao君 导读: 第一章:初识Hadoop 第二章:更高效的WordCount 第三章:把别处的数据搞到Hadoop上 第四章:把Hado ...
- 一文读懂分布式架构知识体系(内含超全核心知识大图)
作者 | 晓土 阿里巴巴高级工程师 姊妹篇阅读推荐:<云原生时代,分布式系统设计必备知识图谱(内含22个知识点)> 导读:本文力求从分布式基础理论.架构设计模式.工程应用.部署运维.业界方 ...
- 一文读懂天翼物联网平台(AIoT)
中国电信天翼智能物联网开放平台(简称"天翼物联网平台AIoT"),是中国电信融合5G.物.云.网.AI等数字要素,打造的泛在智联.全域感知.万物赋智.安全可信.互联互通.虚实共生的 ...
- 腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面
1.引言 我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ.微信.淘宝.那么,一个大型互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂? ...
- 一文读懂:Kafka(分布式消息队列)的基础概念,教程
[提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! 代码案例地址: ?https://github.com/Mydreamandrea ...
- 一文读懂什么是分布式文件系统
一文读懂什么是分布式文件系统 什么是分布式文件系统 一般文件系统 什么是分布式文件系统 分布式文件系统与一般文件系统的对比 什么是分布式文件系统 本篇来讲讲什么是一般文件系统,什么是分布式文件系统,以 ...
- xxl子任务_XXL-JOB v2.0.2,分布式任务调度平台 | 多项特性优化更新
v2.0.2 Release Notes 1.底层通讯方案优化:升级较新版本xxl-rpc,由"JETTY"方案调整为"NETTY_HTTP"方案,执行器内嵌n ...
- xxl子任务_XXL-JOB v2.1.2 发布,分布式任务调度平台
v2.1.2 Release Notes 1.方法任务支持:由原来基于JobHandler类任务开发方式,优化为支持基于方法的任务开发方式:因此,可以支持单个类中开发多个任务方法,进行类复用 @Xxl ...
- AI洞观 | 一文读懂英特尔的AI之路
AI洞观 | 一文读懂英特尔的AI之路 https://mp.weixin.qq.com/s/E9NqeywzQ4H2XCFFOFcKXw 11月13日-14日,英特尔人工智能大会(AIDC)在北京召 ...
- python任务调度平台 界面_分布式任务调度平台XXL-JOB
以前带我的人说过,最好的学习就是看官方文档,个人也有4个T的学习视频,但是会发现讲的都是入门,有的也比较浅. 官方文档比较官方,也比较权威,打开xxl-job的官网,写的贼详细,有些人喜欢收博客,不喜 ...
最新文章
- linux的shell的功能,linux shell中${ }的一些特异功能
- 2019 Multi-University Training Contest 2 - 1008 - Harmonious Army - 最大流
- 关于Unity中场景的导入与导出(专题九)
- 补丁发布工具1.5.5
- cocos2d-lua3.7组件篇(三)-http通信demo
- java webservice ssl_[转贴]Java客户端调用Https Webservice
- java list填入table_JavaFX从ObservableList填充TableView
- Atitit.eclise的ide特性-------abt 编译
- 生产和服务使用的计算机软件,Windows效率 篇三:Windows 10软件推荐,将你的生产力工具发挥到极致!...
- Android逐帧动画的实现
- cdrx4自动排版步骤_如何在CorelDRAW软件排版CDR怎么快速排版技巧?
- AddressBook获取用户信息
- android平板打电话,四款可接打电话平板电脑推荐
- 旧金山州立大学计算机,旧金山州立大学(San-Francisco-State-University)_彬彬教育...
- 如何改域的NETBIOS名?
- jaspersoft 报表设计器简单的使用(二)
- java部门管理_系统管理模块_部门管理_实现基本的增删改查功能
- Flex框架-甘特图开发
- Linux中的echo命令
- 一天一篇latex刘海洋代码解析:1.2.2 从提纲开始