专栏首页猿天地笑话:大厂都在用的任务调度框架我能不知道吗???

笑话:大厂都在用的任务调度框架我能不知道吗???

前言

我之前的工作中一直在用 Elastic-Job 来做任务调度。这也是大家为什么能在我的书籍《Spring Cloud 微服务 入门 实战与进阶》中看到 Elastic-Job 的章节。

从 2017 的 2.1.5 版本之后 Elastic-Job 没再更新过。我们在做技术选型的时候,对框架的使用范围和社区的活跃度都会比较看重,当然首先是功能点能够满足业务需求。

今天给大家新推荐一个任务调度框架,也许很多人听过甚至目前已经使用了很久。不过没关系,这也不影响你今天阅读本文章。

这个框架就是 XXL-JOB,一个轻量级分布式任务调度平台。最近在我的开源项目 Kitty-Cloud 中就采用了 XXL-JOB,还有一个原因是我目前任职的公司也一直在使用 XXL-JOB。

XXL-JOB 的前世今生

XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

2015-11 月,XXL-JOB RELEASE 了第一个大版本 V1.0,在后面的几年里一直在更新。目前最新的版本是今年更新的 2.2.0。

功能特性

  • 调度中心 HA(中心式)
  • 执行器 HA(分布式)
  • 执行器弹性扩容缩容
  • 丰富的路由策略支持
  • 支持高度容错故障转移
  • 任务超时控制
  • 任务失败重试
  • 任务失败告警
  • 任务动态分片
  • 脚本任务
  • 等等。。。

丰富的 WEB 后台

运行报表

任务管理

WEB IDE

XXL-JOB 使用场景

  • 订单超时取消
  • 用户生日关怀短信发送
  • 定时进行数据异构
  • 每日商家结算
  • 定时刷新缓存
  • ....................

XXL-JOB 架构设计

XXL-JOB 将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。

将任务抽象成分散的 JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的 JobHandler 中业务逻辑。

调度 和 任务 两部分可以相互解耦,提高系统整体稳定性和扩展性;

如下图,任务和调度是分开的,相互解耦。

执行器嵌入在应用中,负责接收调度请求并执行任务逻辑。应用启动的时候会注册到调度中心,在后台有执行器管理功能,也可以手动添加执行器。

XXL-JOB 整体架构如下图所示,调度中心分为任务管理,执行器管理,日志管理等模块。

任务管理主要对任务的一些操作,包括添加任务,编辑任务,暂停任务,启动任务等功能。

执行器管理主要对执行器的一些操作,查看机器列表,管理在线执行器等。

日志管理负责所有日志相关的存储和展示。

其他模块包括了一些任务执行的报表,任务失败告警等功能。

执行器内部会暴露 Http 协议,调度中心在任务调度的时候,会向对应的执行器发起 Http 请求,执行器接收到请求后开始执行任务逻辑,执行器会回调调度中心,反馈任务执行的结果。

XXL-JOB 使用小技巧

日志自动清理

XXL-JOB 中有调度日志和任务执行日志。如果任务多,调度频繁的话日志的数据量也挺大的,目前日志是存储在 Mysql 中,对应的表是 xxl_job_log。

在一开始用的时候发现 XXL-JOB 的后台直接有清理日志的按钮,直接在界面上操作非常即可,可以选择时间段清理,也还算方便。

通过手动的方式去操作必然会带来一个问题,就是忘记了,等到哪天卡的不行才会去清理一次,不智能。

当时就直接写了一个清理日志的任务,直接对 xxl_job_log 这张表进行删除操作,定时清理,这样就不用人工干预了。

后面发现 XXL-JOB 居然有自动清理的配置,这就是没仔细看文档的后果呀,通过下面的配置来决定执行器日志文件保存天数。

xxl.job.executor.logretentiondays=30

任务自动注册

默认情况下,我们开发了一个任务需要到 XXL-JOB 的后台手动去添加一个任务。如果你想偷点懒的话我教你一个方式。

可以自己定义一个注解,然后项目启动的时候扫描注解,获取注解里的配置,调用 XXL-JOB 后的 API 接口直接插入,这样新加的任务在你启动后就自动创建了。

扩展监控支持短信和钉钉

XXL-JOB 对任务的失败告警默认只支持邮件的方式,但是提供了扩展的方式,需要对后台的代码进行扩展才行。

可以自己动手扩展监控告警,比如支持钉钉消息,短信等告警方式。

扩展代码位置:JobFailMonitorHelper.failAlarm

数据格式:

{ 
  "emails": ["xxx.mail.com", "xxx.mail.com"], 
  "dingdings": [
    { 
      "access_token": " ", 
      "secret": "" 
    }
  ] , 
  "mobiles": ["18211110000"]
}

上面定义的 Json 数据格式我们可以直接用后台目前已有的监控邮箱的文本框进行输入,然后在

JobFailMonitorHelper 进行解析,选择对应的发送方式即可。

做的更友好的方式就直接把后台的那个编辑页面改掉,增加几个单独的短信,钉钉文本输入框。

XXL-JOB 视频教程

本文大概的给大家介绍了下 XXL-JOB, 如果大家感兴趣的话可以去看官方文档。或者去我 B 站看技术视频,XXL-JOB 我录制了一整套的视频在 B 站,免费的哦!

我的 B 站主页地址:https://space.bilibili.com/512764250[1]

或者直接在 B 站搜索 猿天地 也可以哦!记得关注下哈。

关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud 微服务-全栈技术与案例解析》, 《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号 猿天地 发起人。

参考资料

[1]

B站主页: https://space.bilibili.com/512764250

本文分享自微信公众号 - 猿天地(cxytiandi),作者:尹吉欢

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • spring-data-mongodb之批量更新操作

    用过mongodb的同学想必都知道,以java驱动的语法举例,插入式有insert方法的,支持插入集合,也就是批量插入。 但是update方法却只能执行一个更新...

    猿天地
  • 10分钟掌握ConcurrentHashMap 3分钟清楚和HashMap、Hashtable的区别

    ConcurrentHashMap顾名思义就是同步的HashMap,也就是线程安全的HashMap,所以本篇介绍的ConcurrentHashMap和HashM...

    猿天地
  • 指北 | 谈谈ForkJoin框架的设计与实现

    相对于串行计算,并行计算可以划分成时间并行和空间并行。时间并行即指令流水化,也就是流水线技术。比如说生产一辆小汽车,有特定的轮子车间/发动机车间,同时进行各自的...

    猿天地
  • 任务调度-分布式任务调度平台XXL-JOB

    如果上述二种方式都不满足你的需求,我建议你尝试使用XXL-JOB或其他开源调度平台。

    秋日芒草
  • 一文读懂分布式任务调度平台XXL-JOB

    本文主要介绍分布式任务调度平台XXL-JOB(v2.1.0版本),包括功能特性、实现原理、优缺点、同类框架比较等

    用户5397975
  • 分布式任务调度平台 XXL-JOB 2.0.0 发布

    XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

    Debian社区
  • 290家公司都在用的任务调度系统,还在Github上开源了

    今天,和大家介绍一个轻量级分布式任务调度平台,开发迅速、学习简单、轻量级、易扩展,290家公司都在用,它就是XXL-JOB,包括比较知名的大众点评,京东,优信二...

    用户6543014
  • 单集群10万节点 走进腾讯云分布式调度系统VStation

    用户1263954
  • 【死磕Java并发】—–J.U.C之AQS:同步状态的获取与释放

    此篇博客所有源码均来自JDK 1.8 在前面提到过,AQS是构建Java同步组件的基础,我们期待它能够成为实现大部分同步需求的基础。AQS的设计模式采用的模板方...

    用户1655470
  • 教主黄仁勋亮相GTC China:英伟达已售出15亿块GPU!重磅发布TensorRT 7

    又到了一年一度的英伟达GTC China大会,NVIDIA 创始人兼首席执行官黄仁勋又是一身黑色皮衣亮相苏州,为大家分享了英伟达取得的成绩:NVIDIA已经售出...

    昱良

扫码关注云+社区

领取腾讯云代金券