Mesos超配:让集群利用率可以达到100%

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud

引言:集群利用率100%意味着什么?从某种意义上来说,Mesos集群上没有任何空闲资源时,就可以说达到了100%的利用率。

但是,即使某个框架为某个任务(比如一个web服务器)预留了资源,该任务可能并不会完全使用所有这些资源。实际上,在大多数集群上,实际使用率仅仅有10%~30%。为了解决这个问题,Mesos推出了超配特性。该特性允许Mesos集群自动使用预留但是未使用的资源。

本文选自《用Mesos框架构建分布式应用》。

Mesos超配特性是基于Google的Heracles系统,是解决低实际使用率问题的方案。

要理解超配,首先需要定义slack。slack是指认为被使用了的资源和实际使用的资源之间的差。

Mesos超配:让集群利用率可以达到100%

CPU、内存的分配slack和使用slack

降低slack是所有人的共同目标:slack纯粹是浪费,这里的资源本来可以做一些有产出的事情,却白白空闲着。Mesos集群里有两种类型的slack:

分配slack

分配slack(allocation slack)是集群上的可用资源和框架预留资源之间的差。Mesos从设计上就可以高效解决这一类型的slack,通过向所有连接着的框架重复重新提供资源来实现。这样,如果某个框架不需要或者无法利用某些资源,其他框架就有机会使用这些资源。一些框架,比如Spark,通过启动很多使用少量资源的小型任务来利用这一点,这样它们能够在很多机器上得到很小的资源分配,从而提高集群的利用率,并且将这些资源贡献给用户。

使用slack

使用slack(usage slack)是预留资源和实际使用资源之间的差。比如,如果web服务器预留了两个CPU,但是在没有太多待处理请求的非高峰时段,它几乎不用使用任何资源。超配特性帮助Mesos降低这一类型的slack。

从某些方面来看,Mesos成了自身成功的受害者:Mesos集群里能够大幅降低分配slack,商业生产环境集群的分配slack为5%~15%,这比前面所述系统的20%~30%可低得多。因此,企业联盟,包括Twitter、Mesosphere和Intel,开始构建一种能够降低Mesos使用slack的系统。它们工作的产出就是Mesos超配系统,在很多资源的使用slack上应用控制理念。

要启用超配,Mesos为此添加了一种新类型的资源offer:可撤销offer。可撤销offer和常规offer几乎完全一样,除了这一点:在可撤销offer上启动的任务可以随时被Mesos“杀死”。默认情况下,框架不会接受任何可撤销offer。在注册时向FrameworkInfo里添加REVOCABLE_RESOURCES功能就能选择接受可撤销offer。如果Mesos集群还被配置为启用超配机制,那么任何选择接受可撤销offer的框架在看到常规offer时,也会看到另一种类型的offer,这些特别的offer带有revocable字段,这意味着它们在任何时间都可以被取消。注意当前执行器必须有可撤销的或者常规的资源,无法在相同的执行器上启动可撤销和非可撤销任务的混合体。

超配系统包含两个可插拔组件:资源估算器和服务质量(QoS)控制器。资源估算器的工作是向其slave报告运行着的任务里有多少可用slack,从而slave能将这些额外资源作为slack发布出去。QoS控制器的工作是跟踪使用slack。当使用slack降低,低于分配给可撤销资源的资源时,QoS控制器就会开始“杀死”可撤销任务,确保集群能够保证预留资源的提供。

在Mesos 0.23里,只有一个固定的资源估算器,集群管理员可以让所有slave都发布其固定的额外资源。当大多数任务请求的是一个或者两个CPU,但是却仅仅使用了其资源的5%~10%时,该功能就很有用了。固定的资源估算器会允许每个slave上调度比实际CPU更多的任务。Mesos 0.23仅仅发布了一个不工作的QoS控制器。

Mesosphere和Intel还构建了Serenity,这是一个精妙的控制系统,周期性地衡量每个slave上的使用slack,以便集群能够利用这些资源。Serenity还知道如何估算烦人邻居问题的影响,如何区分正在启动的任务和达到稳定状态的任务,以及其他一些优化集群使用率所必需的实用的调整方案。

超配是一个强大的新特性,可以帮助大型集群多利用10%~40%的资源。超配引入的可撤销资源并不仅仅在分配slack资源时有用,它们还构成了优先任务的基础。

本文选自《用Mesos框架构建分布式应用》

相关推荐