对于业务规模较大的应用而言,调度的稳定性和核心任务的时效性是至关重要的。本文介绍如何管理应用级别的资源和任务优先级。

背景信息

一些第三方的资源管理系统(例如Mesos和Yarn),能够实现CPU和内存级别的资源管控,而您使用自己的Worker通过客户端接入SchedulerX,所以SchedulerX作为通用的任务调度平台,无法实现CPU和内存级别的管控,也无法通过第三方的资源管理系统进行管控,实现的是任务实例数量和优先级的管控。

应用场景

应用级别的资管和任务优先级管理主要适用于业务、数据规模较大的调度场景。

例如,一个数据平台的应用,每天夜里会执行成千上万的报表,如果没有资源管理,应用可能会因为超负荷而发生故障。同时,一些核心报表也可能会有极强的时效性,必须在某个时间前生成,会对任务的优先级有强烈的需求。SchedulerX提供了资源管理和任务优先级的功能。

  • 资源管理

    资源管理即管理应用的任务实例数量,例如在创建应用时,为该应用打开了流控开关,并将任务实例并发数设置为1。再在该应用下创建3个任务,A、B和C,每个任务运行一次,则任务A运行中,而任务B和C在池子中等待运行,而不会被丢弃。

  • 任务优先级管理

    任务优先级是应用级别的,即优先级仅在单应用内生效,不影响其它应用的任务。同一个应用下,同时运行的优先级高的任务会被优先执行。

    说明 一个应用包含多个实例,不同优先级的任务被调度到不同实例执行,可能导致低优先级任务被优先执行。SchedulerX通过可抢占的优先级队列规避了这种可能性,并保证同时在池子中等待的高优先级任务被优先执行。更多信息,请参见可抢占的优先级队列

管理应用的任务实例资源

  1. 登录EDAS控制台
  2. 在左侧导航栏单击任务调度
  3. 在顶部菜单栏选择地域。
  4. 应用管理页面选择目标命名空间,然后单击创建应用
  5. 创建应用面板,单击高级配置,然后打开流控开关,并设置任务实例并发数

    任务实例并发数即应用级别的任务队列,超过并发数的任务实例不会被丢弃,而是放到池子中等待执行。

    配置项 描述 默认值
    应用名 自定义设置应用名称。
    应用ID 应用ID为应用接入的GroupID,保证同一个命名空间下唯一,否则将创建失败,可以和应用名一致。
    描述 对应用的描述。
    应用类型
    • 普通应用:非K8s部署的应用,或者对K8s任务没有需求。
    • K8s应用:应用通过K8s部署,并且有需求要使用K8s任务。
    普通应用
    版本 根据需求选择版本。更多信息,请参见产品版本对比 专业版
    日志服务 开启后,增加一个Log4j或Logback的配置,即可在控制台看到每次任务调度(包括分布式任务)的业务日志,方便排查问题。 关闭
    load5 不能超过客户端机器CPU可用核数 0
    内存使用率 表示近5分钟进程内存平均使用率不能大于该阈值,否则判断客户端机器繁忙。 90%
    磁盘使用率 表示磁盘使用率不能大于该值,否则判断客户端机器不健康,状态繁忙。 95%
    是否触发繁忙机器 机器繁忙时是否继续触发客户端执行。 打开
    高级配置
    任务最大数量 一个分组最多支持的Job数量。 1000
    自动扩容 选择是否自动扩容。开启时,需要设置全局任务数 关闭
    流控 选择是否流控。开启时,需要设置任务实例并发数 关闭
    任务实例并发数 一个应用最多同时运行的任务实例个数,超过并发数的任务实例不会丢弃,会放在队列中等待执行 0

管理应用的任务优先级

  1. 登录EDAS控制台
  2. 在左侧导航栏单击任务调度
  3. 在顶部菜单栏选择地域。
  4. 在左侧导航栏选择任务管理
  5. 任务管理页面,选择目标命名空间,单击创建任务
  6. 创建任务面板的基本配置配置向导页,设置优先级
    创建任务的其它参数及后续步骤,请参见创建调度任务
    配置项 描述
    任务名 任务名称。
    描述 任务描述,尽量简洁地描述业务,便于后续搜索。
    应用ID 任务所属分组。可以在下拉列表中选择。
    任务类型 指任务所实现的语言,当前支持Java、Shell、Python、Go、http、Node.js、xxljob和DataWorks类型,其中Shell、Python和Go会弹出编辑框,在编辑框中编写任务脚本。
    Processor类名(仅适用于Java任务类型) JobProcessor的全路径,如xxx.xxx.xxx.HelloProcessor,仅任务类型选择Java时出现。
    执行模式 执行模式,这里特指任务执行的模式,当前支持以下模式。
    • 单机运行:随机选一台机器执行。
    • 广播运行:所有机器同时执行并等待全部结束。
    • 可视化MapReduce:Map模型,子任务300以下,有子任务列表。

      专业版可支持至1,000以下,且支持业务关键字查询。

    • 内存MapReduce:Map模型,子任务执行信息采用内存存储,速度快,子任务50,000以下,无子任务列表。
    • 磁盘MapReduce:Map模型,子任务执行信息采用磁盘文件存储,吞吐量大,子任务1,000,000以下,无子任务列表。
    • 分片运行:类似elastic-job模型,配置分片参数,可以将分片平均分给多个客户端执行。支持多语言版本。
    说明 当选择了不同的执行模式后,高级设置中的参数会随之变化。
    优先级 任务的优先级,高优先级任务会优先执行。
    任务参数 任意字符串,可以在运行时通过上下文获取。
    高级配置
    实例失败重试次数 默认值:0。
    实例失败重试间隔 默认值:30s。
    实例并发数 同一个Job同一时间running的实例个数。

可抢占的优先级队列

一个应用包含多个实例,不同优先级的任务被调度到不同实例执行,可能导致低优先级任务被优先执行。SchedulerX通过可抢占的优先级队列规避了这种可能性,并保证同时在池子中等待的高优先级任务被优先执行。

  1. 创建一个示例应用,并为该应用打开流控开关,并设置任务实例并发数为1,请参见管理应用的任务优先级
  2. 为该应用创建3个任务,优先级分别设置为高、中、低。请参见管理应用的任务优先级
  3. 在该应用的任务管理页面依次在中优先级任务低优先级任务高优先级任务操作列,单击运行一次
  4. 观察执行结果。
    1. 由于中优先级任务运行的时候,队列中时空的,所以中优先级直接被执行。
    2. 中优先级任务执行完成后,高优先级任务会抢占低优先级任务的位置被优先执行。