InfoQ播客:Uber首席架构师谈Uber的架构及其快速发展

本周播客记录了QCon大会主席Wesley Reisz与Matt Ranney的对话。Matt是Uber的首席系统架构师,负责对Uber所有业务的构建与伸缩提供支持。在加入Uber前,他曾是Voxer的创立者兼CTO,而Voxer的Node.js部署或许是业界规模和压力最大的。

关键要点

  • 以这样的速度扩展公司和团队实在很困难,在这期间我们踩了不少坑;
  • 微服务能让公司迅速发展,但要以聚合速度为代价;
  • Uber逐渐将marketplace的开发语言从Node.js转向Go和Java,并在地图服务中使用Java;
  • Uber广泛采用了积极故障测试;
  • 一些早期的设计选择,比如通过HTTP发送JSON格式的数据使得正式的验证基本是做不到的。

点击播客链接收听

摘要

QCon演讲与微服务的成本

  • 1分42秒:在参加过许多会议之后,我开始反思“如果选择参加某个会议,是想从中获得什么?”在QCon大会等盛事上,有许多架构类的演讲让我感觉自身不足:别人,像谷歌之类已经解决了这些问题,但我还没有做到。

  • 2分54秒:我想提出问题。因为与很多人聊过之后,我发现当他们最终解决掉问题时,所采用的架构实际上多是各种架构的混杂体。

  • 3分21秒:因此我们要肯定这一点——确实很困难,但我会尝试给出一些办法,让你少受一些痛苦。

  • 3分55秒:微服务中有很多权衡之处,并非所有都一目了然。

  • 4分41秒:采用微服务可以让你使用不同的编程语言来编写软件,因此我们可以分别使用Node.js、Python、Go和Java来编写不同的部分,而在Uber这些语言全部用到了,我们还用了Scala。

  • 5分22秒:微服务有许多好处,比如各个团队可以自行安排发布周期,并控制自己的上线时间。

  • 5分46秒:由于每个团队都在各自完成工作,在很多情况下聚合速度就会比较慢一些;Java、Node和Go的使用者都得给出与指标系统对话的方式。

  • 6分05秒:在一个平台艰难解决掉的bug还得在另一个平台重新处理。

  • 6分19秒:我希望多语言带来的开销比以前要低。

Uber的架构

  • 7分21秒:Uber在全世界各地有许多不同的数据中心,以便就近为消费者提供数据,以及高可用性。

  • 7分43秒:我们采用在前端终结TLS会话的方式,并尝试让终结点尽可能靠近终端用户,因此使用了一些云服务商来提供这项服务。

  • 8分03秒:随着Uber的业务逐渐拓展到除运输之外的其他物流领域,我们随后创建了Node.js调度系统,也就是现在的Marketplace。

  • 8分31秒:Marketplace的部署正逐渐从Node.js转向Go和Java。

  • 8分50秒:由于这部分系统实际上是需要保持在线的,因此我们对其执行了积极的故障测试,并对所进行的一切变更提出最高级别的审查要求。

  • 9分14秒:使用Riak集群来管理所有进行中任务的状态。

  • 9分31秒:将完整的任务从Marketplace系统中迁出,再迁入到其它各种业务逻辑系统中,其中很多是通过Kafka。

  • 9分58秒:各种其他队列也以工作流的形式执行,比如提醒获得收据与评价行程。

  • 10分27秒:地图服务会计算行程的预计到达时间与路径,这些系统属于吞吐量最高的系统,大多用Java编写。

  • 11分07秒:将所有Kafka数据流发给Hadoop进行分析处理。

管理团队成长与文化

  • 12分44秒:如此大型的团队,以及这样的发展速度,若是没有真正优秀的工程师是无法做到的。如果我们雇人的速度更慢些,效率会高得多,但竞争非常激烈,我们必须努力保持领先优势。

  • 13分51秒:最有趣的事情之一就是,由于我们进人的速度很快,不将工作拆分成很多小服务是不行的。

  • 14分44秒:Uber的文化并非一直是有凝聚力的。

构建管道

  • 16分14秒:Uber有一支团队负责管理公司内部构建,以及管道部署,他们使用了Jenkins以及公司内部的开发自动化系统。

  • 16分44秒:还有一支负责(指标)可观测性的团队。

缺陷及疯狂成长

  • 17分10秒:有四种不同的语言以及许多不同的客户端库,因此对于Kafka团队来说日志记录十分困难。

  • 17分58秒:缺陷有很多,但由于业务非常成功,很多问题得以解决。

创新的架构

  • 21分38秒:从许多大公司,比如谷歌、Facebook、Twitter和微软学习经验。

  • 22分10秒:Ringpop是大多Marketplace系统的基础,其灵感来自于微软的Orleans,点击这里可查看Github相关链接。

  • 22分46秒:我们目前正在就其远程过程调用协议(RPC协议)进行一些有趣的研究,稍后会进行开源。

故障测试

  • 23分28秒:其他系统也使用相同的设计,以便支持在生产环境中执行积极的故障测试,而不让其他用户发觉。

  • 24分36秒:Uber的故障测试就像Netflix的Simian Army那样,但除了Amazon上的那些之外,Uber还运行着很多自己的数据中心,因此必须构建许多自己的工具。

  • 25分28秒:在系统中不得有任何无法中断的节点——任何人都应当能将节点下线。

分布式系统的验证

  • 26分16秒:Twitter的Caitie McCaffrey以及Sendence的Sean T. Allen谈到了分布式系统的验证问题。

  • 26分51秒:Uber主要是建立了一个集成测试套件,尝试在模拟环境中吞吐流量。

  • 27分23秒:如果不了解其中的契约关系,就很难验证系统应当如何协作运行。

  • 28分09秒:Uber很多早期的代码使用了基于HTTP传递JSON数据的方式,导致验证这些接口非常困难。

  • 28分22秒:服务间转向类型安全接口;之前其中一个最大的教训就是在服务间使用非类型安全的JSON字符串来交换数据,造成了意想不到的损失。

  • 29分28秒:使用类型安全且可验证的接口是一项重大任务。

  • 29分33秒:与此同时,Uber正在通过全世界的一大批移动电话执行黑盒测试。

其中提到的人

Adrian Cockroft
Caitie McCaffrey
Sean T. Allen

其中提到的公司

亚马逊
Facebook
谷歌
微软
Netflix
Twitter
Uber

其中提到的语言

Go
Java
Node.js
Python
Scala

其中提到的产品

Hadoop
Jenkins
Kafka
Riak

关于播客的更多信息

最新播客可通过我们的RSS feed更新,也可通过SoundCloud和iTunes收听。本页所列出的播客摘要内容均附有可点击链接(英文原文),点击后可直接切换到音频的相关部分。

关于QCon大会

QCon是由InfoQ主办的全球顶级技术盛会,由业内人士推动,专为在团队中影响软件创新的技术团队主管、架构师以及项目经理而设计。QCon每年的八场大会分别在伦敦、纽约、旧金山、里约热内卢、圣保罗、北京、上海和东京召开。QCon纽约已经举办到第五届,今年将于6月13-17日举行,届时会有100多名业内专家作为演讲嘉宾,并有800名与会者以及15个涉及如今推动软件开发发展的专题追踪报道。想要了解更多详情,请参见qconnewyork.com网站。

英文原文: The InfoQ Podcast: Uber's Chief Systems Architect on their Architecture and Rapid Growth

译者信息: 孙薇 新浪微博@verawala

你可能感兴趣的:(InfoQ播客:Uber首席架构师谈Uber的架构及其快速发展)