博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uber将整体式API拆分为微服务
阅读量:6004 次
发布时间:2019-06-20

本文共 992 字,大约阅读时间需要 3 分钟。

Uber工程师Emily Reinhold最近他们是如何将整体式API拆分为灵活的模块化微服务体系结构的。她重点介绍了在Uber的迁移工作中,设计和体系结构方面几个最重要的考虑。

\\

根据 Reinhold的介绍,迁移至微服务的主要目标在于在三个指标方面实现更好的缩放性:应对流量的激增,更轻松地增添新功能,以及转为使用一种在组织迅速增长的情况下能轻松适应规模变化的体系结构。

\\

为了降低微服务之间的耦合,Uber工程师在常规设计方面做出了一些决策:

\\
  • MVCS,对众所周知的模型-视图-控制器(Model-View-Controller)方法进行的扩展,可明确包含服务层并承载应用程序逻辑。这样Uber就可以在业务逻辑和持久层之间实现解耦,借此更容易地修改持久层。 \\
  • UDR,Uber的全球复制数据存储,该技术取代了PostgreSQL,使得Uber可以通过多个数据中心同时为用户提供乘车服务。\

此外为了应对大量服务所造成的后续问题,Uber工程师还对体系结构进行了一些重大更改:

\\
  • 异步网络:为了处理数量日益增加的服务请求,Uber工程师通过一种基于Python事件环路(Event-loop)的异步网络库实现了同时缩放至数万个开放连接的能力。使用Tornado的优势之一在于该技术可与Uber现有的Python网络代码集成,借此构建结构化的异步范式。 \\
  • 服务的发现和弹性:面对数量激增的服务,关键在于要能发现服务并找出故障点。例如需要收集故障率和SLA违背等指标,检测运行状况不正常的主机,通过短路(Circuit breaking)防止连锁故障。Uber通过使用解决了这一问题,这是一种他们自行开发并已开源的,适用于RPC的网络多工(Multiplexing)和帧通讯协议。 \\
  • 严格的接口定义:Uber选择使用通过IDL定义服务接口,并借此生成不同语言的客户端源文件。Thrift使得他们能够检测出客户发起的,与接口定义规范不符的调用。\

最后Reinhold还提到Uber会通过下列基本原则确保生产环境正常运行:

\\
  • 通过负载测试发现瓶颈和断点。 \\
  • 通过容器实现更高的硬件利用率。 \\
  • 通过模拟服务中断确保系统能够顺利恢复并发现可能存在的弱点。\

Emily Reinhold也曾在上一次纽约QCon活动中这些话题。

\\

查看英文原文

转载地址:http://nvpmx.baihongyu.com/

你可能感兴趣的文章
【webstrom】——webstrom提示map未授权解决方法
查看>>
并发编程的艺术
查看>>
Flutter论坛客户端(v0.0.1)正式发布
查看>>
我的 Vue.js 学习日记 (十三) - vue-router
查看>>
猴子自拍版权归谁?
查看>>
Python每日小知识(6)函数滴参数
查看>>
九天学会Java,第五天,函数定义,函数调用
查看>>
React Natve 真机运行步骤及常见错误
查看>>
【module】json
查看>>
文件和字符编码
查看>>
VMware 来安装虚拟机遇到的坑
查看>>
WSL 环境下 Ubuntu 16.04 编译OpenJDK 8
查看>>
关于js中的柯里化(Currying)与反柯里化(Uncurrying)
查看>>
nginx limit配置参数解读
查看>>
深入理解JavaScript,这一篇就够了
查看>>
vuex学习总结
查看>>
原生js系列之无限循环轮播组件
查看>>
配置 SSH Key ☞ GitHub
查看>>
组件化通用模式
查看>>
迭代器模式
查看>>