流任务调度
为实现任务的合理分发与高效执行,Orca 内置一套分布式调度算法,基于节点资源打分、调度规则匹配与流图拓扑解析,动态完成流任务的分配。系统还支持错误恢复重调度、计算组隔离等功能,确保资源隔离与运行稳定性。
调度原则
调度器遵循以下原则:
- 均衡负载:优先将任务分配至空闲资源充足的节点,避免 CPU、内存或磁盘资源过载;
- 计算组隔离:同一流图内的任务运行在同一计算组中;
- 流表调度约束:公共流表部署在数据节点;
- Siblings 任务亲和性:具有相同上游和下游的任务称为 siblings 任务,将它们分配至同一节点,减少通信代价;
节点打分机制
系统根据每个候选节点的资源,计算一个评分值表示该节点的调度优先级。对不同节点类型采取不同的评分标准:
- 计算节点的评分由其 CPU 使用率和内存使用率计算得到。
- 数据节点的评分由其 CPU 使用率、内存使用率和磁盘使用率计算得到。
调度流程与任务分配
调度过程基于贪心策略,整体流程如下:
- 任务复杂度排序:系统根据流任务中的算子数量,评估其复杂度,越复杂的任务越早被调度。
- 候选节点评分:按前述规则计算所有符合调度约束的节点分数。
- 节点优先筛选:
- 若任务包含公共流表,则限定在数据节点中筛选;
- 若任务不包含公共流表,限定在同一个计算组内筛选计算节点;
- 若某一节点已分配同流图 siblings 任务 ,则增大其评分值。
- 任务分配:将任务分配给得分最高的节点,并更新其评分值,确保后续任务感知当前负载变化。
