文中内容来源于stackoverflow上的一个问题 ,提问者想知道Mesos在实际的使用中都有哪些使用场景,来自Twitter的工程师从容器编排、资源利用率、优先级和资源抢占、以及服务运行等几个角度,对问题进行了回答。
我尝试探究用户使用Mesos的原因究竟有哪些,以下是暂时列出的几个要点,不知道还有没有其他的例子?
1)让用户把所有的服务都运行在同一个集群中而不是运行在专用的集群中(比如通过终端应用的集群+DevOps的方式,例如像Jekins)
2) 在同一个集群中运行不同类型的成熟的服务(dev,test,production)不知道这样是否可行?Kubernetes中已经可以通过lables标签来提供类似的功能。
3) Mesos 通过提供简化部署、统一标准的API、资源装箱等一系列的操作,简化了传统的分布式服务(比如像Hadoop)的使用流程。
回答(Dave Lester):
我目前在Twitter工作,我同时参与到了Apache Mesos以及Autora项目的相关工作中,下面是我对Mesos使用场景的理解。
Mesos的实际使用场景可能会受到以下几个因素的影响:集群规模(数十台服务器到成千上万台)、可使用的硬件(专用的/静态的,或者是云端的/可扩展的)、以及工作量(提供基本的服务或是批量处理的服务,或两种服务同时提供)
上面所列出的几点都很有道理,这里我再加上几种新的使用案例。
容器编排
随着容器环境(比如Docker)变得越来越流行,许多潜在的用户正在寻找一种 Mesos+调度器的方案来管理镜像在创建之后的编排工作。Mesos到目前为止已经相当成熟,已经被证明可以规模化地提供服务,我认为Mesos的解决方案比某些临时出现的方案要好很多。
提升资源利用率
对于使用超过50台服务器的公司而言,一个通常的使用Mesos的动机就是提升资源利用率,并且减少运维成本。目前已经有许多这样的公司,比如各种公有云和私有云服务的提供商。在Ebay的案例中,它们曾经在Mesos上运行Jekins这样可以减少虚拟机的使用。Mesosphere也发布了相关的文章对于 HubSpot (运行在AWS上)的案例研究,文章中介绍了HubSpot是如何使用几十台大型的服务器来替代了几百台小型的服务器,使得硬件的利用率更高。
优先级和资源抢占
在Twitter,我们通过一个调度器: Apache Aurora 来运行Mesos服务。在这个使用场景中,我们有一种方式可以提高资源的利用率:在同一个集群上运行不同的成熟的服务。Aurora有一个环境变量的概念,这可以让用户可以运行不同环境类型的服务,比如production、development、或者是test环境。此外,Aurora还有一种内建的优先级抢占机制,这可以允许它来优先考虑production环境下的任务,当这些资源需要被production环境中的任务使用的时候,系统可以及时结束非production的任务,在每一种环境中,都有类似的优先级系统。
长期的,功能性相关的资源抢占功能也将会存在于Mesos本身的内核中 -- 这是一个杀手级的特性,这个功能可以增强资源利用率,并且在不同的环境下(dev、test、prod)运行不同的成熟的服务。如果你对相关的话题感兴趣,可以参考MESOS-155以及MESOS-1474。
同时运行批处理服务和普通服务
可以在一个共享的Mesos集群中同时运行批处理任务以及其他的普通服务,这将对资源利用率的提升起到关键作用。让我们回顾一下Myriad项目,这个项目希望把Mesos以及YARN的工作任务放在同一个集群中。在这个时候,用户并不在意同时进行批量服务和普通服务的大规模的部署工作,在一个共享的集群中运行多个框架也将变得更加简单,这也是社区发展的一个方向。
本文作者:王哲
来源:51CTO