彻底解决5大开源痛点,阿里云发布任务调度 XXL-JOB 版

简介: 阿里云任务调度XXL-JOB版 迎来重磅发布,以任务调度SchedulerX为内核,0代码改造,完全兼容开源XXL-JOB客户端接入,解决开源XXL-JOB痛点问题。

概述

XXL-JOB 是国内非常流行的开源任务调度系统,GitHub 上 star 28k,Gitee 上 star 13k。XXLJOB 简单易上手,不但有控制台可以动态管理定时任务,还有一些开箱即用的可观测能力。但是把XXL-JOB应用在生产环境上,很多企业遇到了一些问题。因此他们期望能有一款企业版的 XXL-JOB 服务,不改变用户使用习惯,解决开源痛点,提供最小的迁移成本。于是,阿里云任务调度XXL-JOB版 迎来重磅发布,以任务调度SchedulerX为内核,0代码改造,完全兼容开源XXL-JOB客户端接入。

开源XXL-JOB的5大常见问题

调度量有限

开源XXL-JOB多个调度节点通过数据库抢锁,每次拉取部分调度任务,从而实现多个调度节点“协同式”运行任务。因为每次调度还是要进行数据库抢锁,调度节点负载无法打满,当调度量到一定程度,继续扩容调度节点,调度量也无法上升,存在瓶颈。

稳定性问题

  1. 开源XXL-JOB非常耗数据库,每次调度会在xxl_job_log表生成调度记录,100个秒级别任务,一天就能生成100*60*60*24=864w记录,比较容易把数据库拖垮:

image.png

  1. 开源XXL-JOB每次调度都需要捞取数据库数据,当数据库数据量大或其他原因导致查询缓慢时,就会导致任务漏触发的问题:

image.png

安全薄弱

XXL-JOB账号只有管理员和普通用户,且只支持用户名密码登录,对于想通过SSO登录,并且精细化管理用户权限的企业不太适用

image.png

并且XXL-JOB客户端接入,是整个集群共享一个AccessToken,很容易导致越权连到其他执行器组下。

邮件报警不及时

XXL-JOB只支持邮件报警,一般人不会实时关注邮件,任务失败没法及时通知到联系人容易导致线上故障。同XXL-JOB也不支持联系人管理,如果某个同事离职了,就需要修改所有任务的邮件配置,管理很麻烦。

image.png

版本间不兼容

XXL-JOB多个版本间不兼容,比如想把2.2.0升级到2.3.0以上版本,客户端编程接口发生了改动,升级改造量大:

image.png

更重要的是,服务端通信协议和数据库表结构都发生了改变,导致无法直接平滑升级,对于企业想要自己维护调度节点挑战非常大。

阿里云XXL-JOB有哪些优势

阿里云XXL-JOB版以SchedulerX为内核,兼容开源XXL-JOB的通信协议,提供0代码修改、无侵入托管开源XXL-JOB Executor的解决方案。不但解决了开源遇到的一系列痛点问题,还进行了许多的功能增强。

企业级可观测

阿里云XXL-JOB默认集成了云监控大盘、日志服务SLS、消息中心等多个云产品,对可观测能力做了增强,给用户企业级的可观测能力,可以更快收到通知、更快定位问题。

  • 报警服务:集成云监控报警能力,支持报警联系人,支持短信/电话/邮件/webhook报警方式。
  • 调度历史:通过数据库存储最近执行的历史记录,通过日志服务归档历史执行记录,可以查看最近2个月所有的调度历史。
  • 操作记录:集成阿里云操作审计服务,可以看到所有控制台/OpenApi 操作的历史事件。
  • 监控大盘:集成云监控/Prometheus 监控大盘能力,相对于开源只能看天级别的大盘,可以自定义周期粒度看到更精细化的大盘。

高可用

阿里云XXL-JOB久经考验,在内核层面解决了开源和生产上遇到的一些列稳定性问题。在架构层面采用同城多机房容灾、管控面数据面分离、数据多备份等技术,保证了集群高可用,SLA能做到99.95%以上

image.png

阿里云XXLJOB高可用架构

  1. 管控面负责将任务负载均衡到不同的数据面server上调度,以及server的容灾管理。
  2. 数据面server负责任务调度,不同server调度不同的任务。
  3. 管控面和数据面都做到多可用区容灾。
  4. 管控面挂了,不会影响存量任务调度。
  5. 数据面某个server或者某个可用区的server全挂了,管控面都能切换到另一个可用区的server调度。

高安全

阿里云XXL-JOB从控制台登录到客户端接入都做了安全增强:

  • 多租户:支持阿里云账号、RAM账号、角色账号、SSO单点登录,相对于开源的用户名密码登录更加安全。
  • RAM权限:支持RAM权限管理,可以做到不同资源,不同操作级别的细粒度权限控制,比如给部分用户只读权限。
  • 客户端鉴权:每个应用使用不同的AccessToken鉴权,相对于开源整个集群级别鉴权,更加安全。

高性能

阿里云XXL-JOB采用分布式架构,不同的调度节点负责不同的任务调度,不需要进行抢锁,经我们压测结果验证,在同样的规格下,性能比开源高一倍以上。且阿里云XXL-JOB可以通过水平扩容调度节点支撑更多的任务调度,没有性能瓶颈。

功能增强

阿里云XXL-JOB不但提供高可用、高安全、高性能、和可观测的企业级能力,还做了许多的功能增强,与开源详细对比可以看下表:

功能集

功能

开源XXLJOB

阿里云XXLJOB

兼容性

协议兼容

不同版本间不兼容

兼容v2.2.x以上所有版本

基础能力

调度类型

cron、fixed_rate

cron、fixed_rate、fixed_delay、one_time、api

时区

无

✅

自定义日历

无

✅

指定开始时间

无

✅

广播分片

不支持聚合

支持聚合

运维动作

手动运行、停止

手动运行、停止、原地重跑、重刷数据

工作流

无

✅

可观测能力

调度事件

无

✅

操作记录

无

✅

日志

存在客户端,每次执行产生一个小文件,有性能和稳定性问题

存储在日志服务,支持查看最近2个月日志

报警监控

报警方式

邮件

邮件、webhook、短信、电话

报警联系人

无

集成云监控联系人

报警历史

无

✅

稳定性

任务并发控制

客户端控制,多个executor无法做到幂等执行

服务端控制,可以做到全局幂等执行

应用限流

无

✅

优雅下线

无

✅

任务灰度

无

✅

阿里云XXLJOB与开源功能对比表

如何平滑迁移到阿里云XXLJOB

阿里云XXL-JOB提供了自建平滑迁移方案,不需要开发介入,只需要运维操作,就可以做到0代码修改,平滑迁移到云上。

前提条件

将自建XXL-JOB迁移到阿里云XXL-JOB,需要将您的Executor部署到有阿里云网络的机器上。如果您是阿里云用户,默认网络就通了。如果您的机器在其他云上或者自建IDC机房,也可以通过cen网络来和阿里云网络打通。

步骤一:从自建XXLJOB导出任务

我们提供了一个迁移工具,可以批量导出自建XXLJOB中所有任务信息,转成阿里云XXLJOB的文件格式

image.png

步骤二:导入到阿里云XXL-JOB

登录阿里云XXL-JOB控制台,点击任务管理->导入任务,将步骤一导出的文件一键导入到阿里云上

image.png

步骤三:重新部署应用

在阿里云XXL-JOB控制台上,找到接入配置信息,如下图

image.png

重启Java应用,通过-D参数带上xxl.job.admin.address等配置,就能将Executor接入到阿里云XXL-JOB了。

目录
相关文章
|
分布式计算 并行计算 数据库
Schedulerx2.0分布式计算原理&最佳实践
1. 前言 Schedulerx2.0的客户端提供分布式执行、多种任务类型、统一日志等框架,用户只要依赖schedulerx-worker这个jar包,通过schedulerx2.0提供的编程模型,简单几行代码就能实现一套高可靠可运维的分布式执行引擎。
28417 2
|
Oracle 关系型数据库 Shell
Nacos部署问题之多节点集群报错如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
2289 137
|
Java fastjson API
Springboot 整合 xxljob 动态API调度任务(进阶篇)
Springboot 整合 xxljob 动态API调度任务(进阶篇)
9127 0
Springboot 整合 xxljob 动态API调度任务(进阶篇)
|
机器学习/深度学习 人工智能 自然语言处理
Elasticsearch 向量搜索
Elasticsearch 向量搜索
1380 0
|
Java Linux Maven
SpringBoot多环境的yml或properties配置,生产环境和开发环境分离(超详细)
SpringBoot多环境的yml或properties配置,生产环境和开发环境分离(超详细)
1298 0
|
监控 Java 调度
分布式系列教程(17) - 分布式任务调度平台XXL-JOB
分布式系列教程(17) - 分布式任务调度平台XXL-JOB
1278 0
|
10月前
|
数据采集 人工智能 Java
核心目标:构建Java全流程AI Agent
在AI深度赋能企业背景下,依托JBoltAI框架,打造贯穿业务全链路的全流程AI Agent。突破传统自动化局限,实现跨模块协同、多系统融合与自适应迭代,推动Java生态智能化升级。
796 5
|
Kubernetes 调度 微服务
无需接入执行器,0代码改造实现微服务任务调度
本文提出了一种基于云原生的任务调度新方案,不需要依赖SDK,不依赖语言,实现定时调度和分布式跑批
551 1
|
缓存 NoSQL Java
《API网关性能优化指南:从请求拥堵到毫秒级响应,并发下的架构重构实践》
本文聚焦企业级微服务API网关高并发性能优化实践,针对Spring Cloud Gateway在服务扩容后出现的请求拥堵、路由匹配延迟、限流失效、日志阻塞等问题,提出“分层过滤路由+异步化处理+分布式限流”的架构重构方案。通过将路由规则按“服务分组-路径前缀-请求方法”三层拆解,结合Caffeine缓存优化检索效率;将鉴权、日志等耗时操作异步化,释放Netty线程资源;采用“Redis+Lua脚本+本地缓存”实现集群级精准限流,并解决规则冲突、线程安全、网络延迟等落地难题。
688 3
|
Java 中间件 调度
SpringBoot整合XXL-JOB【03】- 执行器的使用
本文介绍了如何将调度中心与项目结合,通过配置“执行器”实现定时任务控制。首先新建SpringBoot项目并引入依赖,接着配置xxl-job相关参数,如调度中心地址、执行器名称等。然后通过Java代码将执行器注册为Spring Bean,并声明测试方法使用`@XxlJob`注解。最后,在调度中心配置并启动定时任务,验证任务是否按预期执行。通过这些步骤,读者可以掌握Xxl-Job的基本使用,专注于业务逻辑的编写而无需关心定时器本身的实现。
5756 10
SpringBoot整合XXL-JOB【03】-  执行器的使用