4. 任务模型:任务类型与属性

在DAG任务调度系统中,任务模型是调度决策的基础输入。任务模型不仅定义了单个计算单元的行为特征,还决定了数据依赖关系的传递方式和服务边界的划分策略。本节从任务类型和任务属性两个维度展开,为后续数据传输机制设计提供模型支撑。

4.1 任务类型

根据任务对计算资源和I/O资源的消耗特征,DAG中的任务节点可分为三种基本类型。不同类型的任务在调度策略、数据放置和传输路径上存在显著差异。

任务类型 资源瓶颈 典型场景 数据特征 调度倾向
计算型 CPU / GPU 矩阵乘法、模型训练、加密运算 输入数据量小,中间结果大 优先分配高性能计算节点
I/O型 磁盘 / 网络带宽 数据清洗、文件转换、日志聚合 输入输出数据量大,计算量小 优先靠近数据源或存储节点
混合型 CPU + I/O 交替 ETL管道、特征工程、实时推理 数据量与计算量均衡 需动态平衡资源分配
设计要点: 在服务边界视角下,计算型任务应尽量将数据“推”到计算节点本地,减少跨边界传输;I/O型任务则应让计算“靠近”数据,避免数据大范围移动;混合型任务需要引入阶段性调度策略,在计算阶段和I/O阶段切换数据流模式。

4.2 任务属性

每个DAG任务节点携带一组关键属性,这些属性直接影响调度器对执行顺序、资源分配和数据传输路径的决策。核心属性包括执行时间、数据量和优先级。

4.2.1 执行时间

执行时间指任务在理想资源条件下的预估运行时长。在DAG调度中,执行时间用于计算关键路径、评估并行度和预测完成时间。执行时间通常以毫秒或秒为单位,并允许以概率分布形式表达不确定性。

4.2.2 数据量

数据量描述任务输入、输出及中间结果的大小。数据量属性是决定数据传输开销的核心参数,直接影响服务边界是否值得跨越。数据量通常分为三个等级:

  • 小数据量(< 1 MB): 传输开销可忽略,适合频繁跨边界传递。
  • 中等数据量(1 MB ~ 100 MB): 需权衡传输成本与计算本地化收益。
  • 大数据量(> 100 MB): 应优先避免跨边界传输,采用数据本地化调度。

4.2.3 优先级

优先级用于表达任务在DAG中的紧急程度或业务重要性。优先级通常分为静态优先级(由DAG结构或用户指定)和动态优先级(由调度器运行时调整)。在服务边界决策中,高优先级任务应获得更短的数据传输路径和更少的排队等待。

实践建议: 优先级不应单独使用,而应与执行时间和数据量联合建模。例如,一个高优先级但数据量极大的任务,如果强制跨边界传输,反而可能因网络拥塞导致整体延迟增加。建议采用加权评分函数:调度权重 = α × 优先级 + β / 执行时间 + γ / 数据量,其中α、β、γ为可调系数。

4.3 任务模型与数据传输的关联

任务类型和属性共同决定了数据传输机制的设计约束。下图展示了任务模型各要素如何影响数据传输路径的选择和服务边界的划分。

任务模型与数据传输关联图 任务模型 → 数据传输机制映射 任务模型 计算型 CPU密集,数据量小 I/O型 I/O密集,数据量大 混合型 CPU+I/O交替 执行时间 关键路径计算 优先级 紧急程度 数据传输机制决策 数据本地化调度 计算型任务优先 数据就近放置 I/O型任务优先 阶段性传输策略 混合型任务 关键路径加速 执行时间驱动 跨边界传输控制 数据量阈值判断 优先级抢占通道 高优先级任务 服务边界决策规则 数据量 < 阈值 → 允许跨边界传输 数据量 ≥ 阈值 → 强制数据本地化

4.4 任务属性组合决策矩阵

在实际调度中,任务属性需要组合使用才能做出合理的服务边界决策。下表给出了不同属性组合下的推荐数据传输策略。

执行时间 数据量 优先级 推荐传输策略 服务边界决策
短 小 高 直接传输,不等待 允许跨边界
短 大 高 预取+本地化 尽量本地化
长 小 低 排队传输,可合并 允许跨边界
长 大 低 数据不动,计算移动 强制本地化
长 大 高 预留带宽+预取 动态评估
常见误区: 仅根据任务类型或单一属性做调度决策,容易导致服务边界频繁抖动。例如,一个计算型任务如果携带大数据量输入,仍然强制跨边界传输,会引发网络拥塞。正确的做法是建立多维属性联合评估机制,在调度器内部维护一个属性权重向量,实时计算每个任务节点的“边界跨越代价”。

4.5 任务模型在DAG中的表示

在DAG调度框架中,每个任务节点通常以结构化数据表示。以下是一个典型任务节点的JSON表示示例:

{
  "task_id": "task_0042",
  "type": "mixed",
  "attributes": {
    "execution_time": {
      "estimated_ms": 3500,
      "variance_ms": 200,
      "distribution": "normal"
    },
    "data_volume": {
      "input_bytes": 52428800,
      "output_bytes": 10485760,
      "intermediate_bytes": 20971520
    },
    "priority": {
      "static_level": 3,
      "dynamic_boost": 1.2,
      "deadline_ms": 15000
    }
  },
  "dependencies": ["task_0038", "task_0039"],
  "service_boundary_hint": "prefer_local"
}

该表示结构将任务类型、执行时间、数据量和优先级统一封装,并额外提供service_boundary_hint字段,用于指导调度器在服务边界划分时做出初步判断。该字段可由DAG编译器静态分析生成,也可由运行时调度器动态调整。