【大数据】Uber的数据架构

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:

三月份小编在美国参加MVP峰会的时候,有幸碰到了几个Uber的高级工程师,他们在当天还分享了Uber的消息总线系统如何在每日兆级信息量、PB级数据卷、数万个Topic的情况下,保证低延时(小于5ms),高可用(99.99%),高稳定(99.99%,核心客户100%)的。
0

有朋友对Uber这种打车软件公司能达到这样的数据量感到不以为然,认为只有社交类(如Facebook、领英,微信)和在线零售(如Ebay、亚马逊,淘宝)的公司才有这样的体量。其实上述的数据量只是Uber的单个数据副本,作为一家遍布全球超过400个城市的出行公司,Uber需要存储世界各地的地图数据;其次,它还需要对这些城市的交通状况做出精确分析,以便对任意时间的路面进行预测;最后,Uber内部还有分析师和数据科学家需要调阅每周的财务收支情况及用户反馈,以及时调整运营策略或调整路线算法。

总体来说,Uber的数据生产者分为两类,一是核心业务数据,包括:

  • 乘客信息、司机信息
  • 路程规划、账单
  • 司机状态变更
  • 订单、可用车辆、定价

以上数据对可用性、实时性要求非常高,因此存储在在线数据库(OLTP)中。
2018_08_20_22_38_34

第二类数据是日志和事件数据。就在几年前,Uber从传统SOA框架转为微服务,它使运维和开发变得更灵活,并支持非关系型数据库。
2018_08_20_22_41_55

而日志作为非结构化的数据,不适用于关系型数据库,这类数据包括:

  • 微服务架构
  • 数据分析
  • 需求跟踪,调试
  • 实时数据

这部分数据使用流式的Kafka消息总线作为其核心传输模块。
2018_08_20_22_46_08

上图中左边是消息生产者,包括乘客端App,司机端App,以及第三方应用通过调用Uber的API采集来的消息。消息的生产者还包括一部分数据库,来存放用户操作记录等信息:其中MySQL用于存放结构化数据;Schemaless主要存放非结构化数据;Cassandra用来存放需要在各数据中心之间同步的核心数据(因为其低延迟的复制效率)。通过Kafka的处理,再由不同的消费者各取所需,例如Surge拉取数据计算车费;ELK拉取实时日志数据生成运行状态仪表盘;AWS S3和Hadoop拉取数据做一些实时性要求不那么高的离线数据处理。
为保证总线的高可用,每个站点还部署有备用Kafka,以便在主Kafka集群宕机时,将生产者的数据缓存下来,等主集群恢复了再切换回去。不同数据中心的Kafka通过uReplicator(Kafka的镜像生成器)进行汇总后输出。
2018_08_20_22_49_02

当然全局的和本地的数据都有消费市场,比如全局有补丁管理,本地化有计价系统,他们在上图不同的Kafka之后(Regional或Aggregate)被依次消费掉。
2018_08_20_22_50_29

不光如此,不同的消费者对于数据是有不同的需求维度的。近些年来新的数据库层出不穷,尤其是NoSQL数据库赶上了好时代而层出不穷,小编常被问及哪个数据库最强大,其实这并没有定论,关键要看需求的维度。
2018_08_20_22_52_03

消费者对于数据的要求无非以下六个维度:

  • 响应速度:如果数据库性能足够强大,没有附加串联系统,数据都在内存中交互,那响应速度无疑是可以保证的
  • 查询便捷性:要开放更多的查询维度(或者说更多的查询条件),势必要定义更多的Key,因此会牺牲数据库性能,最明显的是响应延时;
  • 安全性:Uber的数据调取需要经过反欺诈等系统的过滤,因此加强数据安全也会带来延时;
  • 数据可靠性:有些高访问量的应用为了提高用户体验,会在(交易)数据入库前就将后续指令返回给用户了。
    2018_08_20_22_54_24

比如用户在某购物APP上买一双鞋,交易在进入数据库之前可能就会向用户征收费用,这一方面是为了用户体验,另一方面大部分数据库同一时间只有一个读写副本,有时数据写入磁盘确实是个漫长的等待过程,所以APP将交易提交给后端缓存就认为交易已经入库,可以开始收费,但如果这时数据库宕机了,缓存数据丢失了,那就等于收了客户的钱没有给客户发货,因为数据库里没有这笔订单。当然订单入库再返回响应势必会慢很多,因为磁盘读写速度是远不及内存的,这一点又是与用户体验之间的博弈。
很多数据库默认都是异步写入,比如MongoDB,它甚至写入成功后也不会返回给应用任何确认入库的信息;再比如Redis,它完全就是一个不可靠的数据库,他会给数据做快照,但快照不会存入磁盘,因此Redis只能用于数据缓存层。
2018_08_20_22_56_32

  • 数据一致性:逛论坛的朋友经常会碰到这样的事情,就是一个主题或者一个回复我明明只发了一次,刷新页面却蹦出来一堆,这就是数据库的一致性检查没做好。一般的控制方法是限制单位时间的更新频率,或者优化业务逻辑,当然这也要牺牲一部分数据库性能。
    2018_08_20_22_58_00
  • 系统可用性:可用性,一般是指当某个数据中心发生灾难时,应用是否依然可用,数据是否依然可以访问。

在显然无法兼顾所有维度的前提下,作为一款打车软件,在保证响应速度、安全性、查询便捷性和系统高可用的情况下,适度地放弃数据一致性和可靠性是可以接收的。另外,可延展性(Scalability)是Kafka及其消费端软件本身就具有的特点。
2018_08_20_22_59_13

2018_08_20_23_00_13

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
20天前
|
机器学习/深度学习 传感器 分布式计算
数据才是真救命的:聊聊如何用大数据提升灾难预警的精准度
数据才是真救命的:聊聊如何用大数据提升灾难预警的精准度
92 14
|
2月前
|
数据采集 缓存 前端开发
如何开发门店业绩上报管理系统中的商品数据板块?(附架构图+流程图+代码参考)
本文深入讲解门店业绩上报系统中商品数据板块的设计与实现,涵盖商品类别、信息、档案等内容,详细阐述技术架构、业务流程、数据库设计及开发技巧,并提供完整代码示例,助力企业构建稳定、可扩展的商品数据系统。
|
27天前
|
数据采集 机器学习/深度学习 搜索推荐
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
MIT与丰田研究院研究发现,扩散模型的“局部性”并非源于网络架构的精巧设计,而是自然图像统计规律的产物。通过线性模型仅学习像素相关性,即可复现U-Net般的局部敏感模式,揭示数据本身蕴含生成“魔法”。
98 3
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
|
21天前
|
传感器 人工智能 监控
数据下田,庄稼不“瞎种”——聊聊大数据如何帮农业提效
数据下田,庄稼不“瞎种”——聊聊大数据如何帮农业提效
100 14
|
1月前
|
机器学习/深度学习 传感器 监控
吃得安心靠数据?聊聊用大数据盯紧咱们的餐桌安全
吃得安心靠数据?聊聊用大数据盯紧咱们的餐桌安全
64 1
|
1月前
|
JSON 供应链 监控
1688商品详情API技术深度解析:从接口架构到数据融合实战
1688商品详情API(item_get接口)可通过商品ID获取标题、价格、库存、SKU等核心数据,适用于价格监控、供应链管理等场景。支持JSON格式返回,需企业认证。Python示例展示如何调用接口获取商品信息。
|
1月前
|
数据采集 自动驾驶 机器人
数据喂得好,机器人才能学得快:大数据对智能机器人训练的真正影响
数据喂得好,机器人才能学得快:大数据对智能机器人训练的真正影响
101 1
|
2月前
|
机器学习/深度学习 监控 大数据
数据当“安全带”:金融市场如何用大数据玩转风险控制?
数据当“安全带”:金融市场如何用大数据玩转风险控制?
103 10
|
1月前
|
存储 分布式计算 资源调度
【赵渝强老师】阿里云大数据MaxCompute的体系架构
阿里云MaxCompute是快速、全托管的EB级数据仓库解决方案,适用于离线计算场景。它由计算与存储层、逻辑层、接入层和客户端四部分组成,支持多种计算任务的统一调度与管理。
139 1
|
2月前
|
机器学习/深度学习 自然语言处理 监控
大数据如何影响新兴市场投资决策?——数据才是真正的风向标
大数据如何影响新兴市场投资决策?——数据才是真正的风向标
62 3

热门文章

最新文章

下一篇
oss教程