Docker 在 Uber 服务部署中的应用

本文讲的是Docker 在 Uber 服务部署中的应用,【编者的话】快速创新的迫切要求,使得 Uber 开始在服务部署中应用 Docker 。这篇文章讲述了部署方式的转变过程,强调在全面容器化之前,必须做充足的准备。

无论你对 Uber 的看法如何, Uber 无疑是创新的同义词,因为它在颠覆交通行业的同时引领了共享经济。像Uber 这样的最快创新者,就像 Microsoft, Apple 和 Amazon 公司一样,都面临一个问题:一旦你开始创新并且取得成功,你不得不一直保持这样快的创新速度,这就导致了下面的后果:有时你看不到更远大的前景,有时会被途中的障碍绊倒。

今年初, Uber 发现自己就处于这样的境地。那时候,软件工程师 Casper S. Jensen 加入了 Uber 公司的计算机平台团队。

在 Dockercon EU 的第一天, Jensen 说 Uber 应用有非常易用的用户界面,看起来就是一个简单的应用;“实际上 Uber 是一个非常非常复杂的产品”,“应用只是冰山之一角”,底层包含了无数的功能特性。要知道,目前 Uber 面对的是 69 个国家的不同市场和法律,每天安排百万次行程,有4,000 员工使用 Uber 平台。

以前的软件开发模式

那时候, Jensen 和团队中的其他四个人刚刚加入 Uber 不久。工作简直是“一团糟”,他们正在寻求一种解决方案。

这是去年冬天他们的开发流程:

  1. 编写服务 RFC(Request for Commments,请求评论)—— Uber 是一家极其依赖反馈的公司,在启动一项新服务时,他们首先描述该服务的架构和理念,发布到邮件列表中。
  2. 收集反馈——例如,“你们知道其他人也在做类似的事情吗?”——集中精力,力争在早期就找出错误。
  3. 手工列出该服务的所有依赖。
  4. 开始开发服务。
  5. 等待基础设施团队编写服务的依赖。
  6. 等待 IT 确定服务的位置。
  7. 等待基础设施团队提供服务。
  8. 部署到开发服务器,测试。
  9. 部署到生产环境的服务器。
  10. 监控迭代。

他说,步骤 5-7 “是特别特别令人痛苦的部分,很容易耗费数日乃至数周的时间。”原因何在?“到不是说这些步骤特别难,大部分环节我们都有相应的脚本,”只包括大约十行的集成代码。

“简单是简单,但是这些脚本的扩展性差,因为公司里只有少数人真正地知道如何扩展且不会破坏已有的部署”, Jensen 说。再加上一些小错误——例如,本来应该是连接线,结果写成了斜线——最后导致所有的服务都慢得要命。

2015 年2 月,在一封内部邮件中,他们设置了下列目标:

Jensen 说他们想要做到:

  • 允许服务的拥有者有专用的服务器切片,他们自行决定安装什么,我们不干涉,但是不能影响其它的服务。
  • 并且,他们的安装过程也不用我们参与。

必须得有所改变了,还不能破坏现有的服务。

Uber 需要克服的自身问题

如果一家公司有如此快速增长的基础设施,自然会有一些限定,如 Jensen 所讲,“无论如何,我们必须保证基础设施快速增长,避免拖慢开发团队的高速开发流程”。

这不仅是因为 Uber 要求 7×24 的可用性以及支持无数的本地化特性,更重要的是,“没有任何一个人能够看到 Uber 的所有服务,每个人只能看到自己从事的部分。”他列举了几个特性,像UberPOOLUberKITTENsUberIceCream 和 UberEATS,每一个都在“增加新功能,好像世界末日到了一样”。 Uber 的耀眼成功,是建立在全方位超快发展的基础之上的,包括数据中心、服务器和基础设施。需要找到保持增长的解决方案。

“我们希望有非常方便的流程和基础设施,这样开发者就能非常快地增加新功能。其中最重要的一个部分是创建新服务的流程,” Jensen 说,“我们意识到这不就是 要用 Docker 吗。”理由很简单,“很容易向别人解释 Docker 的作用,人们早就了解过它,理解基本的概念”。每个人都有自己喜欢使用的容器,因此开发团队很容易接受 Docker 。

容器带来的痛苦

他们心想,“我们都能写代码,这还不是小菜一叠?两天就能干完。”实际上不是那么回事。他们 2月份作出决定,直到仲夏,才真正用上 Docker 。

Jensen 解释说,用了 Docker ,“一切都有所改变,思路也必须随之转换。”

采用 Docker 的最大障碍是 Uber 内部使用的集群管理系统 uDeploy 。它要能在支持回滚的前提下做持续的滚动升级。它包含很多报错的触发器,像健康检查或者发生故障时的图形化显示。它还支持有错就回滚的负载测试和集成测试。 uDeploy 包括:

  • 每周 4,000 次升级
  • 每周 3,000 次构建
  • 每周 300 次回滚
  • 管理系统包含的 600 多个服务

做不到完全不使用 uDeploy ,所以 Uber 团队决定同时部署旧有的服务和 Docker 服务。

“我为此花了很多时间,检查每一个功能,添加支持以便能够把它封装为 Docker 服务,” Jensen 说,“ uDeploy 支持显示标准输出和标准错误,我们必须在 Docker 中也实现这一点。”

他们在开始使用 Docker 时,没有那么多规划。后来 Jensen 意识到一开始给予开发者的自由度太大。“不应该这样,”他打了个响指,说:“你真的要考虑到基础设施的方方面面”。

Jensen 说,如果你提前做好规划,真正审视基础设施以及容器在其中的一小部分作用,结果就会好很多。

Docker 正在驱动一个全新的可扩展的 Uber

现在 Uber 大约有 1/3 服务是 Docker 化的,希望不久实现百分之百的容器化。为什么?虽然转换的过程很痛苦,但是最终的结果符合期望,去掉了持续部署中的三个巨大的痛点。有了 Docker ,他们无需再:

  • 等待基础设施团队编写服务的依赖;
  • 等待 IT 确定服务的位置;
  • 等待基础设施团队提供服务。

现在,他们不再手工编写或者复制以前项目的依赖定义,而是使用包含标准服务的配置和构建文件的工具,从而把服务提供时间从以前的几小时、几天缩短到现在的大约 10 分钟。

不仅如此, Uber 认识到, Docker 消除了团队之间的依赖,提供了更高的自由,因为不再绑定在特定的框架和版本。框架和服务的拥有者现在可以尝试新技术,管理自有的环境。

原文链接:How Docker Turbocharged Uber’s Deployments(翻译:柳泉波)

原文发布时间为:2015-11-30

本文作者:bnuhero

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:Docker 在 Uber 服务部署中的应用

时间: 2024-08-30 08:31:04

Docker 在 Uber 服务部署中的应用的相关文章

Docker集群轻松部署Apache Storm

Apache Storm是一个非常常用的实时流计算框架.最近有客户来咨询如何在Docker中运行Apache Storm的问题.我之前读过一篇文章介绍Apache Storm在Docker环境的部署,The Joy Of Deploying Apache Storm On Docker Swarm.文章写的很好,但是整个过程需要从手工构建Docker集群环境开始,再一步步把Storm配置起来,虽然作者提到整个过程是"a real joy",估计绝大多数用户依然会望而生畏. 利用Dock

Docker在英雄联盟游戏中的实践探索(一)

本文讲的是Docker在英雄联盟游戏中的实践探索(一),[编者的话]Riot将Docker和Jenkins相结合,以此来构建流水线(Pipeline).这篇博客是Riot实践Docker的系列博客的第一篇,主要介绍了他们的目标和理念:后续博客则以教程的形式一步一步地记录Riot的Docker实践. 容器技术已经风靡全球,我们欢迎容器化领域的新霸主们. 然而,他们也给Riot的流水线工程团队(Pipeline Engineering team)的同事们带来了新挑战.我叫Maxfield Stewa

再谈Docker,微服务的场景化应用

看过<超能陆战队>的朋友可能仍然对于电影中的男主角介绍和演示自己发明的微型机器人的场景记忆犹新. "它"看起来只是一跟带有磁性的小小的金属部件.但是它是一个独立的个体,自己能够独立的大脑,同时,和同伴之间有相互的接口你行链接.能够通讯.能够随意的组合成任意功能的物体. 通过类比,我们很容易由硬件领域想到软件领域.譬如软件系统的架构,一直都是伴随着几种主流的模式,集中式,分布式以及最近才开始流行起来的"微服务". 滨田宏发明的微型机器人,其实和微服务的思想

【深度】阿里Docker服务开发中的5大挑战与经验沉淀

核心专家的深度分享! 阿里云资深技术专家 易立(微垣) 易立,阿里资深专家,目前负责阿里云容器技术相关的产品的研发工作.易立毕业于北京大学,获得学士和硕士学位:加入阿里之前,曾在IBM中国开发中心工作14年,担任资深技术专员,作为主要架构师负责IBM企业平台云产品线PureApplication System的研发工作:还作为架构师.主要开发人员负责和参与了一系列IBM在Web 2.0,SOA中间件的研发和创新,也曾为全球客户提供SOA技术咨询和项目实施. 以下是采访实录: 请介绍下阿里云容器服

利用Docker和阿里云容器服务部署高可用Ghost博客集群

简介 Ghost是一个流行的开源博客平台(Open source blogging platform),基于 Node.js 构建,博客内容默认采用 Markdown 语法书写,给用户提供一种更加纯粹的内容写作与发布平台. Ghost的部署和运维需要一定的Web开发基础,利用Docker技术可以大大简化Ghost的部署和更新.Docker Hub上面也提供了Ghost官方镜像 使用Docker镜像,不懂得Node.Js的同学也可以分分钟在本地或阿里云容器服务上搭建起一个单节点的Ghost博客,但

传Facebook考虑在Messenger中融入Uber服务

摘要: Facebook 和Uber 进行了非常早期的合作洽谈.就把Uber 打车服务直接整合进Facebook Messenger 的可能性,Mark Zuckerberg 与Uber CEO Travis Kalanick 有过直接交流.不过,Re/code 一个线人称,这样的安排 Facebook 和Uber 进行了非常早期的合作洽谈.就把Uber 打车服务直接整合进Facebook Messenger 的可能性,Mark Zuckerberg 与Uber CEO Travis Kalan

Docker网络和服务发现

本文讲的是Docker网络和服务发现[编者的话] 本文是<Docker网络和服务发现>一书的全文,作者是Michael Hausenblas.本文介绍了Docker世界中的网络和服务发现的工作原理,并提供了一系列解决方案. 前言 当你开始使用Docker构建应用的时候,对于Docker的能力和它带来的机会,你会感到很兴奋.它可以同时在开发环境和生产环境中运行,只需要将一切打包进一个Docker镜像中,然后通过Docker Hub分发镜像,这是很直接了当的.你会发现以下过程很令人满意:你可以快速

Docker学习路线图 (持续更新中)

Docker学习路线图 Docker基础 101 学习Docker基本概念 Docker容器 Docker镜像 Dockerfile初步概念 练习 安装Docker Toolbox或Docker Engine Docker Toolbox 阿里云镜像源 Docker Engine 阿里云镜像源 配置本地Docker环境 利用Docker Machine创建本地Docker Environment 配置阿里云Docker镜像加速器 管理容器的生命周期与配置 创建.删除.检查.启动.停止容器 ...

网易云基于Kubernetes+Docker的容器服务研发实践

网易从2012年春开始云计算研发,陆续上线私有云IaaS.PaaS服务,并实现网易95%以上的互联网业务迁移上云.在近日的网易云技术布道系列活动中,张晓龙分享了网易云基础服务团队在研发容器服务过程中的实战经验.   一.网易云技术架构   首先看到网易云的研发历程和整体架构,如下:   下图是网易云的简单架构:     技术架构从底到上可分为三层:   基础设施层主要采用虚拟化技术将服务器.交换机/路由器以及硬盘等物理设备虚拟成为可以按需分配的计算/存储/网络资源.基础设施层主要包括:云主机.云