前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Uber首席架构师聊架构

Uber首席架构师聊架构

作者头像
dys
发布2018-04-03 17:26:47
6040
发布2018-04-03 17:26:47
举报
文章被收录于专栏:性能与架构

微服务模式的利弊

微服务模式允许使用不同的开发语言,例如一些服务使用 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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
TDSQL-C PostgreSQL 版
TDSQL-C PostgreSQL 版(TDSQL-C for PostgreSQL)是腾讯云基于 PostgreSQL 自研的新一代云原生数据库。它采用存算分离的架构设计,支持计算节点纵向和横向秒级扩展的同时,实现了超128TB海量分布式数据存储,广泛适用于性能和弹性要求高的业务场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档