【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

Uber 从单体架构转向微服务架构

  • 2015-10-22
  • 本文字数:1025 字

    阅读完需:约 3 分钟

在成立之初,Uber 采用单体架构构建了一款仅服务于一座城市的产品。但随着 Uber 的迅速发展、核心领域模型的扩大,组件成了紧耦合的,持续集成成了很大的负担。新增特性、Bug 修复、技术债务解决,全都在单个中进行,这极其困难。因此,他们决定效仿那些快速成长的公司(如亚马逊、Netflix、Twitter 等)将单个代码库拆分成多个代码库,由单体架构迁移到微服务架构。近日, Uber 官方网站介绍了这一迁移过程

他们之所以迁移到微服务架构,主要是为了达成以下三个目标。

易见性

在迁移之前,他们已经有500 多个服务,服务发现变得非常困难。每个服务都有自己的结构,服务的用法不能做到显而易见。通常,服务提供的 REST RPC 端点都是弱契约。向 REST API 添加 JSON 模式可以提高安全性及改进针对服务的开发过程,但不易于编写或维护。总之,无法保证容错性或延迟,也没有标准的方法处理客户端超时和中断或者确保一个服务中断不影响其它服务。这些缺陷也影响了系统弹性。因此,他们需要一种可以提供类型安全、验证且具备容错性的标准通信方法。而且,该方法还要满足如下要求:

  • 提供客户端库的方式要简单;
  • 提供跨语言支持;
  • 超时和重试策略可调整;
  • 测试和开发高效。

因此,他们认为 Uber 需要一种已有的接口定义语言(IDL),而且该语言还提供了大量预构建的工具。经过评估,他们发现, Apache Thrift 最能满足他们的需求。Thrift 提供一个构建可扩展、跨语言服务的库和工具集合。数据类型和服务接口定义在一个语言无关的文件中,然后生成代码将服务之间RPC 消息的传递和编码抽象出来,而这些服务是使用不同语言编写的。

安全性

Thrift 最吸引他们的地方是其安全性。Thrift 通过将服务绑定到严格的契约来确保安全性。该契约描述了服务的交互方式,包括如何调用服务、提供什么输入以及会产生什么输出。

弹性

他们从 Netflix 的 Hystrix 库和 Twitter 的 Finagle 库获得了处理系统弹性问题的灵感,编写了一个可以确保客户端成功处理失败场景的库。他们后续会对此进行详细介绍。

遗憾的是,Thrift 工具集相对还不成熟,面向Python 和Node 的工具也不够多。这有个风险,就是他们可能需要花费大量的时间创建这样的工具。另外,身份验证和跨服务跟踪也是他们面临的两个挑战。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-10-22 19:006262
用户头像

发布了 1008 篇内容, 共 374.3 次阅读, 收获喜欢 341 次。

关注

评论

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

软件测试 | admin后台管理

测吧(北京)科技有限公司

测试

Java 8 之后的新特性都是鸡肋吗?

Java你猿哥

Java ssm API Java 8 java 8 的新特性

Java Web实战 | JDBC案例:实现图书管理

TiAmo

JDBC DAO JavaBean

详解集群级备份恢复:物理细粒度备份恢复

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

一种KV存储的GC优化实践

vivo互联网技术

KV存储 GC设计

软件测试是青春饭吗?

测吧(北京)科技有限公司

测试

Java 是如何毁掉你的编程思维的?

Java你猿哥

Java 程序员 ssm

穿越数据智能“海峡”,企业更需要什么样的数智底座?

用友BIP

数据治理三大模式详解,治理新范式释放数据潜能

袋鼠云数栈

数据治理

从 yield 开始入门协程

乌龟哥哥

三周年连更

智能化生产应用搭建的实战案例

华为云开发者联盟

后端 物联网 华为云 华为云开发者联盟 企业号 5 月 PK 榜

京东短网址高可用提升最佳实践 | 京东云技术团队

京东科技开发者

最佳实践 高可用设计 企业号 5 月 PK 榜 短网址

2023 开源之夏来啦!报名 MegEngine 项目,赢取万元奖金!

MegEngineBot

深度学习 开源之夏 MegEngine 学生比赛 奖金

以数据思维和技能提升数据应用测试实践 | 京东云技术团队

京东科技开发者

测试 测试覆盖率 数据思维 应用安全测试 企业号 5 月 PK 榜

GreatSQL社区月报 | 2023.04

GreatSQL

greatsql社区

【开发点滴】在vscode的python调试中,如何让调试程序以sudo方式运行?

无人之路

Python vscode ChatGPT

硬核!阿里最新出品架构核心场景实战手册,解决99%的架构问题

Java你猿哥

构建自己的思维逻辑体系

老张

逻辑思维 如何解决问题

开发中关于HTTPS不得不规避的2个大坑

北桥苏

https TCP/IP ssl

如何解决由于TLS版本不兼容导致的问题

JefferLiu

Java TLS

智慧园区移动应用发展面临瓶颈,如何解决?

没有用户名丶

MySQL好玩新特性:离线模式

GreatSQL

MySQL greatsql greatsql社区

阿里云李钟:弹性计算控制系统团队的提效之路

云布道师

阿里云 弹性计算

BATM面试Java岗:精选200+面试题及答案、6大重点规划和经验总结

Java你猿哥

Java MySQL JVM 多线程 java面试

Java面试通关:阿里内部实战模拟面试精讲题库,竟被上传GitHub!

Java你猿哥

Java 数据库 微服务 Spring Boot java面试

【5.05-5.12】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

如何使用Go语言实现面向对象编程中的封装、继承和多态

Jack

极氪汽车引入瓴羊Quick BI,数据可视化助力企业数字转型

小偏执o

瓴羊Quick BI、帆软横向对比,国内商业BI工具崛起

巷子

mac上哪款系统仪表板好用?实用软件推荐~

真大的脸盆

Mac Mac 软件 系统监测 仪表盘工具

《 Istio 权威指南 》新著重磅发行!华为云云原生团队匠心力作

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

Uber从单体架构转向微服务架构_语言 & 开发_谢丽_InfoQ精选文章