打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

作者 Wesley Reisz ,译者 孙薇 发布于 2016年6月24日 | 注意:GTLC全球技术领导力峰会,500+CTO技聚重新定义技术领导力! 讨论

本周播客记录了QCon大会主席Wesley ReiszMatt 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正在通过全世界的一大批移动电话执行黑盒测试。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
阿里跨境供应链前端架构演进与 Serverless 实践
不定期整理推荐 InfoQ 上面的优秀文章
微服务意味着分布式系统
InfoQ
程立谈架构、敏捷和SOA实践
实现Cloud-Native可运维性
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服