分布式调度任务技术选型-xxl-job二次开发优化

背景:

任务调度是日常开发中非常常见的一个业务场景。目前系统采用的是Quartz框架进行任务调度,但与业务系统耦合性太高,极端情况下,耗时任务甚至会耗尽调度线程,导致大量任务堵塞与延迟。也可能拖垮业务系统。

另一方面Quartz没有后台管理界面。问题定位排查 手动触发任务,随时修改任务执行时间等较难。

综上所述,我们需要解决以下几个问题:

1:有良好的后台管理页面。

2:任务动态分片,数据庞大的大任务处理。

3:任务阻塞,路由及报警策略。

4:开发文档和社区完善。


调度框架对比选型

此次主要对xxl-job(大众),Elastic-job(当当),staturn(唯品会),lts,TBSchedule(阿里)五种调度框架进行综合对比。


对比总结:

e-Job和xxl-job都有广泛的用户基础和的技术文档,都能满足定时任务的基本功能需求。

e-Job已有2年左右没更新,社区也已经不维护,后续稳定性无法保证。

xxl-job 文档详细,且任务报警、阻塞及路由策略丰富,社区完善。

 因此采用xxl-job调度框架。


XXL-JOB特性简介

-路由策略:- 阻塞处理策略 -子任务:-失败报警 -分片广播 & 动态分片 等 

这里就不照搬官网参数,参考:https://github.com/xuxueli/xxl-job/


- 任务调度错过触发时间时的处理策略:

可能原因:服务重启;调度线程被阻塞,线程被耗尽;上次调度持续阻塞,下次调度被错过;

处理策略:

过期超5s:本次忽略,当前时间开始计算下次触发时间

过期5s内:立即触发一次,当前时间开始计算下次触发时间



目前压测存在的问题:

1、在上万任务同时并发时 。发现有部分任务丢失问题。

      此问题可通过以下三种方案提升并发量:

    a.通过加大调度线程池数量。

    b.增加调度中心集群数量。

    c.修改过期任务处理策略,默认为5秒。

    官方数据:单机并发5千,目前本地实测:单机并发1千

2、因外部因素导致服务宕机时,正在执行的任务可能会丢失。例如:服务器断电。kill -9

    此问题通过二次开发解决,方案如下:

    a.心跳检测时,将下线的机器中正在执行的任务标记为失败,并重试。(默认30秒检测一次,3次失败则将此执行器下线,如果执行器在心跳检测间隔期重启完成,则正在执行中的任务会卡住无结果,解决方案参考b)

    b.有新执行器注册时,查找此执行器是否有正在执行中的任务,有则标记为失败,任务会自动重试。

3、不支持重复性一次性任务

       二次开发可以解决,即利用同一个任务,每次通过接口方式传入需要执行的参数,例如:订单号10086在15分钟后超时取消。 通过调用启动任务接口,动态传参即可




接入指南:

1、在admin后台添加对应的执行器。AppName为唯一标识


2、添加Maven依赖

<dependency>

    <groupId>com.xuxueli</groupId>

    <artifactId>xxl-job-core</artifactId>

    <version>2.1.1-SNAPSHOT</version>

</dependency>



3、添加xxl-job.properties


### 调度中心部署跟地址:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;

xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

### 执行器AppName:(在admin后台配置的AppName) 执行器心跳注册分组依据;为空则关闭自动注册,同一个执行器集群内AppName需要保持一致;调度中心根据该配置动态发现不同集群的在线执行器列表。

xxl.job.executor.appname=top-service-job

### 执行器IP:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";

xxl.job.executor.ip=

### 执行器端口号 :小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;

xxl.job.executor.port=9999

### 执行器通讯TOKEN :非空时启用;

xxl.job.accessToken=

### 执行器运行日志文件存储磁盘路径 :需要对该路径拥有读写权限;为空则使用默认路径;

xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler

### 执行器日志保存天数 :值大于3时生效,启用执行器Log文件定期清理功能,否则不生效;

xxl.job.executor.logretentiondays=-1


至此xxl-job接入完成,即可开始开发任务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容