共享租车鼻祖 Uber 的后端架构也经历了从单体到微服务的演化过程,这篇文章介绍了 Uber 后端架构的功能、设计,对于理解 O2O 系统的架构实现提供了很好的参考。原文:Uber System Architecture[1]
Fikri Rasyid@Unsplash
Uber 一开始是单体架构,后来逐渐演化为面向服务的架构。Uber 最早只为旧金山提供服务,他们称之为 UberBlack。后来随着核心领域模型的增长以及引入了越来越多的新特性,组件的耦合非常严重,持续集成变成了沉重的负担,每次部署都意味着需要一次性部署所有的东西。在单一代码库中添加新功能、修复 bug、解决技术债务变得非常困难,这也是为什么 Uber 后来采用面向服务的架构的原因,这也促使 Uber 工程团队重构了新的 Uber 应用。
延伸阅读:
新应用程序增加了 UberPool、预约出行和促销车辆的视图。
延伸阅读:
延伸阅读: How to Make an App Like Uber: https://mlsdev.com/blog/how-to-make-an-app-like-uber
调度优化(或称 DISCO,Dispatch optimization)是 Uber 系统的一部分,用于基于位置数据匹配需求和供给。在匹配司机和乘客时,DISCO 保持最小化总服务时间和驾驶时间。与简单地使用纬度和经度来定位乘客和司机不同,DISCO 使用了更精确的谷歌 S2 库,它将地图划分为多个小单元。例如根据需求,可以在地图上设置 1 平方公里的单元格,每个单元分配唯一的 ID,因此在分布式系统中可以通过 ID 更方便的存储和访问单元数据,并且可以使用一致性哈希来存储单元数据。
调度系统基于 NodeJS 实现,提供基于事件的异步机制,允许在任何时候通过 WebSocket 和应用程序进行交互。Uber 使用一致性哈希环来扩展其 DISCO 服务器,从而在服务器之间有效分配负载,并自动检测集群中是否有新节点被添加或是否有节点从集群中移除,从而通过 SWIM/Gossip 协议重新分配工作负载。服务器之间通过 RPC 进行通信。
延伸阅读:
延伸阅读: Uber's Payment Platform: https://underhood.blog/uber-payments-platform
最后,
延伸阅读: Uber's Big Data Platform: 100+ Petabytes with Minute Latency: https://eng.uber.com/uber-big-data-platform/
从这篇文章中可以看出,大数据是一个必须要发展的更好的解决方案。
延伸阅读:
References: [1] Uber System Architecture: https://medium.com/interviewnoodle/uber-system-architecture-40201134aaea
你好,我是俞凡,在 Motorola 做过研发,现在在 Mavenir 做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI 等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。微信公众号:DeepNoMind
领取专属 10元无门槛券
私享最新 技术干货