Yelp是如何利用Mesos和Docker建立混合云的
还是在2013年底,Yelp 运营总监Sam Eaton 意识到公司存在一个基础架构问题。运维人员和开发人员在自己的数据中心和AWS云上做站扩展已经变得复杂和资源密集。
“问题是我们如何能够让开发人员在没有过多复杂的工作情况下在数据中心和AWS上统一管理部署服务。”Eaton 解释到。
太多的选择
Yelp经历了太多的方案,并且考虑了每种可能的优缺点。建一个新的虚拟机镜像,所谓的“黄金镜像”,对于AWS而言需要花 1个小时,尽管建立的镜像启动会非常快。在裸机上启服务获得权限更多但是扩展很麻烦。Yelp的开发者试着部署部分服务在本地部分在云上需要很长一段时间考虑AWS实例和Yelp硬件之间的区别。
“他们不得不用一种方式去配置裸机上的服务,并使用另一种完全不同的机制去配置AWS。这对于开发者来说太糟了“,Eaton说。
服务除了部署负责,Yelp还有个测试的问题。Eaton说开发者一天要发布多个版本的新代码,但是总被测试的速度拖后腿,因为,跑完所有要求的测试要花上90分钟。均衡测试的运行是有问题的,Eaton的团队发现,至少在不浪费资源的情况下,去统计所有的依赖关系然后再找出一个最佳方法去规划所有的测试是并不容易的。
他说:”这是一个“装箱”问题,用更多的VMs和更多硬件来跑也不能很好地解决这个问题“。
Docker来了
Eaton和他的团队考虑大量的用于解决云和本地日益增长的池的这个难题的方案。他们考虑过部署OpenStack。他们也考虑过用Eucalptus的软件--这是一家初创企业,因为惠普的需求,专注于AWS的兼容--旨在建立一个跨应急服务器与云的混合环境。
但是,Yelp的技术团队最终决定未来将围绕Docker容器,而不是虚拟机。Docker可以解决Yelp的一些部署问题因为它提供开发者可以管理他们自己的容器的能力,并且可以不用等”黄金镜像“生成就可以迅速决定打包和依赖的问题。
运行百万个容器意味着Mesosphere和Mesos
Eaton和他的团队研究并决定用Mesosphere的进化的Apache Mesos 作为最佳的运行容器的方案来满足Yelp要求的规模。Eaton,对Mesos如何将Yelp的机器集群--虚拟和物理的--变成聚合资源池,并没有关掉周边的服务器组成,留下了深刻的印象。开发者可以随意启动容器,不考虑任何服务器的配置。
不仅仅坚持基础版的Apache Mesos,Eaton选择测试Mesosphere的打包版本*,包含了诸如Marathon的工具。Eaton喜欢Mesosphere在 Marathon 的PAAS框架中提供原生的hooks, Yelp使用这些hooks计划和安排计算任务。此外,Mesosphere对数据中心操作系统(DCOS)的进化概念,也与Yelp的目标--建立一个单一开发环境,工具链,和跨本地和云端服务的开发运维过程组,所一致。
(Mesophere 依旧提供开源下载,但下载还提供它的数据中心操作系统(DCOS)作为商业软件产品。DCOS预先打包许多重要组件,包括附加功能,极大地简化了部署和管理分布式服务的经验。)
Yelp可以在三个月内构建一个功能化Mesosphere集群,并使其达到预准备工作。
服务 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市场容量来省钱。