关于 Mesos,你知道多少?13 个问题带你深入了解 Mesos
周伟涛,现数人科技(主要产品数人云,基于 Mesos 和 Docker 技术的云操作系统)云平台负责人,曾就职于国际开源解决方案供应商 Red Hat, 红帽认证工程师, Mesos Contributor,高级 Python 开发工程师。 是国内较早一批接触使用Docker,Mesos 等技术的开发者。
Apache Mesos 是一个集群管理器,提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行 Hadoop、MPI、Hypertable、Spark。
13 个问题带你深入了解 Mesos
(问答来自 OSChina 开源中国社区第 100 期高手问答 —— Apache Mesos)
Q1:对大多数人来说还不知道什么是 Mesos,请介绍下他是干什么的,有什么用,怎么用?
A1:你好, Mesos 在国内的资料目前虽然不多,但是你随便百度,谷歌一下,还是有一些的。这里我想拿一个例子来解释 Mesos,假设某公司需要频繁进行大数据计算,该任务运行时需要 N 多 CPU 和内存,为了满足这个需求,我们有两种思路:
思路一)使用小型机,单机即可为任务提供足够 的资源;
思路二)分布式计算,即提供一批普通配置的机器(计算节点),也就是集群,将计算任务拆分到各机器上计算,然后汇总结果。
思路二是当前正在流行的做法,这种方式的优点不再多说。为了达到思路二的要求,我们需要建立数据中心(集群)。进一步,为了充分利用数据中心(集群)的资源(譬如为不同的任务分配不同资源,按任务优先级分配资源等),我们就需要一个工具来进行整个数据中心资源的管理、分配等, 这个工具就是 Mesos。 与 Mesos 类似的工具还有 YARN.
除此之外, Mesos 不仅为计算任务 Offer 资源, 它也支持运行长时任务(譬如 Web应用)。目前国外好多互联网公司都在使用 Mesos 来作为它们的集群管理工具,这里是一个 Powered by Mesos list: https://mesos.apache.org/documentation/latest/powered-by-mesos/
Q2:我们现在用 Cloudera 这套,能简单介绍下 Mesos 和 Cloudera 的差别吗?
A2:Mesos 的主要目标就是去帮助管理不同框架(或者应用栈)间的集群资源。比如说,有一个业务需要在同一个物理集群上同时运行Hadoop,Storm及 Spark。这种情况下,现有的调度器是无法完成跨框架间的如此细粒度的资源共享的。Hadoop 的 YARN 调度器是一个中央调度器,它可以允许多个框架 运行在一个集群里。
但是,要使用框架特定的算法或者调度策略的话就变得很难了,因为多个框架间只有一种调度算法。比如说,MPI 使用的是组调度算法,而 Spark 用的是延迟调度。它们两个同时运行在一个集群上会导致供求关系的冲突。还有一个办法就是将集群物理拆分成多个小的集群,然后将不同的框架独立地 运行在这些小集群上。再有一个方法就是为每个框架分配一组虚拟机。正如Regola 和 Ducom 所说的,虚拟化被认为是一个性能瓶颈,尤其是在高性能计算 (HPC)系统中。这正是 Mesos 适合的场景——它允许用户跨框架来管理集群资源。
Mesos 是一个双层调度器。在第一层中,Mesos 将一定的资源提供(以容器的形式)给对应的框架。框架在第二层接收到资源后,会运行自己的调度算法来 将任务分配到 Mesos 所提供的这些资源上。和 Hadoop YARN 的这种中央调度器相比,或许它在集群资源使用方面并不是那么高效。但是它带来了灵活性——比如说,多个框架实例可以运行在一个集群里。这是现有的这些调度器都无法实现的。就算是 Hadoop YARN 也只是尽量争取在同一个集群上支持类似 MPI 这样的第三方框架而已。更重要的是,随着新框架的诞生,比如说 Samza 最近就被 LinkedIn 开源出来了——有了 Mesos 这些新框架可以试验性地部署到现有的集群上,和其它的框架和平共处。
Q3:您好,Mesos 有哪些典型的应用场景?看了一些介绍,说是能做 Docker 的编排服务。与 OpenStack 这样的云平台管理物理机 CPU、内存,Cloudera Manager 管理 Hadoop 集群服务有什么区别?
A3:现在 Mesos 的应用场景非常多,譬如
1)Spark on Mesos (这是标配 )
2)Jenkins on Mesos
3)Mesos 做 docker 的编排服务等。
与 OpenStack 相比, 首先,物理机,虚拟机都可以作为 Mesos 的集群节点;其次, 粒度不同, Mesos 的基本计算单元是容器(LXC) , 而 OpenStack 的是 VM(听说现在也支持Docker 容器技术了),前者资源利用率更高;最后,轻量级,Mesos 只负责 Offer 资源给Framework,不负责调度资源。 OpenStack 更贴近于 IaaS 层,而 Mesos 在 IaaS 之上。所以有人称其为 DCOS,或者分布式操作系统。
Q4:各方面边界在哪,有什么优劣势,谢谢。
A4:优点
资源管理策略 Dominant Resource Fairness(DRF), 这是 Mesos 的核心,也是我们把Mesos 比作分布式系统 Kernel 的根本原因。通俗讲,Mesos 能够保证集群内的所有用户有平等的机会使用集群内的资源,这里的资源包括 CPU,内存,磁盘等等。很多人拿 Mesos跟 k8s 相比,我对 k8s 了解不深,但是,我认为这两者侧重点不同不能做比较,k8s 只是负责容器编排而不是集群资源管理。不能因为都可以管理 Docker,我们就把它们混为一谈。
轻量级。相对于 YARN,Mesos只负责 Offer 资源给 Framework,不负责调度资源。这样,理论上,我们可以让各种东西使用 Mesos 集群资源,而不像 YARN 只拘泥于 Hadoop,我们需要做的是开发调度器(Mesos Framework)。
提高分布式集群的资源利用率:这是一个 Generic 的优点。从某些方面来说,所有的集群管理工具都是为了提高资源利用率。VM 的出现,催生了 IaaS;容器的出现,催生了 K8s, Mesos 等等。简单讲,同样多的资源,我们利用 IaaS 把它们拆成 VM 与 利用 K8s/Mesos 把它们拆成容器,显然后者的资源利用率更高。(这里我没有讨论安全的问题,我们假设内部子网环境不需要考虑这个。)
缺点
门槛太高。只部署一套 Mesos,你啥都干不了,为了使用它,你需要不同的 Mesos Framework,像 Marathon,Chronos,Spark 等等。或者自己写 Framework 来调度 Mesos给的资源,这让大家望而却步。
目前对 Stateful Service 的支持不够。Mesos 集群目前无法进行数据持久化。0.23 版本增加了 Persistent resource 和 Dynamic reserver,数据持久化问题将得到改善。
脏活累活不会少。Team 在使用 Mesos 前期很乐观,认为搞定了 Mesos,我们的运维同学能轻松很多。然而,根本不是那么回事儿,集群节点的优化,磁盘,网络的设置,等等这些,Mesos 是不会帮你干的。使用初期,运维的工作量不仅没有减轻,反而更重了。Mesos 项目还在紧锣密鼓的开发中,很多功能还不完善。
Q5:我想请教下,如果要做一个云服务平台,Mesos 和 Kubernates 怎么去选型
A5:目前的现状是 Mesos 和 K8s 的生态圈各自都发展的比较好,丢弃哪一个都很吃亏。不如按你个人的喜好,先选择一个投下去先用起来。比如数人云 直接一键部署,这样太方便了。可以快速体验 Mesos 的好处。
这个要看你的具体需求。据我所知, K8s 目前只支持 Docker 而且鲜有生产环境的用例; 而 Mesos 不需要你的应用包到 Docker 里面并且其经历过生产环境的考验。 但是, 反过来, K8s 的社区更加活跃,其正在高速发展中,前景非常好。 当然,上述都不是关键, 一个好用的云平台更多的是要有好的产品理念。 请参考数人云
Q6:对于长时间任务,有没有好的调度器算法或者策略
A6:长任务是依靠马拉松 Marathon 框架,对于 Docker,Mesos + Marathon 基本上是现在最成熟的分布式运行框架。长任务是依靠马拉松 Marathon 框架,对于 Docker,Mesos + Marathon 基本上是现在最成熟的分布式运行框架。
Q7:请问下 Mesos 和 Docker 结合,Mesos 只是能解决资源分配问题对么?
A7:对的,Mesos 负责资源分配,需要有个东东负责 Docker 的任务调度,这样就能将 Docker实例自动下发到集群中运行。这个组件叫马拉松 Marathon。Mesos + Marathon 基本上现在最稳定的 Docker 集群化调度框架
Q8:Mesos 现在可以逐渐应用到生产环境了?
A8:Mesos 早就可以应用到生产环境了, 国外的 Airbnb, Apple, Uber, Twitter,国内的携程,爱奇艺,还有我们公司数人科技都在生产环境使用了 Mesos。 你在这里可以看到使用 Mesos 的列表 https://mesos.apache.org/documentation/latest/powered-by-mesos/
Q9:Mesos 和 Zookeeper 有什么关联吗?
A9:Zookeeper 是一个为分布式应用提供一致性服务的软件, 而 Mesos 是一个分布式应用。所以在生产环境,我们需要使用 Zookeeper 来为 Mesos 提供一致性服务。
Q10:Mesos,Swarm,Kubernetes 之间有没有竞争关系?虽然这三家都说互相支持,但是这样做会不会太啰嗦了?
A10:Swarm 与 K8s 有很多交叉。 Mesos 更多的是 Focus 在资源管理上, 只是恰好可以使用 Container 做资源隔离。竞争与否,还需要看社区的走向吧。
Q11:你好,看了看这个框架想请教几个问题:
1.这个框架是否自带日志搜集模块?
2.这个框架能否进行性能统计?
3.这个框架在某个节点资源耗尽时可否自动切换?如果所有节点资源耗尽是否容易崩溃,自恢复能力如何?
4.这个框架可否配置负载均衡?
谢谢:)
A11:
- 带日志模块,但是功能比较简单,没有一个全局的展示
- 可以进行性能统计
- Mesos 是根据当前的集群资源统计来决定给调度器分配多少资源的,资源耗尽只会导致新的应用无法部署,不会影响正在运行的东西。
- 可以配置负载均衡。 并且 Mesos 本身也有多 Master 机制
Q12:请问 Mesos 怎样决定分配多少资源?分配的资源什么时候回收?
A12:Mesos 与其它的集群管理工具不同, Mesos 本身不负责分配资源,它只是将当前集群的剩余资源提供给注册到它的调度器,由调度器本身来决定使用多少资源,以及合适释放资源。
Q13:假设集群里有 3 台服务器,每台服务器可用内存 16G,现在调度器要运行一个任务需要24G 内存,那么 Mesos 是把整个集群的 48G 内存当成一个整体来提供,还是会向调度器提供每台服务器剩余的内存,也就是说下面两种情况哪种才是正确的:
1. 调度器先申请节点1的 16G 内存,再申请节点 2 的 8G 内存,用哪个节点的内存完全由调度器控制
2. 调度器一次过申请 24G 内存,由 Mesos 控制具体是用了哪个节点的内存。有可能是每个节点都分配了 8G;也有可能是一个节点 16G,另一个节点 8G
A13:看过 DPark 实现 Mesos 的调度器。你一个任务需要 24G 内存,这个任务就需要拆分才可以调度起来。每个小任务需要 16G 以下的内存。才能通过调度器,调度到具体服务器。 调度器一般都是把任务调度到文件所在的机器上。由调度器控制使用哪里的资源, Mesos 告诉调度器哪些资源可用。
阅读完这 13 个问答,希望可以让你对 Mesos 的认识更深,并用于项目实践,分享更多地经验给 Mesos 爱好者:)
作者:数人云
链接:https://www.jianshu.com/p/ef220ec34b6e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
关于 Mesos,你知道多少?13 个问题带你深入了解 Mesos的更多相关文章
- 第13章 GPIO-位带操作—零死角玩转STM32-F429系列
第13章 GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- Mesos源码分析(13): MesosContainerier运行一个Task
MesosContainerizer的实现在文件src/slave/containerizer/mesos/containerizer.cpp中 Future<bool> MesosC ...
- 13张PPT带你了解主动式消息队列处理集群
前言 偷偷和你们说,我搞了一份内部资料,该内部资料共有13张PPT,据作者透露,该PPT至少花了整整1周时间才编写完成,其内容简洁明了,内容深度足够,易于初学者理解,也给深度开发人员分享了不一样的消息 ...
- C# 13行代码带你模拟登录QQ空间
最近想做一个QQ空间点赞的小工具,于是晚上下班回来就开始分析PC版的QQ空间,打开Chrome,切换到Network,然后输入账号密码,然后点击登录... 然后,我曹....一堆请求就开始了....搞 ...
- mesos是什么
听过不少人在讨论 Mesos,然而并不是很明白 Mesos 到底能够解决什么问题,使用场景是怎样的,周伟涛(国内较早一批接触使用 Docker,Mesos 等技术的开发者)用一句话形容它, Mesos ...
- Mesos源码分析
Mesos源码分析(1): Mesos的启动过程总论 Mesos源码分析(2): Mesos Master的启动之一 Mesos源码分析(3): Mesos Master的启动之二 Mesos源码分析 ...
- Docker云Paas平台部署:Docker+Mesos+Marathon
针对“互联网+”时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及其相关技术的出现和发 ...
- Spark on Mesos部署
一.Mesos的安装和部署 1.下载mesos源码和依赖包 部署环境 centOS 6.6 mesos-0.21.0 spark-1.4.1 因为mesos官方只提供源码,所以必须要自己进行编译安装使 ...
- [docker]mesos集群的启动脚本
宿主机的IP地址列表 mesos-lb:192.168.253.159 mesos-marathon:192.168.253.159 mesos-master:192.168.253.159 meso ...
随机推荐
- Dcloud课程3 什么是HBuilder和MUI
Dcloud课程3 什么是HBuilder和MUI 一.总结 一句话总结:DCloud(数字天堂)推出一款支持HTML5的Web开发IDE.最大的特点是快.MUI是高性能App的框架,也是目前最接近 ...
- 中英文对照 —— 标点符号(punctuation)
有限的几个: What Are the Fourteen Punctuation Marks in English Grammar? period:句号:comma:逗号:冒号:colon:分号:se ...
- redis 模糊删除实现
redis 没有直接提供模糊删除的实现,我们可以根据现有的指令进行组合实现: import java.util.Arrays; import java.util.Set; import javax.a ...
- Android Mvvm模式的理解
1. Mvvm是什么,Mvvm是怎么来的?Mvvm模式广泛应用在WPF项目开发中,使用此模式可以把UI和业务逻辑分离开,使UI设计人员和业务逻辑人员能够分工明确. Mvvm模式是根据MVP模式来的,可 ...
- jquery中empty()和remove()的区别
empty 顾名思义,清空方法,但是与删除又有点不一样,因为它只移除了 指定元素中的所有子节点. remove与empty一样,都是移除元素的方法,但是remove会将元素自身移除,同时也会移除元素内 ...
- JS版微信6.0分享接口用法分析
本文实例讲述了JS版微信6.0分享接口用法.分享给大家供大家参考,具体如下: 为了净化网络,整顿诱导分享及诱导关注行为,微信于2014年12月30日发布了<微信公众平台关于整顿诱导分享及诱导关注 ...
- C++胜者树
#include <iostream> #define MAX_VALUE 0x7fffffff using namespace std; //在这里我先反思一下.不知道怎么搞的,这个算法 ...
- spark源码解析之基本概念
从两方面来阐述spark的组件,一个是宏观上,一个是微观上. 1. spark组件 要分析spark的源码,首先要了解spark是如何工作的.spark的组件: 了解其工作过程先要了解基本概念 官方罗 ...
- 自定义npm包——typeScript版本
前言 这篇文章是在我之前的文章 [自定义npm包的创建.发布.更新和撤销] 的基础上做的扩展,主要是针对如何创建以及发布一个typeScript语言的npm包. 大纲 1.创建关于typeScript ...
- TableView相关属性
//是否要显示分隔线 tableView.separatorStyle = UITableViewCellSeparatorStyleNone; tableView.separatorStyle = ...