Docker在Uber服务部署中的应用

无论你如何理解政治,毫无疑问UBER就是创新的代名词,正如它颠覆了传统的交通运输行业在这个分享体系中的领导地位。但是问题在于最快的创新者往往会遇到一些问题,正如微软、苹果、亚马逊都曾经遇到过一样。问题在于一旦你开始创新并且旗开得胜,你的进度会快到你自己都无法跟上,以至于有时会迷失对于大局的掌控,从而不得不暂缓进度边走边建设。

这就是Casper S. Jensen今年初作为软件工程师刚刚加入UBER计算机平台部门时候发现的故事。

在Docker欧洲会议的第一天,Jensen开始他的演讲即是关于UBER如何保持简单友好的用户交互界面的同时,在背后支撑的是实际上是一个非常巨大的体系,用户程序仅仅是冰山一角,底下是无数的功能在支撑它。毕竟,当前UBER在69个国家有自己的市场营销和管理规则,每天运行上百万次,超过4000名员工同时工作在这个平台上。

传统的软件开发模式(bold)

当时Jensen以及其他四位组员都是刚刚加入UBER不久,他们迫切需要寻找一种解决方案来应付日常工作中为数不少且日益增长的失败和挫折。

在刚刚过去的那个冬天,他们的开发流程还是如下所示:

1. 写服务RFC(Request for Comments)-Uber的开发流程非常重视反馈机制。在开始任何新的东西前,他们开始描述新的服务需求系统架构和变更理由,然后分发到相应的邮件列表。

2. 等待反馈,比如:“你有没有听说过有哪些家伙在其他地方做同样的事情”,这里主要专注于捕捉早期错误。

3. 开始写必要的基本框架。

4. 开始开发服务。

5. 等待基础架构团队编写服务框架。

6. 等待IT部门的服务就位。

7. 等待基础架构的团队服务就位。

8. 部署到开发服务器和测试。

9. 部署到生产环境。

10. 监控迭代。

他描述的步骤五到7年为:“真的,真的很痛苦的一部分。这些步骤可以很容易地耗费数天时间,在某些情况下,甚至几个星期。”。“这是为什么? 这不是因为这些步骤本身很困难,大部分的脚步都是现成的,新集成涉及的大约只有几十行。”

“这么小题大做的原因很简单,在这个公司内部只有很少的一部分人真正知道怎么做事,而不至于破坏其他已有服务”。这些细小错误积少成多,就如同一个个的破折号,大幅减缓了所有事情的进度。

直到2015年2月,一封内部邮件内部流转并设定了如下目标:

Jensen描述他们的期望如下:

  1. 允许服务拥有者保留部分专有空间,在一定范围内他们可以任意方式安装任意程序,前提是不破坏其他服务。
  2. 在这种模式下,他们可以做任何事并不受打扰。

我们必须做点什么来改变现有模式同时不要破坏已有的服务。

UBER自己需要克服的障碍

当你公司的基础设施在高速发展时,你也会有一定压力。包括如Jensen所说“我们组有时不得不如此,因为公司的其他部门都在飞奔。”

UBER需要的不仅仅是全天候的可用性和正常运行,以及无数本地化的功能。“没有人见识过UBER的所有功能,我们所了解的仅仅是我们所工作的一小部分”。他举例说,就像UBERPOOL,UBERKITTENS,UBERICECREAM,以及UBEREATS,等。每天都迫不及待的不断增加新的功能。UBER另人眼花缭乱的成功是基于其全方位的高速增长,包括数据中心,服务器和基础设施。他们需要一个能够保持这种增长的解决方案。

“我们希望能有很容易的流程,很方便的基础设施,使开发者可以真正快速添加功能。其中之一,也是最重要的部分之一,是创造新服务的流程”。Jensen说。“我们意识到这意味着Docker”。他说决定迁移到Docker上来是很容易下的决定。“因为这非常容易解释,只要人们曾经去读过它,并且理解它的基本概念即可。”他说Docker对于开发者社区而言是非常容易推销的概念,每个人都迫切期望在其中找到自己喜爱的容器。

克服容器成长中的阵痛

他们对自己说“我们都能编写代码,这应该很容易吧?过两天,我们就大功告成了。“事实上没这么容易。虽然他们在二月份做出了这个决定,就一直持续到了盛夏才最终走上了Docker之路。

Jensen解释道,“基于Docker,虽然一切都只是改变了一点点,但是这需要我们转换思维。”

对于Docker应用,其中最大的障碍在于的内部集群管理系统uDeploy。它需要做持续的滚动升级以及内部回滚的支持。它的多个触发器用于出错报警,比如当健康检查、电路突然出错时。这包括负载测试和集成测试用以保证出错时快速回滚。uDeploy包括:

  1. 每周4000升级
  2. 每周3000构建
  3. 每周300回滚
  4. 在系统管理的600多个服务

根本就没有办法摆脱或淘汰uDeploy,所以UBER团队决定同时部署传统的服务以及基于Docker的服务。

“这也意味着,我花了很多时间去仔细检查我们已经实现的所有功能,并为之增加对于Docker服务的支持”,Jensen说道。“对于任意在uDeploy实现的标准输入和标准输出,我们都必须在Docker做同样实现”。

他们发起的Docker并没有太多计划,这让Jensen意识到他们在最初给了开发者太多的自由。“事情不应该是这样的。”他说道,贴紧他的手指。“你真的需要重新思考基础设施的所有部分。”

Jensen说,如果你未雨绸缪,真正关注的基础设施和Docker如何在其中发挥它自己的那部分角色,docker的最终结果将会顺利得多,也好得多。

Docker如何推进新的可收缩的UBER服务

现在的UBER已经有约三分之一实现了容器化,但是我们期望的是100%。为什么?当然,转型过程是痛苦的,但是结果是我们所希望的,那就是摆脱以下阻止我们可持续化部署最痛苦的三个点。基于Docker,我们可以彻底摆脱它们:

  1. 等待基础架构团队编写服务框架。
  2. 等待IT部门的服务就位。
  3. 等待基础架构的团队服务就位。

现在,他们可以不必再拷贝之前的项目、或者是手工实现一切必须的基础架构,而是直接使用一系列工具其中包含所有配置和基础文件。他说,基于标准化的服务,这一切可以再几十分钟内一帆风顺的下来,而在之前我们得花上几个小时甚至几天。

除此之外,UBER也非常认可Docker能够帮助消除团队之间的依赖性,提供了更多的自由,因为成员不再依赖于特定的框架或特定版本。现在框架和服务使用者现在可以尝试新的技术和管理他们自己的环境。

原文地址:How Docker Turbocharged Uber’s Deployments

译者介绍:王旭敏,Nokia开发工程师,关注云计算、高性能或可用等架构、容器等。

原文发布于微信公众号 - CSDN技术头条(CSDN_Tech)

原文发表时间:2015-12-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CIT极客

【极客周刊】支付宝PK微信?AI程序员面世?等等重大事件等你来看!

4496
来自专栏企鹅号快讯

小程序再添新入口,开放微信外部流量入口,QQ浏览器直接打开小程序

最近小程序的动作不断,就在今天,小程序可以在QQ浏览器里打开,首页入口也即将开放!这一年以来,小程序频繁更新了将近 100 次,现在又在QQ浏览器上面增加了新的...

4548
来自专栏镁客网

拔刺 | 大数据杀熟是真的吗?

有人觉得随着智能电视的功能越来越多,盒子的优势越来越不明显,盒子马上就会被取代了。其实不然,现阶段盒子仍然热销就有它热销的原因。

1182
来自专栏BestSDK

Microchip推出支持Apple HomeKit的Wi-Fi SDK

Microchip Technology Inc.(美国微芯科技公司)日前宣布推出支持Apple HomeKit而且经过全面认证的Wi-Fi®软件开发工具包(S...

32212
来自专栏Python入门

小伙用Python 分析了 20 万场吃鸡数据,网友:原来吃鸡这么简单

最近老板爱上了吃鸡(手游:全军出击),经常拉着我们开黑,只能放弃午休的时间,陪老板在沙漠里奔波。 上周在在微信游戏频道看战绩的时候突发奇想,是不是可以通过这个方...

1994
来自专栏IT派

“史上最严”朋友圈外链管理规则更新:删除对转播内容证照要求

导读:朋友圈是用户分享和关注朋友们生活点滴的空间,为保障微信用户的隐私和合法权益,微信会一直对朋友圈外链进行严格管理。

1282
来自专栏EAWorld

老司机谈DevOps 2.0:引子

译者的话: 你真的懂DevOps么?你知道怎么就持续集成持续部署又微服务了么,用时下流行的工具,实践DevOps怎么搞……跟着我,听老司机818 DevOps的...

2915
来自专栏阮一峰的网络日志

五个为什么(译文)

昨天晚上,我终于把 More Joel on Software 翻译完了。 谢天谢地,总算可以摆脱这本书了。 唯一的感觉就是特别倦怠......检查完译稿以后,...

30012
来自专栏顶级程序员

虽然全世界都在误解程序员,但我还是希望你能了解我…

对于相关的计算机和代码知识,通常说来程序员比一般人要了解得多,下面我将为大家揭晓一些业内人士不会诉诸于口的真相。

1053
来自专栏极乐技术社区

小程序一周报 | 小程序广告组正式启动内测 / 企业微信与微信消息互通开启内测

1222

扫码关注云+社区

领取腾讯云代金券