Mesos/Omega/Borg(K8S)/Firemament对比

来源:互联网 发布:h3c配置多个端口 编辑:程序博客网 时间:2024/05/01 15:23

Mesos、Omega、Borg(K8S)都是现在工业界中比较流行的集群调度系统。Firemament是OSDI’16发布的集群调度论文,也非常优秀,同时也提供了开源版本。因此这里对这几大调度系统进行一下深入的对比。如有不足或者理解错误的地方,欢迎留言和拍砖

Mesos


Mesos是NSDI发布的集群调度系统,主要面向短作业批处理任务。最核心的贡献我认为是他的两级调度架构,将资源调度和任务调度进行了隔离。轻量级的通用调度架构,保证了很好的可扩展性。

架构

这里写图片描述

面向日趋多样、快速发展的计算框架,不同的框架都运行在一套集群管理系统中,因此需要一个通用的资源调度框架。在此之前的集群管理调度框架主要是集中式架构。集中式架构的好处当然是能掌握全局的资源状态,能够进行更好的调度决策。但是缺点也很明显。集中式的决策所需的决策时间更长(当然也不一定,要看怎么设计),另外当不同的应用由同一个RM进行调度管理,为了适配不同的应用框架的需求,也要加入对应的各种调度策略,使得RM变得越来越臃肿,可扩展性受到限制。

因此Mesos提出的两级调度策略,将资源调度和任务调度分开。资源调度关注于资源管理,任务调度关注自身的任务调度,各司其职。不同的应用框架只需要实现对应的任务调度器,并注册到资源管理器中,就能够获取资源、运行程序。这使得Mesos的可扩展性非常好,类似于插件化的调度框架。同时也使得Mesos非常轻量。如上图所示,Mesos master、Mesos slave、Framework executor、Framework scheduler组成整体结构,Mesos master利用Zookeeper来容错。

但是,两级调度策略,同样也存在其缺点。资源调度器和任务调度器是完全隔离的,因此资源调度器不能获取到任务调度器对资源的使用情况,无法做到更加细粒度的调度。当然另外Mesos本身也存在一些需要解决的问题,如任务框架等待资源分配时间过长、如何隔离等等,不过都有对应的处理方法。

由于Mesos框架的开放性,连K8S都可以和Mesos进行配合使用。现在在由IBM进行主力推进。

Omega


Omega是EuroSys’13发布的论文,是谷歌的内部调度系统。Omega解决了Mesos无法获取整个集群状态的缺点,提出了分布式共享状态架构。该架构的主要特点是每个调度器都拥有整个集群状态的副本。采用乐观锁的思想,直接根据副本的情况进行调度决策,再配合事务操作,能够进行并行度高的调度决策方案。

架构

这里写图片描述

Omega的突出贡献在于他的共享状态设计以及乐观无锁控制机制。Omega中支持多个调度器共存,不同的调度器都拥有集群状态(cell state)的副本。因此调度器可以类似于集中式调度一样,能够提供更好的调度决策。
从Omega的论文看,Omega采用的是乐观锁进行资源分配。但是采用乐观锁的一个典型的问题是当并发度很高时,冲突会很多,会造成决策效率降低。不过设想一下应用场景,系统在谷歌内部使用,用户的并发量应该不是很大,冲突应该不是会很多(Maybe……)

当然,Omega还存在其他不足,比如说调度器支持个数有限,状态同步限制规模扩展等等。

Borg


Borg是谷歌的又一力作,发布在EuroSys’15上,对应的开源版本就是K 8S。说实话先对于前两篇,Borg的贡献点看起来并不是那么突出,我认为Borg的贡献在于他对于调度系统的又一新的理解与认知,以服务的角度进行资源管理。

架构

这里写图片描述

Borg通过访问控制、有效任务打包、超售、进程级别的隔离机制,来达到高利用率。同时也提供较好的用户接口,简化用户操作。在我看来,Borg的各种技巧、方法,都是谷歌Borg在实际运用中的技术,他的难点是能够在超大规模集群上,做到高可用、容错等等,其中的设计技巧可以算是干货,作为其他调度系统的参考。

但是我认为Borg最为突出的贡献,应该是他的服务理念,减少用户使用复杂度。例如,在Borg中,Alloc概念,一个alloc集合(K8S的pod)对应一个job,集合里的一个个alloc,就是一个资源集合,对应到K8S里,就是一个个容器。在K8S里,强调的是一切皆服务,以pod为单位对外提供服务。

容器技术发展到现在,已经是很多年了。为什么在最开始的时候容器技术并不是那么流行,而现在如日中天?我认为其主要原因就是“用户体验“。以前的容器技术虽然也发展的不错,但是上手难度大,操作复杂。Docker后来对容器技术进行了打包、封装,提供给了用户非常友好的界面,使得容器现在被广泛使用。容器的优势,就在于方便、轻量,换句话说就是用户体验好。那么对应到现在的容器调度编排软件,Mesos、Docker swarm等也能做,但是并没有像K8S那样强调服务的理念。因此我认为,服务、良好的用户体验才能使得容器技术继续发光。K8S虽然现在用户没有Mesos多,但是我认为其发展空间很大。现在如网易蜂巢云就是一个完全的容器云,华为也通过K8S部署管理超过50K节点的容器集群。可以说K8S表现还是不错的。

Firmament


Firmament并不是现在工业界在使用的,是OSDI’16上的论文。Firmament是一个集中式调度器。作者很嚣张滴说Firmament既能拥有集中式调度高质量的调度决策,也能用于分布式调度的快速决策,换句话说,调度不仅质量高,速度也快。那Firmament是怎么做到的呢?

Firmament基于图进行调度。其实Firmament的做法并不是最新提出来图结构的,Quincy就已经是基于图的调度了。Firmament也是说了他是基于Quincy的,只不过Quincy没有挖掘出图更多的能力,Firmament充分发挥了图的优势,通过容量和费用的赋值,能够表达出更多的调度策略。此外,为了加快图结构的求解,Firmament进行了最小费用最大流解法的调研,最终利用选定的求解算法和增量式求解加快了图的求解速度。最终解决了集中式调度决策时间长的缺点。

在我看来,Firmament的最核心的贡献在于增加了图的表达能力,相对与Quincy,把图玩儿的更好了。其实我认为基于图的调度,比基于队列的调度更加通用,不需要改变图的结构,只需要改变图中边上的权制,构建容量与费用,就能表达各种调度策略。

但是一个主要的问题是,图的构建是一个比较难的问题。主要是图上的费用应该怎么赋值。也就是对应其所说的cost model。我们也在研究图模型的边如果赋值,能否自动赋值。

综上所述


上述的几种调度框架各有优劣。好像业界现在用的比较多的是Mesos,经受住了工业界的考验。而K8S随着容器技术的不断广泛应用,也越来越被使用。总的来说,对于应该如何选择调度框架,还是要根据自己的已有环境进行选择。如果说已经存在了多种任务框架在集群中运行,那么采用Mesos会比较好。如果你是新的系统,可以选择尝试K8S。

原创粉丝点击