SchedulerX 2.0主要提供调度、执行和运行三方面的功能。

SchedulerX 2.0支持多种定时表达式、工作流和API(即将上线)3种调度类型。

  • 多种定时表达式调度

    • Crontab:支持Unix Crontab表达式,详情请参见Quartz Cron表达式。不支持秒级别。
    • Fixed rate:Crontab必须被60整除,不支持其它数量级时间间隔的任务,如每隔40分钟的定时任务。Fixed rate专门用来做定期轮询,可以弥补Crontab的不足,且表达式简单。不支持秒级别。
    • Second delay:适用于对实时性要求比较高的业务,例如执行间隔为10秒的定时调度任务。支持秒级别。
    • 日历:支持多种日历,还可以自定义导入日历。适用于金融业务,如需要在每个交易日执行定时任务。
    • 时区:适用于跨国业务,如需要在每个国家所在时区执行定时任务。

    创建定时调度任务的操作步骤请参见创建调度任务

  • 工作流调度

    使用有向无环图DAG(Directed Acyclic Graph)进行任务编排,操作简单,前端直接拖拖拽拽即可。从详细的任务状态图您能直观的看到下游任务为什么没执行。详情请参见创建工作流

    工作流调度示意图

调度

在定时调度和工作流调度中支持基于多语言的多种任务类型。

  • Java:可以在用户进程中执行,也可以通过上传JAR包动态加载。
  • Shell:前端直接写Shell脚本。
  • Python:前端直接写Python脚本,需要Python环境。
  • Go:前端直接写Go脚本,需要Go环境。
  • HTTP:HTTP任务无需依赖Client,在控制台配置完即可使用。
  • 自定义:可以自定义任务类型,然后实现一个Plugin即可。

执行

  • SchedulerX 2.0支持多种执行方式和主流的分布式编程模型。
    • 单机:随机挑选一台机器执行。
    • 广播:所有机器同时执行且等待全部结束。
    • 并行计算:map/mapreduce模型,1~300个子任务,有子任务列表。
    • 内存网格:map/mapreduce模型,100,000以下子任务,无子任务列表,基于内存计算,比网格计算快。
    • 网格计算:map/mapreduce模型,1000,000以下子任务,无子任务列表,基于文件H2计算。
    • 分片运行:类似elastic-job模型,控制台配置分片参数,可以将分片平均分给多个客户端执行。支持多语言版本。
  • 分布式编程模型
    • Map模型:类似于Hadoop MapReduce里的Map。只要实现一个Map方法,简单几行代码就可以将海量数据分发到多台机器上执行。
    • MapReduce模型:MapReduce模型是Map模型的扩展,废弃了postProcess方法,新增Reduce接口,需要实现MapReduceJobProcessor。

运行

  • 运维:SchedulerX 2.0支持数据大盘、报警监控、日志搜集、失败重试,数据时间和重刷数据等运维能力。

  • 数据大盘:控制台提供了执行记录大盘和执行列表,可以看到每个任务的执行历史,并提供操作。
  • 查看日志:每次执行的调度任务都可以在详情中查看运行日志。如果任务执行失败,前端直接就能看到错误日志,非常方便。详情请参见查看任务实例详情
  • 原地重跑:任务失败,修改完代码发布后,可以立即重新执行。
  • 标记成功:任务失败,如果后台把数据处理修正了,重新执行又需要几个小时,可以直接将任务标记为成功。
  • 停止调度任务:实现JobProcessor的kill()接口,您就可以在前端停止正在运行的任务,甚至子任务。
  • 标记成功:任务失败,如果后台把数据处理修正了,重新执行又需要几个小时,可以直接将任务标记为成功。
  • 数据时间:SchedulerX 2.0可以处理有数据状态的任务,在创建任务的时候设置调度时间,而实际上处理的数据时间可能和任务执行时间不一致,可以配置时间偏移,调度时间 + 时间偏移即数据时间。例如一个任务是每天00:30运行,但是实际上要处理前一天的数据,就可以向前偏移一个小时。调度时间不变,执行的时候通过context.getDataTime()获得的就是前一天23:30。
  • 重刷数据:既然任务具有了数据时间,就会用到重刷数据。例如一个工作流最终产生一个报表,但是业务发生变更(新增一个字段)或者发现上一个月的数据有错误,那么就需要重刷过去一个月的数据。通过重刷数据功能,可以重刷某些任务/工作流的数据(只支持天级别),每个实例都是不同的数据时间。详情请参见重刷调度任务
  • 失败自动重试:
    • 实例失败自动重试:在任务管理的高级配置中,可以配置实例失败重试次数和重试间隔,例如重试3次,每次间隔30秒。如果重试3次仍旧失败,该实例状态才会变为失败,并发送报警。
    • 子任务失败自动重试:如果是分布式任务(并行计算/内网网格/网格计算),子任务也支持失败自动重试和重试间隔,同样可以通过任务管理的高级配置进行配置。
  • 报警监控:
    • 失败报警
    • 超时报警
    • 报警方式:短信