Apache Mesos调度机制

1. 前言

调度器是Mesos的核心部件,主要负责将各个slave上资源分配给各个framework,常见的调度机制有FIFO,Fair Scheduler,Capacity Scheduler,Quincy,Condor等。Mesos为了支持多framework接入,采用了双层调度机制,首先,由mesos中的 allocator将资源分配给framework,然后又由framework自己的调度器将资源分配给任务。本文重点介绍mesos中的 allocator模块。

什么是apache mesos?参考:《统一资源管理与调度平台(系统)介绍》,本文分析基于Mesos SVN Revision 1327410)

2. Mesos调度机制

Mesos中的调度机制被称为“Resource Offer”,采用了基于资源量的调度机制,这不同于Hadoop中的基于slot的机制。在mesos中,slave直接将资源量(CPU和内存)汇报 给master,由master将资源量按照某种机制分配给framework,其中,“某种机制”是“Dominant Resource Fairness(DRF)”

对于类似mesos采用双层调度框架的系统,在设计时,需要解决以下问题:“Mesos在不知道各个framework资源需求的情况下,如何满足 其需求?”,更具体一些,“Mesos在不知道framework中哪些数据存放在哪些节点情况下,如何做到数据locality?”为了解决该问 题,mesos提供了“reject offer”机制,允许framework暂时拒绝不满足其资源需求的slave,在此,mesos采用了类似于Hadoop中的“delay scheduling“调度机制。

在mesos中,作业调度是一个分布式的过程,当出现失败情况时,需要表现出一定的高效性和鲁棒性。为此,mesos提供了以下机制:

(1)filters机制。 每次调度过程,mesos-master需要与framework-scheduler进行通信,如果有些framework总是拒绝slave,那么由 于额外的通信开销会使得调度性能低效。为此避免不必要的通信,mesos提供了filters机制,允许framework只接收“剩余资源量大于L的 slave”或者“只接收node列表中的slave”。

(2)rescinds机制。如果某个framework在一定的时间内没有为分配的资源返回对应的任务,则mesos会回收其资源量,并将这些资源分配给其他framework。

3. Dominant Resource Fairness(DRF)

DRF是一种支持多资源的max-min fair 资源分配机制,其中max表示max{CPU,mem},而min表示min{user1,user2,…}=min{max{CPU1,mem1}, max{CPU2,mem2}, …},其中user代表mesos中的framework,算法伪代码如下图所示:

Apache Mesos调度机制

举例说明,假设系统中共有9 CPUs 和18 GB RAM,有两个user(framework)分别运行了两种任务,分别需要的资源量为<1 CPU, 4 GB> 和 <3 CPUs, 1 GB>。对于用户A,每个task要消耗总CPU的1/9和总内存的2/9,因而A的支配性资源为内存;对于用户B,每个task要消耗总CPU的 1/3和总内存的1/18,因而B的支配性资源为CPU。DRF将均衡所有用户的支配性资源,即:A获取的资源量为:<3 CPUs,12 GB>,可运行3个task;而B获取的资源量为<6 CPUs, 2GB>,可运行2个task,这样分配,每个用户获取了相同比例的支配性资源,即:A获取了2/3的RAMs,B获取了2/3的CPUs。

DRF算法的一个可能的调度序列如下图所示:

Apache Mesos调度机制

DRF的好处是可满足四个特性,即:Sharing incentive,Strategy-proofness,Envy-freeness和Pareto efficiency,具体含义参考后面给出的“参考资料”。

4. Mesos调度问题

Mesos中的DRF调度算法过分的追求公平,没有考虑到实际的应用需求。在实际生产线上,往往需要类似于Hadoop中Capacity Scheduler的调度机制,将所有资源分成若干个queue,每个queue分配一定量的资源,每个user有一定的资源使用上限;更使用的调度策略 是应该支持每个queue可单独定制自己的调度器策略,如:FIFO,Priority等。

由于Mesos采用了双层调度机制,在实际调度时,将面临设计决策问题:第一层和第二层调度器分别实现哪几个调度机制,即:将大部分调度机制放到第一层调度器,还是第一层调度器仅支持简单的资源分配(分配比例由管理员指定)?

Mesos采用了Resource Offer机制(不同于Hadoop中的基于slot的调度机制),这种调度机制面临着资源碎片问题,即:每个节点上的资源不可能全部被分配完,剩下的一点可能不足以让任何任务运行,这样,便产生了类似于操作系统中的内存碎片问题。

5. 参考资料

相关推荐