容器,云和代码:Yelp如何使用Mesos和Docker构建混合云?

jopen 8年前

【编者的话】为了解决Yelp的基础设施问题,Eaton带领团队对容器进行调研并寻求解决方法,最终决定使用Apache Mesos和Mesosphere。基于Mesosphere构建了PaasTA服务,为测试环境开发了Seagull平台。本文对Yelp公司采取容器 方案前的困境以及采取容器方案后的好处分别进行了说明。


2013年底,Yelp的运营总监Sam Eaton意识到公司基础设施存在问题。对开发和运维人员来说,在Yelp自己的数据中心和亚马逊云服务上扩展网站已经变得十分复杂并要消耗大量资源。

Eaton解释到:“现在的问题是我们如何在自己的数据中心和AWS云上统一管理部署服务,并且不增加开发人员负担”。

选择太多

讽刺的是,Yelp的问题与缺乏创新无关。Yelp已经为裸机部署开发了自己的系统,并且使用 开源的Asgard系统用于AWS部署。为了实现持续部署,每天都要对网站进行多次更新。

Yelp正饱受各种方案的煎熬而且不得不忍受每个方案的优缺点。为AWS构建新的虚拟机映像(即“黄金映像”)可能需要长达一个小时,即便这些镜 像可以快速启动。在裸机上启动业务,管理方便,不过扩展性是个大问题。Yelp的开发者尝试在本地部署服务和在云中也部署服务时,处理AWS实例和 Yelp硬件之间的差异对他们来说真是糟透了。

Eaton说:“他们不得不为裸机采取一种配置,为AWS采取完全不同的配置,开发人员的感觉真是糟透了!”。

除了服务部署复杂性,Yelp还存在测试问题。Eaton说开发人员每天都会发布很多版本,不过因为进行一次完整的测试需要90分钟,整个速度被 大幅耽搁。并行化的测试也存在问题,Eaton的研究小组发现想要不浪费资源,完成所有依赖关系分析并找到测试计划的最佳方案真是太难了。

他说:“对我们来说,这是一个‘装箱’问题,而且更多的虚拟机或硬件也无法解决”。
 容器,云和代码:Yelp如何使用Mesos和Docker构建混合云?

Docker来了

Eaton和他的团队为了解决云和本地不断增长的服务池问题考察了很多方案。他们曾经打算部署OpenStack也曾考虑Eucalyptus(一个创业公司,专注与AWS兼容性,后被惠普收购)的方案,就为了建立一个横跨云和本地的混合环境。

不过,Yelp的技术团队最终决定今后的方向是 Docker容器而不是虚拟机。Docker可以解决一些Yelp的服务部署问题,因为开发人员可以管理自己的容器,不用等到构建最终镜像就可以迅速处理依赖问题并打包。

Running millions of containers means Mesosphere and Mesos

Eaton和他的团队经过研究,认定 Apache Mesos的Mesosphere是满足Yelp业务扩展运行容器的最佳方案。Mesos在不停掉服务器相关组件的情况下就完成了Yelp的机器集群(不管虚拟还是物理)资源池聚合给Eaton留下了深刻印象。开发人员可以任意启动容器,再也不用担心服务器配置了。

除了Apache Mesos的基础功能,Eaton还选择对Mesosphere的所有功能进行测试,其中包括Marathon工具。Eaton喜欢Mesosphere 在 Marathon这个PAAS框架中提供的原生hooks,Yelp用他们来计划和编排计算作业。此外,Mesosphere对数据中心操作系统(DCOS)的理念也与Yelp的目标一致,Yelp的愿景就是在本地和云中创建一个单一的开发环境,工具链和DevOps过程。

(* Mesophere仍然提供开源源码下载,但现在还提供作为商业软件产品的 数据中心操作系统(DCOS)。DCOS产品包括许多重要组件和附加功能,将大大改善部署和管理分布式服务的体验。)

Yelp能够在三个月内打造一个Mesosphere集群,并完成生产环境要求。
 容器,云和代码:Yelp如何使用Mesos和Docker构建混合云?

PaaSTA服务

在Mesosphere上,Eaton的团队构建了一个以Docker为基础的微服务架构,它被称为PaaSTA,使得容器级的作业在任意计算平台上都可以运行。

Eaton解释道:
我们非常喜欢Docker,在整个过程中带给开发人员一个一致的环境。Marathon和PaaSTA的工具,让他们有一个更好 的方式来安排适当的容器运行他们的服务,并向开发人员屏蔽底层基础设施。他们不必关心自己的业务是运行在自己的数据中心或者AWS还是其他一些云服务提供 商。 如果根据PaaSTA平台规则编写服务并正确的配置Docker容器,那么PaaSTA会通过资源发现并启动容器完成剩下所有服务部署工作。
整个Yelp的工程团队都感受到了PaaSTA和Mesos的好处。基础架构服务技术主管John Billings是这样说的:
我们曾经花了大量时间手动分配服务到独立机器。当推出新服务时就遇到了瓶颈。如果有一台机器出现故障,那么我们不得不单独联系所 有受影响的用户,并要求他们把服务迁移到新的硬件上。当业务量增加的时候我们必须保证服务正常。当生产服务已经发展到数以万计时,这已经成为了一个不可能 的任务。
“PaaSTA通过允许内部数据库和AWS上的硬件自动配置和服务迁移,将我们从这些繁琐耗时的任务中解放出来。开发人员和运维人员完全爱上了这种技术。”

视频

与Seagull一同起飞

除了提供的核心PaaSTA平台服务,Yelp也用Mesospher来改进测试基础设施,开发了全新的测试平台Seagull。

通过使用Mesos和一个自定义调度,Yelp为单元测试建立一个更高效的并行和快速系统。Yelp公司目前每天运行约1700万独立测试,有的 直接在机器上进行,有的在容器上,这些全部由Mesos管理。Eaton说,Yelp已经每天启动100万个容器,随着公司继续将测试转移到容器中这个数 字还会继续增加。

Mesosphere也给了Yelp的一个意想不到的好处:提高资源利用率意味着Eaton的团队可以更积极的应对AWS spot market计算能力来节省资金。

他解释说:“随着测试数量增加,我们购买的用于测试的AWS实例已远超保留的实例数量,如果我们使用动态方式购买实例,这些实例在测试过程中可能就释放了。Mesos能够通过重新安排测试到新的实例且无需中断作业,这样就能把这类实例保留下来。”

Eaton说:“Mesosphere和Marathon的结合,为我们的开发人员提供了一个更有弹性计算能力并可以快速部署的环境,他们可以将更多精力放在编程上而不用太关注不同平台的影响。对开发人员来说Mesosphere很好,对Yelp而言这就够了。”

原文链接:CONTAINERS, CLOUDS AND CODE: HOW YELP BUILT A HYBRID CLOUD USING MESOS AND DOCKER (翻译:朱高校)

来自:http://dockone.io/article/880