【大数据】Uber的数据架构

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
2月前
|
消息中间件 存储 缓存
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
56 8
|
2月前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
396 7
|
2月前
|
数据采集 搜索推荐 数据管理
数据架构 CDP 是什么?
数据架构 CDP 是什么?
67 2
|
2月前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
57 2
|
2月前
|
大数据
【赵渝强老师】大数据主从架构的单点故障
大数据体系架构中,核心组件采用主从架构,存在单点故障问题。为提高系统可用性,需实现高可用(HA)架构,通常借助ZooKeeper来实现。ZooKeeper提供配置维护、分布式同步等功能,确保集群稳定运行。下图展示了基于ZooKeeper的HDFS HA架构。
|
11天前
|
存储 SQL 分布式计算
大数据时代的引擎:大数据架构随记
大数据架构通常分为四层:数据采集层、数据存储层、数据计算层和数据应用层。数据采集层负责从各种源采集、清洗和转换数据,常用技术包括Flume、Sqoop和Logstash+Filebeat。数据存储层管理数据的持久性和组织,常用技术有Hadoop HDFS、HBase和Elasticsearch。数据计算层处理大规模数据集,支持离线和在线计算,如Spark SQL、Flink等。数据应用层将结果可视化或提供给第三方应用,常用工具为Tableau、Zeppelin和Superset。
151 8
|
2月前
|
SQL 数据采集 分布式计算
【赵渝强老师】基于大数据组件的平台架构
本文介绍了大数据平台的总体架构及各层的功能。大数据平台架构分为五层:数据源层、数据采集层、大数据平台层、数据仓库层和应用层。其中,大数据平台层为核心,负责数据的存储和计算,支持离线和实时数据处理。数据仓库层则基于大数据平台构建数据模型,应用层则利用这些模型实现具体的应用场景。文中还提供了Lambda和Kappa架构的视频讲解。
221 3
【赵渝强老师】基于大数据组件的平台架构
|
2月前
|
机器学习/深度学习 存储 大数据
在大数据时代,高维数据处理成为难题,主成分分析(PCA)作为一种有效的数据降维技术,通过线性变换将数据投影到新的坐标系
在大数据时代,高维数据处理成为难题,主成分分析(PCA)作为一种有效的数据降维技术,通过线性变换将数据投影到新的坐标系,保留最大方差信息,实现数据压缩、去噪及可视化。本文详解PCA原理、步骤及其Python实现,探讨其在图像压缩、特征提取等领域的应用,并指出使用时的注意事项,旨在帮助读者掌握这一强大工具。
87 4
|
11天前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
28 0
|
2月前
|
存储 大数据 数据管理
大数据分区简化数据维护
大数据分区简化数据维护
25 4

热门文章

最新文章