
1、前言
2、传统调度系统的挑战
3、基于智能化算法的云图调度系统
为便于理解,我们将智能调度问题类比为一个装箱问题:
1、箱子和箱子之间有先后关系
2、货车的宽度有限
3、每个箱子有基本的长宽高
4、如何装箱,使得该货车装的箱子体积最多(箱子之间孔隙之和最小)?
任务编排主要依靠调度系统的调度器。编排的顺序影响到同一时间到达任务的执行顺序,蝴蝶效应在这方面体现的淋漓尽致,一个关键的任务延后执行,造成的结果必然是与其相关联的任务无法按时完成。为避免此类问题发生,我们开始了调度器的探索。调度器主要包含调度方式、调度算法和任务优先级功能。
调度方式分为两种,一种是静态调度;另一种是动态调度。静态调度是在进程开始执行之前,就确定好进程的调度顺序,并在之后的执行中不再随环境的变化而改变;动态调度则是在调度环境和任务存在不可预测扰动情况下所进行的调度,他会随环境变化调整调度顺序。与静态调度相比,动态调度能够针对生产现场的实际情况产生更具可操作性的决策方案;
实际生产中的大量问题是随机发生的。如源系统数据晚点、任务报错、集群硬件损坏等随机事件,使得静态调度执行效果不佳,这就需要在执行过程中重新安排调度顺序。动态调度方式就成为云图调度系统的必然选择,为此我们设计了可完全动态调整的调度参数,即理论上可实现每次跑批任务优先级均可以有所不同。
因为集群资源的有限性,必须按照一定的原则选择任务来占用资源。更高的资源利用率、更高的吞吐量、更快的响应时间是调度算法存在的价值。常用的调度算法如下:
先到先服务调度算法
a、非抢占式调度
b、按照任务提交的先后顺序分配计算资源
c、有利于CPU繁忙型任务,不利于I/O繁忙型任务
短任务优先调度算法
a、抢占式调度/非抢占式调度都适用
b、该类调度算法有效降低作业的平均等待时间,提高系统吞吐量
c、未考虑作业的紧迫程度,因而不能保证紧迫性任务的及时处理、对执行时间长的作业不利
高优先权优先调度算法
a、抢占式调度/非抢占式调度都适用
b、两种类型:静态优先权:创建任务时确定,整个运行期间保持不变;动态优先权:创建任务时赋予的优先权可随任务的推进或其等待时间的增加而改变

高优先权优先调度方式的确认,为我们带来了更大的挑战,那就是怎么设置每个任务的优先级才能让执行时间最短。算法核心考虑了三大输入变量:每个任务平均执行时长、系统同一时刻能承受的最大计算量、关键路径依赖关系,算法中每个参数均需要在模拟与生产环境中不断测试与验证来确定其稳定值。在确认链路中每个任务的加工时长后,根据关键路径执行时长来推算单个与累加任务的权重,根据系统算力情况动态调整优先级常量,经过反复的递归运算,最终我们得到了可以复现的稳定优化模型。
首先来看执行引擎的架构,如下图所示

云图系统有一套完整的监控报警体系,包括针对执行出错的任务以及校验未通过的任务等,设置RPA自动电话外呼、短信、邮件、原心等不同的告警方式。同时,在监控体系中设计有优化指标,包括依赖关系合理性、链路执行时间、链路等待时间、整体归因分析等,实现了日常数据运维的自动化。
明确系统功能矩阵,打造依赖管理>调度器>任务分发>调度方式>执行器>日志智能分析>优化依赖管理的自循环体系。

4、业务成效

数匠笔谈
更多精彩
扫码关注




