写点什么

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

2016 年 6 月 23 日

本周播客记录了 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 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016 年 6 月 23 日 18:584440

评论

发布
暂无评论
发现更多内容

2020年度国产数据库:openGauss

墨天轮

数据库

Windows Server 做网络转发

wong

Windows Server netsh

Java达到什么样的水平才能通过阿里社招?

Java架构师迁哥

SRE灵魂之SLI和SLO

勇往直前的胖子

SRE SLO

浅谈机器学习模型推理性能优化

ThoughtWorks洞见

人工智能 机器学习

让你的react代码跑在svelte引擎上

闲鱼技术

HTML03 - 表格

桃夭十一里

html

架构师训练营11W作业

Geek_f06ede

一文彻底吃透MyBatis源码!!

冰河

架构 mybatis 架构设计 框架 源码解析

在onelogin中使用OpenId Connect Authentication Flow

程序那些事

权限系统 OAuth 2.0 程序那些事 权限架构 OpenConnect

从技术视角看考拉海购的云原生之路

阿里巴巴中间件

云计算 云原生

音视频技术入门基础

赖猫

c++ 音视频 ffmpeg 实时音视频

资深首席架构师预测:2021年云计算的8个首要趋势

RancherLabs

容器 rancher

HTML01 - 标签

桃夭十一里

html

AWS x 德勤 | “三步走”策略,赋能企业打造洞察驱动型组织

亚马逊AWS官方博客

云计算 AWS

Apache Pulsar 12月月报:Pulsar 2.7.0 发布!

Apache Pulsar

大数据 开源 pulsar Apache Pulsar 消息系统

功能测试用例设计方法分享

行者AI

测试

Angel图神经网络算法在推荐场景下的实践

DataFunTalk

大数据

ClickHouse的实践之路

DataFunTalk

数据库

Rancher年终盘点丨历尽千帆,岁月可期

RancherLabs

rancher

规避单点故障,MySQL 8.0 MGR软负载怎么选?

dbaplus社群

数据库

腾讯云加速构建云原生数据仓库,助力企业数字化转型

小小的一朵云

大数据 数据仓库

程序员能靠比特币能致富(暴富)吗?

陆陆通通

比特币 区块链

HTML02 - 列表

桃夭十一里

html

LeetCode题解:347. 前 K 个高频元素,快速排序,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

架构师训练营技术知识点

业哥

谷歌被反垄断诉讼后,美国互联网会再度繁荣吗?

脑极体

华为交换机恢复出厂设置的三种方法

网络技术平台

腾讯云大数据发布数据生态战略,构建开源开放数仓生态

小小的一朵云

大数据 数据仓库

APICloud AVM 多端开发 | 外卖app开发案例教程(下)

APICloud

前端工程 Web Worker 前端进阶 前端教程 APICloud

元旦在家撸了两天Seata源码,你们是咋度过的呢?

冰河

分布式事务 分布式数据库 分布式存储 数据一致性 seata

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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