Yelp是如何利用Mesos和Docker搭建混合云的?


【编者的话】为了让开发人员能够在数据中心和AWS上统一管理部署服务,且不增加工作量,Yelp围绕Docker容器寻找解决办法,Eaton决定选用Apache Mesos和Mesosphere,基于Mesosphere构建了PaaSTA,开发了新的测试平台Seagull。Mesosphere和Marathon的组合让开发人员从不同平台的处理中解脱,将精力放在了代码上。过程的艰辛与最终选择的好处都在文中做了说明。

2013年底,Yelp 运营总监Sam Eaton 意识到公司存在一个基础架构问题。运维人员和开发人员在自己的数据中心和AWS云上做站扩展已经变得复杂并且需要大量资源。

“问题是我们如何能够让开发人员在数据中心和AWS上统一管理部署服务,并且不带来过多复杂的工作。”Eaton 解释到。

太多的选择

讽刺的是,Yelp做了很多改进和创新,但问题依然没有解决。为了在裸机上部署服务,Yelp开发了自己的系统,用了开源Asgard系统(最初在Netflix上开发的)部署AWS。而要想持续部署,必须每天更新好几次网络服务才行。

Yelp尝试了太多的方案,而且考虑了每种方案的优缺点。建一个新的虚拟机镜像,即所谓的“黄金镜像”,对于AWS而言需要花1个小时,尽管建立的镜像启动会非常快。在裸机上启动服务可以获得更多权限,但是做扩展却很麻烦。Yelp的开发者试着在本地部署部分服务,在云端的一些服务需要很长一段时间处理AWS实例和Yelp硬件之间的区别。

“他们不得不用一种方式去配置裸机上的服务,并使用另一种完全不同的机制去配置AWS。这对于开发者来说太糟了”,Eaton说。

除了部署服务的复杂性,Yelp还有个测试方面的问题。Eaton说开发者一天要发布多个版本的新代码,但是总被测试的速度拖后腿,因为,跑完所有要求的测试要花上90分钟。均衡测试的运行是有问题的,Eaton的团队发现,至少在不浪费资源的情况下,去统计所有的依赖关系然后再找出一个最佳方法去规划所有的测试并不容易。

他说:“这是一个‘装箱’问题,用更多的VMs和更多硬件来跑也不能很好地解决这个问题”。
learn-utilization-datacenter-dcos-e1433812992866.jpg

Docker来了

Eaton和他的团队考虑大量的用于解决云和本地日益增长的池的这个难题的方案。他们考虑过部署OpenStack。他们也考虑过用Eucalptus(这是一家创业公司,起初是为了满足惠普的需求,专注于AWS的兼容)的软件,旨在建立一个跨应急服务器与云的混合环境。

但是,Yelp的技术团队最终决定未来将围绕Docker容器,而不是虚拟机。Docker可以解决Yelp的一些部署问题,因为它让开发者可以管理他们自己的容器,迅速处理打包和依赖问题,而且不需要去等生成“黄金镜像”。

运行百万个容器那就意味着Mesosphere和Mesos

Eaton和他的团队研究并决定用Apache Mesos的Mesosphere革新作为最佳的运行容器的方案来满足Yelp的规模。Eaton对Mesos如何将Yelp的机器集群——虚拟和物理的——变成聚合资源池,而且没有关掉周边服务器的组成印象非常深刻。开发者可以随意启动容器,并且不考虑任何服务器的配置。

Eaton不仅仅坚持基础版的Apache Mesos,还选择测试Mesosphere的打包版本*,包含了诸如Marathon的工具。Eaton喜欢Mesosphere在Marathon的PAAS框架中提供原生的hooks, Yelp使用这些hooks计划和安排计算任务。此外,Mesosphere对数据中心操作系统(DCOS)的进化概念与Yelp的目标一致,Yelp的目标是建立一个单一开发环境、工具链和跨本地、云端服务的开发运维过程组。

(Mesophere 依旧提供开源下载,但下载还提供它的数据中心操作系统(DCOS)作为商业软件产品。DCOS预先打包许多重要组件,包括附加功能,极大地简化了部署和管理分布式服务的经验。)

Yelp可以在三个月内构建一个功能化Mesosphere集群,并使其达到预准备工作。
architecture-1.png

服务 PaaSTA

在Mesosphere之上,Eaton的团队构建了一个基于Docker的微服务架构,被称为PaaSTA,允许容器级作业跑在任意的计算平台上。

Eaton解释说:

我们非常喜欢Docker在整个堆栈能给开发者一个相同的环境。Marathon和在PaaSTA上的工具给他们提供了一个更好的方法,可以安排适当数量的容器来运行他们的服务,并且开发者可以隐藏底层基础设施。他们不需要担心他们的服务是否运行在数据中心、AWS或其他云提供商上。如果他们根据PaaSTA平台合同写服务,用适当的方式配置他们的Docker容器,此时PaaSTA通过提供资源发现和启动容器,负责其他工作的服务部署。
整个Yelp工程团队感受到PaaSTA和Mesos的好处。服务基础设施技术主管约翰•比林斯解释:

我们曾经花大量的时间手工分配各个机器上的服务。当推出新服务时会产生一个瓶颈。如果有一台机器故障,我们不得不单独联系所有受影响服务的所有者,并要求他们将他们的服务移动到新的硬件。我们还得在通讯量增加的同时必须保持机器之间的服务。我们增长了数以万计的生产服务,这成为一个不可能的情况。
“PaaSTA允许在内部和AWS硬件上进行自动配置和迁移服务,这就让我们从这些耗时的任务中解脱出来。开发人员和操作着完全爱上了这项技术。”

视频

与Seagull同行

除了提供的核心PaaSTA--平台即服务系统,Yelp也使用Mesosphere扩充了其测试基础设施,开发一个新的测试平台叫做Seagull。

通过使用Mesos可和一个自定义的调度器,Yelp能够建立一个更高效的并行系统和加速单元测试。公司现在每天运行着大约1700万独立测试,一些直接在机器上测试,一些在容器里测试,这些全部由Mesos管理。伊顿说,Yelp每天已经启动100万个Docker容器,随着公司将更多的测试移到容器里,这个数字也随之增加。

Mesosphere也给了Yelp一个意想不到的好处:资源利用率的提高意味着伊顿的团队可以通过更灵活地部署AWS的spot市场容量来省钱。

“随着测试数量的增加,我们出价购买用于测试的AWS实例将超过我们预定的量,”他解释说,“如果我们固定购买实例的量, 那些实例可能会在测试中途消失。Mesos以重新安排测试到新的实例上并且不停止测试的方式,允许这类动态购买存留下来。“

伊顿表示,Mesosphere和Marathon的组合给了我们的开发人员一个更具弹性的计算能力,让他们从根本上加快部署,他们可以花更少的时间处理不同的平台,把更多的精力放在代码。Mesosphere对于开发人员和Yelp来说非常好。

原文链接:CONTAINERS, CLOUDS AND CODE: HOW YELP BUILT A HYBRID CLOUD USING MESOS AND DOCKER(翻译:李渊文 校对:魏小红)

1 个评论

这个好玩,Mesos 是大方向啊。

要回复文章请先登录注册