Uber首席架构师聊架构

微服务模式的利弊

微服务模式允许使用不同的开发语言,例如一些服务使用 Node.js,一些使用 Python,一些使用 Go,另一些使用 Java,Uber就是这样,并还有 Scala

使用微服务,可以让每个团队自己掌握他们的发布周期,自己对服务的在线负责

就是因为每个团队只负责自己的事情,所以在很多时候会降低整体速度,例如,java开发团队必须明确他们应该如何与某个系统沟通,而同样的事情还要在 Node.js 与 Go 的团队做一遍

再比如,在某个平台上经过奋战解决了某些bug,同样的,其他平台可能还需要战斗一遍

对于多语言混合使用的代价预估不足,超出了预期

在新员工的工作效率方面,微服务起到了很好的效果,由于Uber的高速发展,大量新员工加入,正是因为使用了微服务,降低了系统理解的难度,使新员工可以快速进入工作状态

Uber的大体架构

Uber在全世界建立了很多数据中心,就是为了让用户与数据的距离更近,还可以提高系统的可用性

调度系统在Uber中很重要,之前使用 Node.js 开发,后来这个系统扩展到了非常大的规模,便逐渐迁移到了 Go 和 Java

大部分高计算量的服务都是使用 Java 开发,例如地图服务,需要大量计算预计达到时间和规划行程路线

调度系统中有很多任务对象,所有任务的状态都需要管理,使用 Riak cluster 来实现(以 Erlang 编写的一个高度可扩展的分布式数据存储)

已经完成的任务会被移出调度系统,然后通过 Kafka 流入到其他的业务系统

所有的 Kafka 信息流都会进入 Hadoop,用来进行数据分析

质量保证

Uber高度重视系统的质量,所以失败验证是个非常重要的工作,所有的系统都被设计为可验证的

失败验证基于 Netflix 的 Simian Army 系统,Uber在其上进行了调整,使其更适合自己

Simian Army 可以进行随机故障测试,用于验证可靠性

验证工作中,建立一套模拟环境,和开发一套集成测试集是很重要的一部分

通过验证过程,发现了之前系统设计的一个不足,以前很多接口都使用了JSON结构,因为JSON不是类型安全的,所以非常难以验证

服务间使用类型不安全的JSON字符串交互数据,导致整个系统的验证成本很高,超出了预期,是一个较大的经验教训

接下来要对接口进行改造,使用类型安全可验证的方式,这将是一个重点任务

Uber在内部进行大量验证的同时,还在全世界建立起了一个大规模手机测试团队,让大家以用户的角度来使用,进行黑箱测试

以上内容整理自 Uber首席架构师 Matt Ranney 在 2016 QCon 大会的访谈

原文地址

https://www.infoq.com/articles/podcast-matt-ranney?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2016-05-23

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算D1net

三种方式实现从IaaS到PaaS

随着云计算平台的优势变得越来越清晰,从IaaS到PaaS似乎是一项比较轻松的工作了。但是,方法各有不同,而找到实施PaaS最好的方法就意味着在三个可能的选项中进...

66370
来自专栏CSDN技术头条

详述从IaaS到PaaS的三种实现方法

随着云计算平台的优势变得越来越清晰,从IaaS到PaaS似乎是一项比较轻松的工作了。但是,方法各有不同,而找到实施PaaS最好的方法就意味着在三个可能的选项中进...

28960
来自专栏悦思悦读

持续发布那些事儿

什么是持续发布 持续发布这个说法,一般情况下确实是和敏捷开发联系在一起。敏捷开发的scrum模式的一个重要概念就是持续发布。 按照理论上的说法:scrum的每一...

33260
来自专栏IT技术精选文摘

敏捷规划时间表

18130
来自专栏企鹅号快讯

数据中心在合并过程中七个存储错误

在当今的商业环境中,企业的兼并和收购是司空见惯的事情。企业合并的关键是如何将两家公司的IT基础设施组合起来。IT部门在确保合并成功方面起着关键作用,但也是企业合...

21170
来自专栏北京马哥教育

运维平台体系,你们真的有好好规划吗?

在之前的文章中,谈到过“运维的本质——可视化”,在可视化的篇幅中,着重介绍自动化的可视化和数据的可视化;在后续的篇章中又介绍了“互联网运维的价值体系”,里面分解...

37000
来自专栏用户画像

1.1.1 计算机网络的概念

计算机网络是一个将分散的,具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。简而言之, 计算机网络就是一些互连...

7810
来自专栏应兆康的专栏

13. 快速构建你的第一个系统,然后进行迭代

18010
来自专栏技术翻译

12个用于构建物联网项目的物联网平台

物联网是增长最快的行业之一。我们周围都有连接设备 - 智能家居,汽车,可穿戴设备等。Gartner预测,95%的电子产品将包括物联网功能。在接近物联网项目时,我...

58200
来自专栏杨建荣的学习笔记

运维平台中的业务树梳理思考

今天和同事聊了下业务树建设的事情,也收获了不少的建议和想法。从最开始要建设应用管理的时候,自己就在犯疑惑,这个应用管理该怎么做。从我接触的很多业务来说,这个业务...

17420

扫码关注云+社区

领取腾讯云代金券