阿里巴巴任务调度SchedulerX兼容ElasticJob

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 阿里巴巴任务调度SchedulerX2.0兼容开源ElasticJob任务接口,用户不需要修改一行代码,即可以将ElasticJob任务在SchedulerX2.0平台上托管,享有低成本、免运维、可视化、报警监控等能力。

背景介绍

ElasticJob是一款基于quartz开发,依赖zookeeper作为注册中心、轻量级、无中心化的分布式任务调度框架,已在多家公司投入使用,目前已经通过Apache开源:https://github.com/apache/shardingsphere-elasticjob


阿里巴巴商业化任务调度平台SchedulerX2.0兼容开源ElasticJob任务接口,用户不需要修改一行代码,即可以将ElasticJob任务在SchedulerX2.0平台上托管,享有低成本、免运维、可视化、报警监控等能力。


托管ElasticJob的优势

可视化

之前当当开源的ElasticJob console已经停止更新,重新在Apache开源后,甚至去除了console。SchedulerX作为商业化任务调度平台,在可视化能力上功能比较丰富

  1. 用户大盘

  1. 查看任务历史执行记录

  1. 查看任务运行日志

  1. 查看任务运行堆栈

  1. 查看任务操作记录


高级特性

  1. 任务编排:支持工作流(DAG)进行任务编排,操作简单,前端直接单手操作拖拖拽拽即可。详细的任务状态图能一目了然看到下游任务为什么没跑。


  1. 限流:常见场景是夜间离线报表业务,比如很多报表任务是晚上1、2点开始跑,要控制应用最大并发的任务数量(否则业务扛不住),达到并发上限的任务会在队列中等待。同时要求早上9点前必须把KPI报表跑出来,可以设置KPI任务高优先级,会抢占低优先级任务优先调度。

SchedulerX支持可抢占的任务优先级队列,只需要在控制台进行配置

  1. 资源隔离:支持命名空间和应用级别资源隔离,支持多租户权限管理


商业化报警运维

  • 报警:支持邮件、钉钉、短信、电话,其他报警方式在规划中。支持任务失败、超时、无可用机器报警。报警内容可以简单的看出任务失败的原因,以钉钉机器人为例

  • 运维操作:原地重跑、重刷数据、标记成功、查看堆栈、停止任务、指定机器等


免运维、低成本

ElasticJob依赖zookeeper作为任务存储和任务调度协调,至少需要3个节点的zookeeper。zookeeper运维非常麻烦,如果有节点挂了,需要重新配置zookeeper的服务端和客户端的配置,可能需要重启所有的应用。

同时,zookeeper性能也比较差,如果任务量级比较大,一个zookeeper集群无法抗住,且zookeper无法水平扩展支持更大的tps,就需要维护多个zookeeper集群,则机器成本更加大了。

通过Schedulerx2.0托管ElasticJob任务,不需要自己维护zookeeper集群,也不需要关注任务量级的增长,省去了机器和人力维护成本。


高可用

SchedulerX2.0采用高可用架构,任务多备份机制,经历阿里集团多年双十一、容灾演练,可以做到整个集群挂掉任意2个节点或者任意一个机房断电,任务调度都不会受到影响。


与开源ElasticJob区别

开源ElasticJob

SchedulerX为底座的ElasticJob任务

Simple任务

支持

支持

Script任务

支持

支持

Dataflow任务

支持

支持

单机

支持

支持

分片

支持

支持

定时

cron

cron、fixed_rate、fixed_delay、one_time

工作流

不支持

支持

可视化

历史记录、日志服务、运行堆栈、操作记录、用户大盘等

监控报警

邮件

邮件、钉钉群、短信、电话

运维操作

运行一次、原地重跑、重刷数据、标记成功、停止运行


如何接入(有完整demo)

以ElasticJob-3.0.1版本为例,参考demo工程

  1. pom增加schedulerx2-plugin-elasticjob插件,排掉elasticjob的依赖
<!-- 移除elasticjob的依赖 --><!--<dependency><groupId>org.apache.shardingsphere.elasticjob</groupId><artifactId>elasticjob-lite-spring-boot-starter</artifactId><version>3.0.1</version></dependency>--><dependency><groupId>com.aliyun.schedulerx</groupId><artifactId>schedulerx2-plugin-elasticjob</artifactId><version>3.0.1.3</version></dependency>
  1. 提前在schedulerx控制台建好你的命名空间和应用


  1. application.yml移除elasticjob的配置,增加schedulerx的配置:
#elasticjob:#  regCenter:#    serverLists: localhost:2181#    namespace: elasticjob-springboot-demoschedulerx: #这里需要增加一个"schedulerx:",则如下任务会自动同步到schedulerx控制台  jobs:    simpleJob:      elasticJobClass: com.alibaba.schedulerx.example.elasticjob.job.MySimpleJob
      cron: 0/30 * * * * ?
      shardingTotalCount: 1      overwrite: true    shardingJob:      elasticJobClass: com.alibaba.schedulerx.example.elasticjob.job.MyShardingJob
      cron: 0 * * * * ?
      shardingTotalCount: 3      shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou
      overwrite: true    dataflowJob:      elasticJobClass: com.alibaba.schedulerx.example.elasticjob.job.MyDataFlowJob
      cron: 0 * * * * ?
      shardingTotalCount: 3      shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou
      props.streaming.process: true #开启流式处理      overwrite: true#增加如下schedulerx的配置,参考:https://help.aliyun.com/document_detail/161998.html spring:   schedulerx2:      endpoint: acm.aliyun.com
      namespace: 433d8b23-xxxx-xxxx-xxxx-90d4d1b9a4af
      groupId: elasticjob-test
      appKey: xxxxxxxxxxx
      regionId: public
      aliyunAccessKey: xxxxxxxxxxxx
      aliyunSecretKey: xxxxxxxxxxxx
  1. 启动程序增加自动扫描com.alibaba.schedulerx.plugin.*


  1. 配置日志服务,搜集客户端的日志,详情可以参考https://developer.aliyun.com/article/861431
使用log4j2,配置log4j2.xml
<?xmlversion="1.0" encoding="UTF-8"?><Configurationstatus="off"><Appenders><Consolename="Console"target="SYSTEM_OUT"><PatternLayoutpattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n"/></Console><SchedulerxLog4j2Appendername="schedulerxLog"timeFormat="yyyy-MM-dd'T'HH:mmZ"timeZone="UTC"ignoreExceptions="true"><PatternLayoutpattern="%d %-5level [%thread] %logger{0}: %msg"/></SchedulerxLog4j2Appender></Appenders><Loggers><Rootlevel="info"><AppenderRefref="Console"/></Root><Loggername="schedulerx"level="info"additivity="false"><AppenderRefref="schedulerxLog"/></Logger></Loggers></Configuration>
  1. 任务实现逻辑不需要修改,如果想采集业务日志,可以使用原生log4j2/logback打印日志,如下图:
@ComponentpublicclassMySimpleJobimplementsSimpleJob {
privatestaticfinalLoggerLOGGER=LogManager.getLogger("schedulerx");
@AutowiredprivateHelloServicehelloService;
@Overridepublicvoidexecute(ShardingContextcontext) {
LOGGER.info("jobName:"+context.getJobName() +", hello:"+helloService.hello());
    }  
}
  1. 启动程序后,schedulerx控制台会自动同步任务,其中
  • 调度频率为秒级别,时间类型会改为second_delay
  • 分片个数大于1,执行方式为分片运行,否则是单机运行


  1. 通过控制台,可以直接看到任务的运行日志

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
分布式计算 并行计算 数据库
Schedulerx2.0分布式计算原理&最佳实践
1. 前言 Schedulerx2.0的客户端提供分布式执行、多种任务类型、统一日志等框架,用户只要依赖schedulerx-worker这个jar包,通过schedulerx2.0提供的编程模型,简单几行代码就能实现一套高可靠可运维的分布式执行引擎。
24066 2
|
Kubernetes Cloud Native 调度
带你读《企业级云原生白皮书项目实战》——3.2.8 Scheduler 调度
带你读《企业级云原生白皮书项目实战》——3.2.8 Scheduler 调度
|
NoSQL Java 数据处理
【Spring专题】「开发指南」手把手教你将@Schedule任务调度升级为分布式调度@DistributeSchedule
【Spring专题】「开发指南」手把手教你将@Schedule任务调度升级为分布式调度@DistributeSchedule
474 0
【Spring专题】「开发指南」手把手教你将@Schedule任务调度升级为分布式调度@DistributeSchedule
|
资源调度 分布式计算 运维
阿里巴巴任务调度SchedulerX支持一次性任务
阿里巴巴任务调度SchedulerX2.0支持一次性任务
1260 2
|
资源调度 DataWorks 监控
阿里巴巴任务调度SchedulerX专业版公测
阿里巴巴分布式任务调度平台SchedulerX2.0的专业版本于2022.1.26正式公测,本次公测带来了全新的可视化功能,兼容开源xxl-job/elasticjob任务,支持一次性任务,融合大数据dataworks任务。
2436 1
阿里巴巴任务调度SchedulerX专业版公测
|
运维 资源调度 调度
阿里巴巴任务调度SchedulerX兼容XXL-JOB
阿里巴巴任务调度SchedulerX2.0兼容XXL-JOB任务接口,支持@XxlJob新注解和@JobHandler老注解方式,用户不需要修改一行代码,即可以将XXL-JOB任务在SchedulerX2.0平台上托管。
4201 1
阿里巴巴任务调度SchedulerX兼容XXL-JOB
|
资源调度 运维 DataWorks
阿里分布式任务调度SchedulerX2.0支持Dataworks任务
在实际业务场景中业务处理往往依赖前置数据准备,目前在分布式任务调度平台上可进行dataworks任务数据处理与业务数据处理任务依赖编排定时调度。
1225 1
|
资源调度 分布式计算 自然语言处理
EDAS之分布式任务调度SchedulerX系列文章
分布式任务调度SchedulerX2.0文章列表总览
603 1
|
缓存 资源调度 运维
SchedulerX 如何帮助用户解决分布式任务调度难题?
本文分别对任务调度平台的资源定义、可视化管控能力、分布式批处理能力进行了简述,并基于 SchedulerX 的能力结合实际业务场景提供了一些基础参考案例。希望通过上述内容能让大家方便地熟悉任务调度平台接入使用概况,对于现有用户也可结合自身团队特点进行平台资源管控隔离,以及在产品业务量增长后通过分布式批处理能力来提升处理效率。
|
资源调度 监控 数据可视化
阿里巴巴任务调度SchedulerX支持日志服务
阿里巴巴任务调度SchedulerX2.0的日志服务,可以让业务方不需要修改一行代码,只需要增加一个log4j2/logback的配置,即可将每次任务调度的框架日志和业务日志进行收集,同时提供白屏日志检索功能,可以通过任务调度平台快速定位任务失败的原因。
1193 0

相关实验场景

更多