Mesos的体系结构和工作流 二 深入浅出Mesos (mesos的概念)

Mesos的体系结构和工作流 二 深入浅出Mesos (mesos的概念)

【编者按】Mesos 是 Apache 下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos 最初是由加州大学伯克利分校的 AMPLab 开发的,后在 Twitter 得到广泛使用。InfoQ 接下来将会策划系列文章来为读者剖析 Mesos。本文是整个系列的第一篇,简单介绍了 Mesos 的背景、历史以及架构。

注:本文翻译自Cloud Architect Musings,InfoQ 中文站在获得作者授权的基础上对文章进行了翻译。


在本系列的第一篇文章中,我简单介绍了Apache Mesos 的背景、架构,以及它在数据中心资源管理中的价值。本篇文章将深入剖析Mesos 的技术细节和组件间的流程,以便大家更好地理解为什么Mesos 是数据中心操作系统内核的重要候选者。文中所述的大部分技术细节都来自Ben Hindman团队 2010 年在加州大学伯克利分校时发表的白皮书。 顺便说一句,Hindman 已经离开Twitter 去了Mesosphere,着手建设并商业化以 Mesos 为核心的数据中心操作系统。在此,我将重点放在提炼白皮书的主要观点上,然后给出一些我对相关技术所产生的价值的思考。

Mesos 流程

接着上一篇文章说。并结合前述的加州大学伯克利分校的白皮书以及Apache Mesos 网站,开始我们的讲述:

资源分配

为了实现在同一组 Slave 节点集合上运行多任务这一目标,Mesos 使用了隔离模块, 该模块使用了一些应用和进程隔离机制来运行这些任务。 不足为奇的是,虽然可以使用虚拟机隔离实现隔离模块,但是 Mesos 当前模块支持的是容器隔离。 Mesos 早在 2009 年就用上了 Linux 的容器技术,如 cgroups 和 Solaris Zone,时至今日这些仍然是默认的。 然而,Mesos 社区增加了 Docker 作为运行任务的隔离机制。 不管使用哪种隔离模块,为运行特定应用程序的任务,都需要将执行器全部打包,并在已经为该任务分配资源的 Slave 服务器上启动。 当任务执行完毕后,容器会被“销毁”,资源会被释放,以便可以执行其他任务。

我们来更深入地研究一下资源邀约和分配策略,因为这对 Mesos 管理跨多个 Framework 和应用的资源,是不可或缺的。 我们前面提到资源邀约的概念,即由 Master 向注册其上的 Framework 发送资源邀约。 每次资源邀约包含一份 Slave 节点上可用的 CPU、RAM 等资源的列表。 Master 提供这些资源给它的 Framework,是基于分配策略的。分配策略对所有的 Framework 普遍适用,同时适用于特定的 Framework。 Framework 可以拒绝资源邀约,如果它不满足要求,若此,资源邀约随即可以发给其他 Framework。 由 Mesos 管理的应用程序通常运行短周期的任务,因此这样可以快速释放资源,缓解 Framework 的资源饥饿; Slave 定期向 Master 报告其可用资源,以便 Master 能够不断产生新的资源邀约。 另外,还可以使用诸如此类的技术, 每个 Fraamework 过滤不满足要求的资源邀约、Master 主动废除给定周期内一直没有被接受的邀约。

分配策略有助于 Mesos Master 判断是否应该把当前可用资源提供给特定的 Framework,以及应该提供多少资源。 关于 Mesos 中使用资源分配以及可插拔的分配模块,实现非常细粒度的资源共享,会单独写一篇文章。 言归正传,Mesos 实现了公平共享和严格优先级(这两个概念我会在资源分配那篇讲)分配模块, 确保大部分用例的最佳资源共享。已经实现的新分配模块可以处理大部分之外的用例。

集大成者

现在来回答谈及 Mesos 时,“那又怎样”的问题。 对于我来说,令人兴奋的是 Mesos 集四大好处于一身(概述如下),正如我在前一篇文章中所述,我目测 Mesos 将为下一代数据中心的操作系统内核。

上图来自 Mesosphere 网站,描绘出 Mesos 为效率带来的好处。如今,在大多数数据中心中,服务器的静态分区是常态,即使使用最新的应用程序,如 Hadoop。这时常令人担忧的是,当不同的应用程序使用相同的节点时,调度相互冲突,可用资源互相争抢。静态分区本质上是低效的,因为经常会面临,其中一个分区已经资源耗尽,而另一个分区的资源却没有得到充分利用,而且没有什么简单的方法能跨分区集群重新分配资源。使用 Mesos 资源管理器仲裁不同的调度器,我们将进入动态分区 / 弹性共享的模式,所有应用程序都可以使用节点的公共池,安全地、最大化地利用资源。 一个经常被引用的例子是 Slave 节点通常运行 Hadoop 作业,在 Slave 空闲阶段,动态分配给他们运行批处理作业,反之亦然。 值得一提的是,这其中的某些环节可以通过虚拟化技术,如 VMware vSphere 的分布式资源调度(DRS)来完成。 然而,Mesos 具有更精细的粒度,因为 Mesos 在应用层而不是机器层分配资源,通过容器而不是整个虚拟机(VM)分配任务。 前者能够为每个应用程序的特殊需求做考量,应用程序的调度器知道最有效地利用资源 ; 后者能够更好地“装箱”,运行一个任务,没有必要实例化一整个虚拟机,其所需的进程和二进制文件足矣。

总结

在接下来的文章中,我将更深入到资源分配模块,并解释如何在 Mesos 栈的各级上实现容错。 同时,我很期待读者的反馈,特别是关于如果我打标的地方,如果你发现哪里不对,请反馈给我。 我也会在响应你的反馈,请关注 @hui_kenneth。

查看英文原文: DIGGING DEEPER INTO APACHE MESOS


感谢谢丽对本文的审校,郭蕾对本文的策划。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(,@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群 )。

声明:本文来自用户分享和网络收集,仅供学习与参考,测试请备份。