开源组件系列(10):集群化服务资源管理系统(Mesos)

目录

(一)Mesos基本架构

(二)Mesos资源分配策略

(三)Mesos与YARN的对比


Mesos最早是UC Berkeley的一个研究项目,用以解决编程模型和计算框架多样化环境下,不同框架之间的资源隔离和共享问题。尽管它的直接设计动机与YARN有所不同,但它的架构和实现策略与YARN类似,得到了一定范围内的认可,例如Twitter就在使用。

(一)Mesos基本架构

Mesos由四个组件构成,如下图所示:

 

1. Mesos Master

Mesos Master是整个系统的核心,负责管理整个系统中的资源和接入的各种框架,并将Mesos Slave上的资源按照某种策略分配给框架。为了防止Mesos Master出现故障后导致集群不可用,Mesos允许用户配置多个Mesos Master,并通过ZooKeeper进行管理,当主Mesos Master出现故障后,ZooKeeper可马上从备用Master中选择一个提升为新的主Mesos Master。

2. Mesos Slave

Mesos Slave负责接收并执行来自Mesos Maser的命令,并定时将任务执行状态汇报给Mesos Master。Mesos Slave将节点上的资源使用情况发送给Mesos Master,由Mesos Master中的Allocator模块决定将资源分配给哪个Framework。值得注意的是,当前Mesos仅考虑了CPU和内存两种资源,为了避免任务之间相互干扰,同YARN一样,Mesos Slave采用了轻量级资源隔离机制Cgroups。

3. Framework Scheduler

Framework是指外部的框架,如MPI、MapReduce、Spark等,这些框架可以通过注册的方式接入Mesos,以便Mesos进行统一管理和资源分配。Mesos要求接入的框架必须有一个调度器模块Framework Scheduler,该调度器负责框架内部的任务调度。一个Framework在Mesos上的工作流程为:首先通过自己的调度器向Mesos注册,并获取Mesos分配给自己的资源,然后再由自己的调度器将这些资源分配给框架中的任务。也就是说,同YARN一样,Mesos系统采用了双层调度框架:第一层,由Mesos将资源分配给框架;第二层,框架自己的调度器将资源分配给内部的各个任务。当前Mesos支持三种语言编写的调度器,分别是C++、Java和Python,为了向各调度器提供统一的接入方式,Mesos内部采用了C++实现了一个MesosSchedulerDriver(调度器驱动器),Framework的调度器可调用该Driver中的接口与Mesos Master交互,完成一些列功能(如注册、资源分配等)。

4. Framework Executor

Framework Executor主要用于启动框架内部的任务。由于不同的框架,启动任务的接口或者方式不同,当一个新的框架要接入Mesos时,通常需要指定专有的Executor,以告诉Mesos如何启动该框架中的任务。

(二)Mesos资源分配策略

Mesos中最核心的问题是如何构建一个兼具良好扩展性和性能的调度模型,以支持各种计算框架。由于不同框架可能有不同的调度需求,因此,为Mesos设计一个好的调度模型是一个极具挑战性的工作。

一种可能的解决方案时候构建一个具有丰富表达能力的中央调度器,该调度器接收来自不同框架的详细需求描述,比如资源需求、任务调度顺序和组织关系等,然后为这些任务构建一个全局的调度序列。但是,在真实的系统中,由于每种计算框架具有不同的调度需求,且有些框架的调度需求非常复杂,因此,提供一个具有丰富表达能力的API以捕获所有框架的需求是不太可能的,也就是说,该方案过于理想化,在真实系统中很难实现。

Mesos提供了一种简化的方案:将资源调度的控制授权给各个框架。Mesos负责按照一些简单的策略(如FIFO、Fair等)将资源进一步分配给各个作业。考虑到Mesos缺少对各个框架的实际资源需求的了解,为保证框架能高效地获取到自己需要的资源,它提供了三种机制:

1.资源拒绝

如果Mesos为某个框架分配的资源不符合它的要求,则框架可以拒绝接受该资源直到出现满足自己需求的资源。该机制使得框架在复杂的资源约束条件下,还能够保证Mesos设计简单和具有良好的扩展性。

2.资源过滤

每次发生资源调度时,Mesos Master均需要与Framework Scheduler进行通信,如果有些框架总是拒绝某些节点上的资源,那么由于额外的通信开销会使得调度性能变得低效。为避免不必要的通信,Mesos提供了资源过滤机制,允许框架只接收来自“剩余资源量大于L的Mesos Slave”或者“位于特定列表中的Mesos Slave”上的资源。

3.资源回收

如果某个框架在一定的时间内没有为分配的资源返回对应的任务,则Mesos将回收为其分配资源,并将这些资源重新分配给其他框架。为了支持多维资源调度,Mesos采用了主资源公平调度算法(DRF),该算法扩展了最大最小公平算法(max-min fairness),使其能够支持多维资源的调度。

(三)Mesos与YARN的对比

尽管YARN和Mesos诞生于不同的公司和研究机构,但它们的架构却大同小异。总体来说,YARN起源于大数据领域,目前已经形成了良好的生态系统,与其他大数据系统结合紧密;Mesos源自于集群化服务部署,因而更加适合服务器部署与管理。下图为两者组件的对应关系与相关指标对比:

原创文章 54 获赞 61 访问量 1万+

猜你喜欢

转载自blog.csdn.net/gaixiaoyang123/article/details/104995260