大牛点评OpenStack和Mesos:谁才是私有云的未来?
本文是Quora上的一个问题,提问者对于私有云未来的发展趋势感到疑惑,Mesos和OpenStack的关系是怎样的,它们之间是否可以相互替代?来自Mesosphere以及Rackspace的专家们从OpenStack与Mesos的功能和产品定位上对这个问题进行了解读,它们之间的关系并非互相替代,而是各有侧重,相辅相成,这取决于用户的实际需求。希望本文内容可以帮助读者对私有云领域的开源产品和相关概念有更好的了解。
Quora上的问题
私有云的未来的发展趋势是什么,是Mesos?还是OpenStack?
在私有云方面,Mesos和Docker二者似乎是一个完美的结,Google一直致力于这方面的研究,我很好奇私有云的未来会是怎样的,大家怎样认为的?
回答者:Lukas Löschea(在Mesosphere工作,之前在工作中曾使用OpenStack)
Mesosphere和Openstack解决的是完全不同的问题。实际上,它们是可以在一起协同工作的。用户完全可以在OpenStack的集群上面运行Mesos,这样做可以带来很多额外的好处,比如提高系统的利用率和容错性。
我发现OpenStack的初始配置工作比Mesos要困难许多,但是对于OpenStack系统的整体理解要容易许多,因为OpenStack集群的运行方式基本上与我们过去几年运行系统的方式类似。OpenStack的基本理念是提供虚拟的服务器,为了实现这一目的,OpenStack也提供很好的硬件层抽象。但是虚拟机构成的集群可能会让你感到难以运维,对于每个虚拟机的维护也并非容易,用户遇到的问题基本上和以前在直接维护物理机集群基本相似。你仍然需要一个操作系统,一些配置和管理的工具,就像是Puppet、Chef、Salt、Ansible等等,并且需要采用独立的主机来运行这些工具。容器化的思想是在这之后才有的技术。虽然在OpenStack上已经有了Docker Nova的驱动,但是在我看来,大多数人使用OpenStack是为了创建虚拟机而并非容器。他们使用OpenStack的方式更类似于对AWS的使用方式。
而现实情况是,用户并不需要那么多的服务器,用户只是希望能够将它们的服务运行起来,使其可以发挥作用。从这个角度来看,OpenStack能做的事情并不多。提供服务器是一种终极解决方案,最终来看,所有的服务都要运行在服务器上。但是如果我有其他选择,我宁愿采用这样的方式来运行我地服务:服务可以无限扩展(我不用在乎它们是怎样运行以及运行在哪),当服务失败的时候能够被自动检测并且可以自动修复,我也不需要在凌晨3点的时候被叫醒,对服务进行维护。这就是Mesos所能完成的事情。
Mesos的用户可以按照新的方式调整他们的工作模式,这样可以大大简化工作流程。比如,如果用户使用Marathon来长时间地运行服务,就可以这样来设置工作流程:开发者可以将代码提交到staging分支中,CI(Continuous integration)服务器(运行在Mesos集群当中)会构建一个docker image并且升级Marathon REST API来通过docker image进行部署。如果在staging阶段,服务运行的都很正常,开发者就会把他新提交的代码合并到master/production分支中,从而完成了产品系统的升级和部署。
最终的效果应该是这样的:对用户而言,所谓的部署过程仅仅意味着开发者将他的代码提交到对应的分支。类似于滚动部署(rolling deployments),服务之间的依赖,健康检查以及自动重启这些功能都可以由Mesos/Marathon来提供。
这是一种完全不同的工作方式,因为在这种模式下,运维人员不再需要去打包应用部署代码,或者启动特定的监控服务。
从复杂性的角度来看,我认为,如果用户想基于OpenStack来运行私有云平台,至少需要了解 Heat、Nova、Glance、Keystone、Neutron以及Cinder这些组件。我过去曾经做过OpenStack部署的工作,我发现由于OpenStack本身的设计原因,在维护过程中会出现来一些很复杂的问题。因为Openstack本身是一个企业级的产品,是并非社区产品,你会发现,OpenStack平台的安装和运维工作至少需要来自不同部门的几个人一起负责。因此,如果你在一个大的公司或组织里面工作,OpenStack平台的维护工作可能恰好可以按照公司本身的组织结构来进行分工(系统支持、服务器硬件、基础设施及网络、安全等等)
在网上可以找到相关的教程,基本上可以帮助你在半个小时左右就设置好可以用于生产环境的Mesos集群。
从个人的观点来看,Mesos的工作方式可能是未来我们运行数据中心的方式。所谓数据中心就是说我的所有的硬件资源都可以协同工作就像一整台电脑一样,而并非是以单个主机的方式进行工作,并且用户不需要通过手工决定服务要在哪里运行。
回答者:Florian Leibert
对于私有云平台的构建,Mesos+Marathon+Docker是一个很好的解决方案。Mesos是一个被实际验证过的可以提供伸缩性服务的工具(Mesos被Twitter、Airbnb、Netflix、ebay、PayPal等等公司采纳)。Marathon是一个集群范围的初始化和控制系统,它可以帮助用户在cgroup和Docker容器中运行Linux服务。许多公司都看好这个技术上,所有的关键组件都是开源的,这些技术也构成了我的公司的DCOS(Mesosphere Datacenter Operating System)商业产品的核心组成部分。
Mesos以及Mesophere系列技术可以提供一个类似的云环境,这个环境中可以运行已有的Linux任务,它也可以提供一个本地的环境用于构建新的分布式系统。
Mesos 是一个分布式的系统内核,针对数据中心直接提供了编程所需的API。它将底层的硬件(裸机或者虚拟机)进行抽象,将这些硬件以一致的资源的形式提供给用户。它包含着用于构建分布式系统的基本功能(例如,Mesos支持Spark App、还有Chronos等等)例如消息传递,任务执行等等。这样,用户就可以利用Mesos来构建完整的服务。Apache Spark就是其中的一个例子,Spark框架在Mesos的基础上进行构建,这很大程度上提升了开发工作的效率。比如Spark的开发者不用担心网络相关的问题,不用考虑如何将任务分布在不同的结点上来执行,这些都是Mesos所具备的基础核心功能。
可以参考Mesos在Apache.org上的页面。Mesosphere及其合作伙伴正在对这些服务进行认证,并且正在将这些服务打包进Mesosphere DCOS Datacenter Service中,这样这些服务就可以通过一条指令直接被安装完成。
Mesos的另一个很好的特性就是它可以运行在已有的OpenStack集群上,也可以直接在裸机上运行,只需要在每个节点上运行一个小的Linux进程即可。
我认为Mesos是云计算的未来,因为它提供了良好的服务伸缩性,有利于数据中心自动化运维,可以进行自我诊断并且提供丰富的本地的服务生态系统(rich native application ecosystem),与此同时,还可以不用对代码进行修改就可以让已有服务正常运行。
回答者:Nati Shalom(构建了第一个Java PaaS解决方案, 与Amazon、RackSpace、Azure、VMware、Xen、JClouds专家一起工作,设计了一款在云端提供自动化服务和编排服务的产品。)
在IT行业,每隔一段时间,就会有新的技术出现,代替原有的“新的技术”,Mesos的案例似乎很符合这个情况。
事实上,虽然Mesos很成功,但并不能使其成为一个取代已有基础云设施的通用的解决方案。在之前的一篇文章中:如果我使用Docker我还需要 OpenStack吗?,我就指出,在特定的领域内,OpenStack与Docker一样流行,因此Docker暂时还无法取代OpenStack。
我的观点是,如果想回答这个问题,我们需要回顾一下最初的时候我们希望从类似于OpenStack一样的云基础设施中得到什么。并且对比一下。Mesos是否能提供覆盖全部这些功能的替代方案。
像OpenStack一样的云环境,除了可以主动获取资源,分配工作负载之外,还可以针对各种各样的计算、存储以及网络等核心功能提供基于多租户的资源管理。
随着许多主要的云服务提供商不断投入到公有云基础设施的研发中,OpenStack也逐渐发展成一个生态系统。
对于跨主机分配工作负载,Mesos也做得很好。但是我觉得不应该把它看做是OpenStack云平台的替代方案。如果想要替代OpenStack,就需要提供与OpenStack同样级别的安全、存储、网络以及多租户的服务。我也不认为Mesos需要在所有方面做得都要比OpenStack更好。在我看来,Mesos至多可以和OpenStack运行的一样好,而并非替代OpenStack。
回答者:Dale Bracey(Rackspace私有云OpenStack产品工程师)
虽然我根本不熟悉Mesos,但是我大致了解,这是另外一个可以共享主机内核的容器化服务。
我尝试在Lukas Lösche的观点上再进行一些补充。你完全可以将之前回答中所提到的内容结合起来为你服务。OpenStack可以用来提供伸缩性,并且可以更方便地管理你的开发工具、网站、服务以及服务器。即使是直接对裸机的管理,OpenStack也是可以完成的(Ironic-OpenStack)
OpenStack整体的部署维护比较困难,虽然文档内容非常详细,但是仍然缺少细节性的指导,比如告诉用户从开始到最后的整个的步骤应该怎样完成。毕竟OpenStack是一个很大的项目,这种复杂性也是正常的。
OpenStack试图成为一个可以管理多种Hypervisor、虚拟机以及存储服务的编排层,但是目前仍然缺乏足够的能力。之前提到了OpenStack-Docker Nova驱动,这个项目将Docker安装在计算节点上,将容器按照虚拟机的方式提交给Nova/Glance,但实际上,容器并不虚拟机,这样用户不仅可以利用容器技术本身的优势,还可以利用OpenStack提供的控制管理功能。此外还有一个CoreOS-OpenStack的项目,这个项目同样也很流行,这两个项目都有类似的特性。
当然,用户仍然需要使用一些配置系统来帮助你管理系统,除非想让事情变得更复杂。我们曾经使用Chef,之后使用Ansible。令人难过得是,我刚刚才知道,Ansible的CTO Michael Dehaan今天离开了Ansible公司。我不知道这个公司今后将会怎样发展,当然这是题外话。
如果你仅仅希望自己的系统能够运行,而不是去关心虚拟机和服务器,OpenStack的开箱即用并不能为你提供完全自动化的环境,但是你可以利用些现成的工具来实现这一目的。这些工具也是完全开放的,你可以对它们定制开发并且能按照你希望的方式来工作。你可以将Heat-OpenStack、Ceilometer-OpenStack、以及各种DevOps工具结合起来为你提供自动化服务。
最后为新产品做一个广告:Rackspace也承认OpenStack的部署工作确实很困难,我们一直致力于帮助客户简化部署的难度,我们在github上提供用于部署私有云的OpenStack结点,可以让用户免费使用(在stackgorge中有一个社区项目stackforge/os-ansible-deployment)我们也提供了其他的私有云的解决方案。