资源管理与调度系统-资源管理系统Mesos

                                           作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  Mesos是诞生于UC Berkeley的一个研究项目,它的设计动机是解决编程模型和计算框架在多样化环境下,不同框架间的资源隔离和共享问题。

  尽管他的直接设计动机与YARN稍有不同,但它的架构和实现策略与YARN类似。当前部分公司在使用Mesos管理集群资源,比如外国的Twitrer,国内的豆瓣等。

  1.   Mesos官方链接  :http://mesos.apache.org/

  2.   豆瓣的dpark项目 https://github.com/douban/dpark

一.Mesos基本架构

  1. 如下图所示,Apache Mesos由以下四个组件组成,接下来我们将详细对这些组件进行介绍。

1>.Mesos Master

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

2>.Mesos Slave

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

3>.Framework Scheduler

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

4>.Framework Executor

  1. Framework Executor主要用于启动框架内部的任务。由于不同的框架,启动任务的接口或者方式不对,当一个新的框架要接入Mesos时,通常需要指定专有的Executor,宜高速Mesoss如何启动该框架中的任务。为了给各种框架提供统一的编写方式,Mesos内部采用C++实现了一个MesosExecutorDiver(执行器驱动器),Framework可通过该驱动器的相关接口高速Mesos启动任务的方法。

二.Mesos资源分配策略

  1. Mesos中最核心的问题是如何构建一个兼具良好扩展性和性能调度模型以支持各种计算框架。由于不同框架可能有不同的调度需求(这往往跟它的编程模型,通信模型,任务依赖关系和数据放置策略等因素相关),因此,为Mesos设计一个好的调度器模型是一个极具挑战性的工作。
  2.  
  3. 一种可能性的解决方案是构建一个具有丰富表达能力的中央调度器,该调度器接受来自不同框架的详细需求描述,比如资源需求,任务调度顺序和组织关系等,然后为这些任务构建一个全局的调度序列。但是,在真是系统中,由于每种计算框架具有不同的调度需求,且有写框架的调度需求非常复杂,因此,提供一个具有丰富表达能力的API以捕获所有框架的需求是不太可能,也就是说,该方案过于理想化,在真是系统中很难实现。
  4.  
  5. Mesos提供了一种简化方案:将资源调度的控制授权给各个框架。Mesos负责按照一些简单的策略(比如FIFOFari等)将资源分配给各个框架,而框架内部调度器则根据一些个性化的需求将得到的资源进一步分配个各个作业。
  6.  
  7. 考虑到Mesos缺少对各个框架的实际资源需求的了解,为保证框架能高效地获取到自己的需要的资源,它提供了以下三个机制。

1>.资源拒绝

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

2>.资源过滤

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

3>.资源回收

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

三.Mesos与YARN对比

  1. 尽管YARNMesos诞生于不同的公司和研究机构,但它们的架构却大同小异,如下图所示,给出了它们内部的组织对应关系。

  1. 如下表所示,从设计目标,容错性,在线升级,调度模型,调度算法,资源隔离等方面对比了MesosYARN

  1. 总结起来,YARN起源于大数据领域,目前已经形成了良好的生态系统,与其他大数据系统结合紧密,而Mesos源自于集群化服务部署,因而更加适合服务部署与管理。

四.资源管理系统架构演化

  1. Google在论文“Omega:Flexible,scalable schedulers for large compute clusters”中介绍了Google经历的三代资源调度器的架构,如下图所示。
  1.   分别是中央调度器(类似于Hadoop JobTracker,但是支持多种类型作业调度),双层调度架构(类似于MesosYARN)和共享状态架构(Omega),并分别讨论了这几个架构的优缺点,重点剖析了最新资源管理系统Omega的相关实现。

1>.集中式架构

  1. 集中式调度器(Monolithic scheduler)的特点是,资源的调度和应用程序的管理功能全部放到一个进程中完成,开源典型的代表是MRv1 JobTracker的实现。这种设计方式的缺点很明显,扩展性差:首先,集群规模受限,其次,新的调度策略难以融入现有代码中,比如之前仅支持MapReduce作业,现在要支持流式作业,而将流式作业的调度策略嵌入到中央式调度器中是一项很难得工作。
  2.   
      Omega论文中提到了一种对集中式调度器的优化方案:将每种调度策略放到单独一个路径(模块)中,不同的作业由不同的调度策略进行调度。这种方案在作业量和集群规模比较小时,能大大缩短作业响应时间,但由于所有调度策略仍在一个集中式的组件中,整个系统扩展性并没有变得更好。

2>.双层调度架构

  1. 为了解决集中式调度器的不足,双层调度器(Two-level scheduler)是一种很容易想到的解决之道。可将它看作一种分而治之的机制或则策略下放机制:双层调度器仍保存一个经简化的集中式资源调度器,但具体任务相关的调度策略则下放到各个应用程序调度器中完成。这种调度器典型代表是MesosYARNOmega论文重点介绍了MesosMesosTwitter开源的资源管理系统,正如上面我们提到的,Mesos调度器由两部分组成,分别是资源调度器和框架(应用程序)调度器,其中,资源调度器负责将集群中的资源分配给各个框架(应用程序),而框架(应用程序)调度器则负责将资源进一步分配给内部的各个任务,用户很容易将一种框架或者系统接入Mesos,当然,很多框架已经成功接入了Mesos中,包括HadoopMPISpark等。
  2.  
  3. 双层调度器的特点是,各个框架调度器并不知道整个集群资源的使用情况,只是被动的接受资源;资源调度器仅将可用的资源推送给各个框架,而框架自己选择使用还是拒绝这些资源;一旦框架接受到新资源后,再进一步将资源分配给其内部的任务,进而实现双层调度。
  4.  
  5.   然而,双层调度的缺点也是非常明显的:
        1)各个框架无法知道整个集群的实时资源使用情况
            很多框架不需要知道整个集群的实时资源使用情况就可以运行的很顺畅,但是对于其他的一些应用,为了提供实时资源使用情况可以挖掘潜在的优化空间,比如,当集群非常繁忙时,一个服务在一个节点上运行失败了,此时应该选择换一个节点重新运行它呢,还是在这个节点上在此尝试运行?通常而言,换一个节点可能会更有利(排除硬件故障和即诶案环境问题导致失败),但是,如果此时集群非常繁忙,所以节点只剩下小于5GB的内存,而这个服务需要10GB内存,那么换一个节点可能意味着长时间等待资源释放,而这个等待时间是无法确定的。
  6.  
  7.     2)采用被关锁,并发粒度小
            在数据库领域,悲观锁和乐观锁的争论一直不休,悲观锁通常采用锁机制控制并发,这会大大降低性能,而乐观锁则采用多版本并发控制,典型代表是MySQL InnoDB,这种机制通过多版本方式控制并发,可大大提升性能。
            YARN/Mesos中,在任意一个时刻,Mesos资源调度器只会将某些资源推送给一个框架,等到该框架返回资源使用情况后,才能够将资源再次推动给其他框架,因此,YARN/Mesos资源调度器中实际上有一个全局锁,这大大限制了系统的并发性。

3>.共享状态架构

  1.   为了克服双层调度器的以上两个缺点,Google开发了下一代资源管理系统OmegaOmega是一种基于共享状态的调度器(Shared State Scheduler),该调度器将双层调度器中的集中式资源调度模块简化成了一些持久化的共享数据(状态)和针对这些数据的验证代码,而这里的“共享数据”实际上就是整个集群的实时资源使用信息。一旦引入了共享数据后,共享数据的并发访问方式就成为该系统设计的核心,而Omega则采用了传统数据库中基于多版本的并发访问控制方式(也称为“乐观锁”),这大大提升了Omega的并发性。
  2.   
      由于Omega不再有集中式的调度模块,因此,不能像Mesos或者YARN集群那样,在一个统一模块完成以下功能:对整个集群中的所有资源分组,限制没类应用程序的资源使用量,限制每个用户的资源使用量,限制每个用户的资源使用量等。这些全部由各个应用程序调度器自我管理和控制,根据论文所属,Omega只是将优先级这一限制放到了共享数据的验证代码中,即当同时有多个应用程序申请同一份资源时,优先级最高的哪个应用程序将获得该资源,其他资源限制全部放到各个子调度器。
  3.  
  4.   引入多版本并发控制后,限制该机制性能的一个因素是资源访问冲突的次数,冲突次数越多,系统性能下降得越快,而Google通过实际负载测试证明,这种方式的冲突次数是完全可以接受的。
  5.  
  6.   Omega论文中谈到,Omega是从Google现有系统上演化而来的。也就是从类似于YARN或者Mesos的系统改造而来的,经过前面的介绍后,有心的读者会发现,可以很容易将YARN或者Mesos改造成一个类Omega的系统,有兴趣的读者可以尝试一下完成这项工作。

资源管理与调度系统-资源管理系统Mesos的更多相关文章

  1. 资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统

    资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是资源隔离 资源隔离是指为不同任务提供可独立使用的计算资源以 ...

  2. 资源管理与调度系统-YARN的基本架构与原理

    资源管理与调度系统-YARN的基本架构与原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了能够对集群中的资源进行统一管理和调度,Hadoop2.0引入了数据操作系统YARN. ...

  3. 资源管理与调度系统-YARN的资源调度器

    资源管理与调度系统-YARN的资源调度器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 资源调度器是Hadoop YARN中最核心的组件之一,它是ResourceManager中的 ...

  4. 如何提升集群资源利用率? 阿里容器调度系统Sigma 深入解析

    阿里妹导读:为了保证系统的在线交易服务顺利运转,最初几年,阿里都是在双11大促来临之前大量采购机器储备计算资源,导致了双11之后资源大量闲置点现象.是否能把计算任务与在线服务进行混合部署,在现有弹性资 ...

  5. Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源,BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 各种后台管理系统

    Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 家庭理财系统 各种后 ...

  6. 解析Google集群资源管理系统Omega

    1. 背景 Google的第一代/第二代集群(资源)管理系统被称为Borg,Borg设计细节因零零星星出现在各种文章中而知名,但一直未公开(比如发一篇paper).然而,我们可从腾讯公布的Torca( ...

  7. Hulu大规模容器调度系统Capos

    Hulu是美国领先的互联网专业视频服务平台,目前在美国拥有超过2000万付费用户.Hulu总部位于美国洛杉矶,北京办公室是仅次于总部的第二大研发中心,也是从Hulu成立伊始就具有重要战略地位的分支办公 ...

  8. [转帖]单集群10万节点 走进腾讯云分布式调度系统VStation

    单集群10万节点 走进腾讯云分布式调度系统VStation https://www.sohu.com/a/227223696_355140 2018-04-04 08:18 云计算并非无中生有的概念, ...

  9. 工作流调度系统Azkaban的简介和使用

    1 概述 1.1 为什么需要工作流调度系统 l 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 l 各任务单元之间存在时间 ...

随机推荐

  1. [LeetCode] 186. Reverse Words in a String II 翻转字符串中的单词 II

    Given an input string, reverse the string word by word. A word is defined as a sequence of non-space ...

  2. Deploy != Release(第一部分):部署与发布的区别,以及为什么这很重要

    原文地址:http://ju.outofmemory.cn/entry/351873 翻译自: Deploy != Release (Part 1): The difference between d ...

  3. 对于并发任务,应该使用 Task 替代 BackgroundWorker

    背景 EF + Oracle,并发存储监控记录,使用 BackgroundWorker 时产生错误如下: public void MonitorLogging(DateTime DateStart, ...

  4. SpringBoot(1)

    SpringBoot 8/2 CRUD 发送put请求修改数据有三个步骤: SpringMVC中配置HiddenHttpMethodFilter 页面上创建一个post请求(form标签只能写get和 ...

  5. python3遇到的问题

    a bytes-like object is required,not str': 问题出在python3.5和Python2.7在套接字返回值解码上有区别:python bytes和str两种类型可 ...

  6. 【LEETCODE】52、数组分类,简单级别,题目:717,661,746,628,643,849

    package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...

  7. 协议——SPI

    SPI(Serial Peripheral interface)是由摩托罗拉公司定义的一种串行外围设备接口,是一种高速.全双工.同步的通信总线,只需要四根信号线即可,节约引脚,同时有利于PCB的布局. ...

  8. 小程序的数据监听 用法和vue中的watch一样====使用通配符监听所有自数据字段的变化

    使用通配符监听所有自数据字段的变化

  9. vue+element+upload实现头像上传

    后台 @RequestMapping("/up") public JSONObject up(@RequestParam("picFile") Multipar ...

  10. Linux进程自保护攻防对抗技术研究(Process Kill Technology && Process Protection Against In Linux)

    0. 引言 0x1: Linux系统攻防思想 在linux下进行"进程kill"和"进程保护"的总体思路有以下几个,我们围绕这几个核心思想展开进行研究 . 直接 ...