优步技术堆栈和软件架构——优步是如何构建的?
已发表: 2022-01-17优步已经成为家喻户晓的名字。 这个令人难以置信的平台使用户只需四个简单的步骤即可预订出租车服务。 优步应用程序保证了快速的服务以及最佳的便利性,难怪它的受欢迎程度呈爆炸式增长。
你知道优步每月有 9800 万活跃用户吗? 此外,该公司在 2020 年创造了 111 亿美元的收入? 优步为初创公司和现有的出租车服务树立了经典榜样。 每个组织都希望通过提供快捷方便的叫车服务来复制 Uber 的成功。
如果您也对 Uber 的巨大成功感到敬畏,那么这篇文章就是为您准备的。 在这里,我们将讨论 Uber 技术堆栈和软件架构,这将使您更好地了解该平台并帮助您从头开始构建您的出租车服务应用程序。 那么,让我们开始吧。
如何构建像 Uber 这样的实时应用程序?
要构建像优步这样的实时应用,首先要了解它的不同组成部分,具体如下:
乘客应用
如果您之前使用过 Uber 应用程序,您将轻松识别乘客应用程序的功能。 该应用程序的此组件具有用户预订出租车所需的所有功能,例如选择行程、票价计算器、在线支付、GPS 跟踪等。
司机应用
出租车司机使用司机的应用程序显示乘客的新出租车请求。 使用此面板,司机可以接受或拒绝乘车请求,并使用内置地图检查乘客的确切位置。
市场
市场连接了两个应用程序——Passenger 应用程序和 Driver 应用程序。 它执行最复杂的任务,包括将乘客与司机匹配并处理付款。
因此,如果您希望创建像 Uber 这样的应用程序,您将需要三个不同的面板。 第一个面板将允许乘客预订出租车,第二个面板将允许司机接受乘车请求。 最后,第三个面板将接收前两个面板的请求并管理所有在线操作。
如何打造下一个优步?
优步是一项非常成功的出租车叫车服务,为乘客提供了极致的便利。 开发像优步这样的应用程序可能需要大量资金和一个称职的应用程序开发团队。
除此之外,在开发像 Uber 这样的应用程序时,还有一些其他的事情需要考虑。
看看你的竞争对手。
搜索当前正在尝试解决您希望通过您的应用解决的相同问题的应用是一个好主意。 查看这些应用程序将帮助您了解它们的特性、功能以及目标受众。
此外,全面了解竞争格局将帮助您了解竞争对手的运作方式。 例如,查看他们的社交媒体将使您能够收集有关他们的营销策略、产品演变和客户满意度评级的见解。 所有这些都将大大有助于您启动成功的应用程序。
了解您的潜在用户
在开始应用程序开发之前,您需要知道谁将使用您的应用程序。 只有了解您的目标受众,您才能与他们进行适当的沟通。
您可以收集潜在用户的所有人口统计数据,例如年龄、位置、性别、行为、偏好等。完成后,您可以与您高度评价的人讨论您的应用程序的想法。
专注于用户体验。
用户体验是成功应用程序的关键方面之一。 人们希望使用提供简单而直观的 UI 和 UX 的应用程序。 令人惊叹的 UI 提供了无缝的导航体验,直观的 UX 确保了易用性。
提供良好的用户体验可以带来更好的用户获取和更大的下载量。
用 MVP 测试
最小可行产品 (MVP) 是产品的第一个基本版本,它支持最小但至关重要的功能。 在开发成熟的应用程序之前创建 MVP 是可取的,因为它可以加快上市时间,吸引早期采用者,并从早期实现产品与市场的契合。
一旦 MVP 发布给用户,就会获得他们的初始反馈。 根据此反馈,您可以重申、修复错误并引入新功能,从而为您的产品提供竞争优势。
优步应用程序在技术上是如何工作的?

Uber 应用程序利用内部开发的 ML 和数据分析平台处理大量数据。 当乘客请求出租车时,会生成大量数据。 例如,应用程序接收有关乘客、他的位置、信用卡信息、乘车费用、附近的出租车司机等的数据。所有这些信息逐渐在整个系统中传播。 让我们看看如何。
请求乘车后,平台:
- 将所有乘车信息保存在数据库中
- 使用乘客的地理位置处理乘车请求
- 将所有处理后的数据发送到由 ML 提供支持的匹配算法
- 在数据库中查找有关附近存在的驱动程序的信息

类 Uber 项目的要求
Uber 于 2009 年推出,在最长的时间内,该平台拥有一个采用单体架构的后端。 换句话说,该应用程序使用单个数据库以及多个应用程序服务器来管理所有在线请求。
在最初的时期,这工作得很好。 然而,随着平台的发展,对新功能的需求也在激增。 为了集成新功能,开发团队必须一次性部署所有代码。 这影响了应用程序的速度,并使引入新功能的过程极具风险和耗时。 这是因为每次集成都可能导致整个系统崩溃。 这导致了微服务架构的采用。
微服务

2014 年,Uber 采用了微服务架构,以确保更好的速度和性能。 本质上,该架构包括一组针对彼此功能的服务。 因此,开发团队可以轻松地使用微服务架构独立部署新代码,确保完整的系统扩展。
DOMA(面向领域的系统架构)
尽管微服务架构是对单体架构的巨大升级,但 Uber 的开发团队并没有就此止步。 随着时间的推移,他们采用了一种称为DOMA-面向领域的系统架构的新方法。
根据这种方法,开发人员的设计围绕相关微服务的集合进行。 这些集合称为域。 此外,域也被分类为不同的集合,称为层。 每个域所属的特定层确定了该域中的微服务可以承担的依赖关系。 这称为层设计。
然后,开发人员使用网关 API 使每个域独立于其他域。 因此,每个域都有自己的逻辑,并且与同一层内的其他域无关。

简而言之,通过提供有组织的架构、预定义的扩展点和域网关,DOMA 将微服务架构从复杂的事物转变为易于理解的事物。
Uber 使用哪个 UI 框架?
优步的设计团队专注于通过添加新功能不断升级应用程序的设计。 然而,这是一个耗时的过程。 因此,为了简化设计团队的工作,他们创建了一个名为 Base 的 React UI 框架。


Base 包括预先设计的 Uber 应用程序元素,例如颜色、网格、排版、列表、按钮和图标。 该框架使设计团队能够以更快的速度创建设计,同时保持较高的 UI/UX 标准和一致性。
送餐应用 Uber 背后的技术堆栈是什么?
2014 年,Uber 的后端包括 Python、Mongo 和 MySQL 等语言。 另一方面,调度系统使用 Node.js 和 Redis,而移动应用程序则使用 Java 和 Objective-C。 然而,随着需求的发展,开发人员几乎改变了平台的所有组件。
市场技术堆栈
优步的市场是管理所有数据流和数据分析的重要方面。 用于构建这个市场的技术堆栈包括 Python、Go、Java 和 Node 等语言。 现在让我们详细看看这个市场技术堆栈:
行程执行引擎
由于行程执行引擎是市场不可分割的一部分,它最初是用 Node.js 编写的,因其异步、简单和单线程处理而受到青睐。 Node.js 还允许 Uber 团队管理大量并发连接。 然而,现在,该公司在 Go 中创建了新的服务,Go 以其效率、并发性和类型安全的操作而闻名。
前线 API
前线 API 将来自驾驶员和乘客移动设备的请求定向到其他 API 和服务。 这是用 Node.js 编写的,除了边缘。 它使用 NGINX 作为前端并执行 SSL 终止和一些身份验证。
实时连接
为了无缝支持最高可用性需求,市场堆栈必须实时接收信息。 因此,开发人员使用 Ringpop,一个用于建立协作分布式系统的库。 由于这个库,开发人员可以获得与分布式数据库(如 Riak 和 DynamoDB)的高可用性连接。
匹配逻辑
匹配算法,即实时管理来自司机和乘客的警报然后匹配它们的系统,是用 Go 和 Node.js 编写的。 Riak 是他们的分布式数据库,而 Redis 提供缓存。
动态定价优化
优步的市场团队通过动态定价、智能匹配和供应定位来管理优化和平衡。 早些时候,这个堆栈的大部分是使用 Python 与 Flask 和 uWSGI 构建的。 然而,现在,开发人员正在用 Go 替换大多数 Python 以实现更高的性能。
数据流和机器学习
Uber 使用 Kafka 和它自己的生产数据库进行数据流传输。 而数据存储依赖于 Hive、HDFS、Elasticsearch、MapReduce 和文件存储 Web 服务。 该公司还开发了自己的激光雷达,以确保内部共享。 LIDAR 运行 Jupyter、JupyterHub,与 Apache Spark 和他们自己的数据平台集成。
继续前进,值得注意的是 Uber 拥有自己的机器学习平台。 2015 年,该公司决定扩展 ML 以标准化工具和工作流程并避免 ML 反模式。 因此,他们在 2017 年开发了米开朗基罗。
Michelangelo 是一个 AI 和 ML 驱动的平台,可帮助管理数据、评估和部署模型、进行趋势预测和监测预后。 ML 平台由开源系统和内部组件组成,例如:
- 高密度文件系统
- 萨姆扎
- 火花
- MLLib
- TensorFlow
- 卡桑德拉
- XGBoost

Web 应用程序的堆栈技术
对于基于 Web 的应用程序,Uber 开发人员使用 Node.js,这是一个拥有庞大 Web 工程师社区的开源平台。 Node.js 还使开发人员能够在服务器和客户端之间共享 JavaScript 代码以创建通用 Web 应用程序。 最后,他们将 Browserify 用于 Node 附带的所有客户端捆绑。 基于 js 的模块需求。
Uber 的名为 Bedrock 的 Web 服务器建立在 Express.js 之上,Express.js 是一种流行的 Web 框架,可提供完整的安全性和内部化。 他们的内部服务通信层,称为 Atreyu 管理与后端服务的所有通信,并与 Bedrock 集成。 该通信层还使公司能够轻松快速地向其 SOA 服务 API 发出请求。
Uber 使用标准 Flux 和 React.js 进行应用程序渲染和状态处理。 构建系统 Core Tasks 是一组预定义的脚本,用于编译和版本化基于 Gulp.js 构建的前端资产。
移动应用程序的堆栈技术
要开发像 Uber 这样的应用程序,您需要创建四个不同的移动应用程序:Android 乘客、Android 司机、iOS 乘客和 iOS 司机。 开发人员使用 Objective-C 和 Swift 编程语言创建 IOS 应用程序,而 Android 应用程序使用 Java 开发。 但除此之外,开发人员使用的其他技术很少。 这些包括:
Android 应用技术栈
- 摇篮
- OkHttp/Gson/改造
- 牛油刀
- 匕首
- 浓咖啡
- 毕加索
- RxJava
- 木材
iOS 应用技术栈
- 巴克
- 砌体/ SnapKit
- KSCrash
- 强迫症
我可以使用哪些编程语言来创建像 Uber 这样的送餐应用程序?
如果您想开发像 Uber 这样的应用程序,您可以选择集成以下技术:
- Node.js – 适用于 Marketplace 网络应用程序
- Python – 用于基于 Web 的预订应用程序
- 去 - 提高性能和速度
- Browserify – 用于客户端捆绑
- Java – 用于第三方服务集成
- Apache Hive 数据仓库——用于分析和数据查询
- ELk——用于存储日志、处理和运输
- Apache Cassandra – 用于管理大量数据
- MySQL 数据库服务 - 用于关系数据库管理
- Docker——用于数据中心基础设施
- HAProxy – 用于代理服务器和负载均衡器
这是对 Uber 技术堆栈的快速总结。 但是,简单地复制此技术堆栈而不进行自己的研究可能会损害您的商业模式。 此外,应用相同的技术并不能保证您的叫车业务取得成功。
因此,建议尽可能使用一些技术来构建您的应用程序。 逐渐地,随着您的业务扩展,您可以通过利用更新的技术继续添加更新的功能。 您只能使用 Uber 的技术堆栈作为开始的灵感来源。
