开发者学堂课程【分布式系统开发调度技术:资源调度】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/367/detail/4369
资源调度
内容介绍:
一、最大化集群资源利用率
二、最小化任务的等待时间
三、能支持资源的配额
四、能支持任务抢占
一、最大化集群资源利用率
资源调度的本质问题是当有一批任务排队时,如何将现有的资源,包括 CPU,memory,磁盘和网络等综合考虑之后分配给某一个 Job。对于这个问题:
1.最大化集群资源利用率,不能出现每个机器的繁忙程度不均衡的情况
2.最小化任务的等待时间,在集群环境下,通常是多个业务部门共享集群。不能出现某些业务部门的任务一直在运行,而另外其他业务部门的任务一直处于等待状态
3.能支持资源的配额,因为在共享集群,要保证各个业务部门之间的资源利用率是比较均衡的。
4.能支持任务抢占
以下以飞天伏羲在这几个方面是如何做到的。在飞天伏羲系统中,参与资源调度的角色有中控节点 FuxiMaster,以及驻留进程 Tubo,以及发起资源请求的AppMaster。
二、最小化任务的等待时间
1.策略之优先级(Priority)
在在套系统当中,每一个提交上的作业,都会带上一个标签来表明这个作业的优先级,是一个整数值,每一个 Job 有一个 priority 值,值越小,表示优先级越高越靠前。
如下图,横轴是五个Job排好序,而纵轴代表它们的优先级,最左边优先级最低的Job 排在最前面。FuxiMaster 作为资源调度系统,当有了一个空闲资源之后,如何选择在 Job 之间进行调度,准则是优先满足优先级最高的 Job,若有空闲资源之后,依次满足次优先级最高的 Job,是一个递归的过程,按照优先级的顺序依次进行满足。
但在实际中会出现当一个系统处于运行状态时,有临时性的更高优先级的作业加入的情况,如下图中间插入了一个优先级相对第三的 Job,伏羲的做法是首先抢优先级最低的,即图中最靠右的 Job,抢它的资源会 cancel 正在运行 instance,将资源匀给高优先级插入的作业,如还未满足,继续抢倒数第二个优先级 Job 的作业,直到优先级更高的插入这个作业,它的资源全部满足,整个抢占也是递归的过程,在实现时如何做到高效是一个工程的细节。FuxiMaster 可以做到毫秒级别的完成调度。
三、能支持资源的配额
策略之公平调度
如图,实际上是考虑优先级分组的概念,相同优先级的作业如何进行调度,按照启动时间或者提交时间来决定优先级,先到先得当有空闲资源的时候,先分给第一批优先级的作业,如果还有剩余资源,继续分给第二优先级的作业,直到最后资源被分配完。
四、能支持任务抢占
策略之配额(Quota)
由于是多个业务部门或者多个团队在共享一个物理集群。每个组可能对这个资源进行付费,不同付费的团队或业务部门如何保证资源是可用,所以每个组会分配一个quota,即资源配额。
如下图,横轴是不同的组,每个组的柱状图的高度不一样,意味着每个组能使用的最大资源不一样。
这样 FuxiMaster 在调度时,给这个组所有的 job 分配的资源总和不会超过这个组的配合高度,如图中的第四组的使用的规定可能白天没有计算任务,晚上是使用高峰,则在白天时,上面一段配合资源处于空闲状态。
作为资源调度系统,优化目标是要最大化集群的资源利用度,所以这段空闲资源如何充分的利用。
FuxiMaster 飞天系统在调度时会动态的进行Quota的调节,以实现削峰填谷最大化利用集群的物理资源,所以空闲资源,会按照一定的比例将它分发给其他比较紧张的组,第四组的空闲资源不按照其他三组的付费的比例分摊给一号,二号,三号组,一号,二号,三号组柱状图的顶峰会变大,意味着这片资源可以被一号,二号,三号利用起来,这就是削峰填谷的过程。
若第四组有任务时,资源是否会不够,确实是这样,如到了晚上第四组的资源请求量即底下蓝色的部分会变大,此时 FuxiMaster 接收到资源请求之后知道第四组请求变大,此时会让一号,二号,三号组取消一些作业,收回资源,归还给第四组,从而保证第四组的资源的使用情况,因为它花了更多的钱来买配合情况。
第四组买Quota时,是否存在不公平性,因为买了很多的资源,但实际白天不使用时,实际上给了1号,2号,3号组,所以在做 Quota 调节时,会将黄色可以共享资源定价会便宜,蓝色最低保障的资源售价会更贵,通过这种策略,来平衡不同的组之间的 Quota 购买情况,而一号,二号,三号在使用资源之后,也会对其进行计费,是所使用的资源×时间,如果出现一号,二号,三号,抢占了第四组的配额,也无碍,因为在使用过程中会产生账单。
这就是资源调度系统在做配额管理时要考虑的规则的平衡性。