简介

架构

Job调度架构

  • 应用管理:提供命令行和Web图形界面客户端,用户可对Job进行配置、管理,启动、停止控制Job,监控系统运行状况。
  • 调度控制中心(role: job-control):mass-job的核心,Job调度、控制实现。分配Job到各Agent执行……
  • 执行器Agent(role: job-agent):执行job的Agent节点。一个节点可以同时作为job-agent和job-main。

Job类型

  • 应用程序Job:Shell、Jar、Python、NodeJS等可执行程序,Job将在一个独立进程或执行引擎集群上运行。通常的应用和业务都推荐使用应用程序Job进行提交。
  • 代码Job:实现了SchedulerJob接口的Job,Job将和 MassData 在同一个进程或执行引擎集群上执行,代码Job可做为MassData平台的一个扩展。

代码Job接口定义如下:

trait SchedulerJob {
  def run(context: SchedulerContext): Future[JobResult]
}

Job配置(JobItem)属性:

case class JobItem(
    program: Program,
    programOptions: Seq[String],
    programMain: String,
    programArgs: Seq[String] = Seq(),
    programVersion: String = "",
    resources: Map[String, String] = Map(),
    data: Map[String, String] = Map(),
    description: Option[String] = None,
    dependentJobKeys: Seq[String] = Nil,
    name: Option[String] = None)
    extends CborSerializable

调度类型

MassData提供完善的Job调度功能,支持简单调度(时间间隔)、日历调度和事件触发三种。同时,调度Job提供 beforeStartafterStartbeforeStartafterStop回调函数, 用户可据此实现对Job启动、退出时做更自定义操作,如:实现Job依赖等。

  • 简单调度(时间间隔):按指定的时间间隔调度Job,可配置Job将被执行次数(无限或N次)
  • 日历调度:使用类似UNIX/Linux Crontab格式的策略进行基于日历时间的调度
  • 事件触发:由某个事件触发调度执行。如:某个数据同步Job完成后发出事件通知分析系统对新数据进行分析。

同时,每个Job在执行成功完成后还可以触发多个依赖Job运行,只需要在Job配置时指定需要依赖运行的Job ID即可。

触发配置(JobTrigger)属性:

case class JobTrigger(
    triggerType: TriggerType,
    triggerEvent: String = "",
    startTime: Option[OffsetDateTime] = None,
    endTime: Option[OffsetDateTime] = None,
    // 重复次数
    repeat: Int = JobConstants.TRIGGER_REPEAT,
    // 每次重复间隔
    interval: FiniteDuration = JobConstants.TRIGGER_INTERVAL,
    cronExpress: String = "",
    failedRetries: Int = 0,
    timeout: FiniteDuration = JobConstants.RUN_TIMEOUT,
    alarmEmails: Seq[String] = Nil)
    extends CborSerializable

创建Job

mass-job 提供多种Job创建方式:

  1. REST接口上传zip包,应用可将Job打成zip包后提交到平台待执行。
  2. 通过管理界面编辑配置Job,并将需要执行的程序(脚本、Jar包)上传。
  3. 通过在线IDE编写代码(实现了SchedulerJob接口)。

Zip包

Zip包里面需要包含配置文件和可执行程序,配置文件使用 HOCON 格式。每个配置文件代表一个Job。

# 作业唯一key,不设置由服务端生成。若设置,则客户端需要保证全局唯一。
//key=sample

item {
  # 显示名字,可选
  name = "Hello world!"

  # Job程序类型,当前支持java,sh(bash),python
  program = "java"

  # 可执行Java主类名字。
  program-main = "hello.Hello"
}
trigger {
  # Job类型,当前支持:simple、cron、event三种
  trigger-type = "cron"

  # Job开始执行时间(可选),不设置则为立即开始。yyyy-MM-ddTHH:mm:ss+08
  start-time = "2020-03-03T10:10:10+08"

  # Job结束时间(可选)。yyyy-MM-ddTHH:mm:ss+08
  end-time = "2020-03-13T10:10:10+08"

  # Job重复次数,job-type为simple时有效
  repeat = 4

  # 两次Job之间的时间间隔,job-type为simple时有效
  interval = 120.seconds

  # 基于CRON的日历调度配置,job-type为cron时有效
  cron-express = "1 0 0 * * ?"
}

其它

远程调度

MassData通过SSH支持Job调度支持远程启动程序,要使用此功能需要配置SSL免密码登录(通过shell脚本实现)。

Found an error in this documentation? The source code for this page can be found here. Please feel free to edit and contribute a pull request.