对 Uber 来讲,2019 是繁忙的一年,包括:迎来了第十亿单 Uber 外卖订单;在平台上,自行车和两轮电动车的外卖骑手覆盖了 2400 万英里;以及前往帝国大厦、埃菲尔铁塔和金门大桥等热门景点的旅行。然而,在全部这些活动的背后,都有一个关于数据的故事,以及咱们为支持平台服务而对数据基础设施进行的创新。数据库
在咱们现有的规模和全球范围内,对 Uber 平台的全天候支持意味着高达数拍字节(petabytes,PB)级别的数据在咱们的基础设施中流动。咱们不只要使用这些数据向人们展现外卖骑手的位置或 最新的餐厅菜单,还要不断分析汇总的、匿名的趋势以了解咱们的服务在哪些方面还能够运行得更顺畅。网络
译注:拍字节或拍它字节(Petabyte、PB)是一种信息计量单位,现今一般在标示网络硬盘总容量,或具备大容量的保存媒介之保存容量时使用。1PB = 1,000 TB (兆) = 1,000,000 GB (十亿),因此中文的全称是:1 千兆。app
咱们发现一个颇有但愿提升效率的领域是,将 数据科学 的实践应用到咱们的基础设施中,使咱们可以计算最优的数据存储和硬件使用率。为了更好地管理咱们数据,在持续增加的状况下,可以保持数据的新鲜度和质量,为此,咱们在内部启动了新项目。咱们创建了一个新的分析平台,这样,咱们就能够在短短几秒钟内得到关键的业务洞见。less
虽然这些项目并不是咱们 2019 年数据平台工做的所有,但它们表明了关键的冰山一角。分布式
利用数据科学优化数据平台ide
创建有效的数据基础设施远不止是创建数据库并向其填充数据那么简单。对于咱们的一些用例,天天每时每刻都有新的数据出现,记录须要不断地更新。而在其余状况下,数据到达的节奏较慢,须要的更新也较少。一样,咱们的一些分析须要实时数据,而另外一些分析则依赖于历史数据模式。函数
这些不一样的用例为经过数据科学、计算成本函数和其余肯定数据最佳存储方式的方法进行优化打开了大门。在 一个这样的优化项目 中,咱们的数据科学和数据仓库团队一块儿分析了数据仓库中表的效用,肯定哪些表须要对咱们的低延迟分析引擎中保持可用,哪些表能够转移到成本较低的选项上。oop
咱们的数据科学家开发的模型考虑了各类因素,如查询的数量和单个表的用户数量、维护成本以及表之间的依赖关系等。卸载低效用的特定表可使数据库成本下降 30%,咱们的团队目前正在考虑如何应用人工智能来进一步推动这项工做。大数据
一样,咱们的团队也在考虑如何 优化 Vertica,这是 Uber 正在使用的一个流行的交互式数据分析平台。随着咱们需求的发展,最直接的解决方案将涉及在咱们的基础设施中复制 Vertica 集群。可是,这种解决方案并不具备成本效益。优化
取而代之的是,咱们设计了一种方法来部分复制 Vertica 集群,以更有效的方式在它们之间分发数据。咱们的数据科学团队提出了一个成本函数,用于展现部分复制是如何工做的,而数据仓库团队构建了组件来让解决方案在生产环境中实现无缝工做。这个解决方案可以显著下降 30% 以上的整体磁盘使用量,同时继续提供相同级别的计算可伸缩性和数据库可用性。
在咱们这种规模的数据基础设施中,即便是很小的优化也能够带来巨大的收益,在加快查询速度的同时须要更少的资源,并最终使 Uber 的服务运行更加平稳。
数据管理
为多个不一样的业务线提供服务,如促进承运人和托运人之间货物运输的 Uber Freight,以及链接骑手、餐厅和食客的 Uber Eats 外卖系统,一样也须要不一样的数据。理解数据的整个生命周期,从数据的来源、各类转换到最终目的地,对于保证数据质量和保真度都是相当重要的。
咱们的内部产品 uLineage,能够追踪数据的来源、去向和转换方式。这个综合系统从数据经过 Uber 服务进入的那一刻起,当数据由 Apache Kafka 传输时,以及当数据存储在 Apache Hive 中时,都会维护信息。uLineage 传播数据新鲜度和质量信息,同时支持高级搜索和图形设置。
图 1,uLineage 展现了一段数据所在的存储区及其所经历的转换
咱们还 为大型 Apache Hadoop 表启动了一个全局索引,这是咱们的大数据基础设施的另外一部分,范围虽然更有限,但对咱们的运营来讲具备同等价值。咱们的全局索引充当簿记组件(bookkeeping component),显示存储特定数据片断的服务,以便它们能够进行更新或显示查询结果。将 Apache HBase(一种非关系型分布式数据库)做为全局索引,能够确保高吞吐量、强一致性和水平伸缩性。
咱们为 Apache Hadoop 数据湖构建了另外一个组件:DBEvents,做为变动数据捕获系统。咱们围绕三个原则来设计 DBEvents:数据新鲜度、数据质量和效率。DBEvents 在从 MySQL、Apache Cassandra 和 Schemaless 等来源获取数据期间捕捉数据,从而更新咱们的 Hadoop 数据湖。这个解决方案经过标准化的变动日志来管理拍字节级的数据,确保服务对可用数据有着统一的理解。
高效分析经过咱们的平台或任何其余服务来分析有关拼车、自行车和两轮电动车骑行的数据,既能够排除故障,又能够主动改进。例如,若是数据显示客户等待骑手的时间,比等待司机伙伴的平均时间还要长,咱们就能够实时分析问题,看看咱们的运营团队是否可以提供帮助。咱们还能够分析有关咱们服务的历史数据,并开发新的功能来改进它们,例如,让乘客更容易在拥挤的接送区域找到司机伙伴。
图 2:咱们新的分析平台为内部用户提供了基于实时数据的业务关键洞见
咱们对及时且可用的分析需求,促使咱们构建了一个新的平台,该平台目前支持多个关键业务级仪表板提供支持。这个平台的仪表板如图 2 所示,它将现有的实时分析系统(包括 AresDB 和 Apache Pinot)整合到一个统一的自助平台中,容许内部分析用户经过 Presto 提交查询,Presto 是一个 由咱们的工程师支持 的开源分布式 SQL 查询引擎。
因为对 SQL 查询的支持,新平台还使咱们的内部用户可以更容易地进行数据分析,从而做出关键业务决策。一样重要的是,它还可以以低延迟来交付结果,让咱们可以快速处理问题。
为将来而建
维护一个可靠支持质量和新鲜度的数据基础设施是 Uber 将来的重要组成部分。数据必须尽量准确、及时,以支持咱们平台上的服务。过去几年来,咱们一直努力构建能够扩至咱们全球全天候运营的基础设施。咱们当前工做的一个关键部分是,使咱们的基础设施高效运行,并支持咱们全部的内部用户。
咱们的工程师在 2019 年取得了巨大的进步,远远超过本文记载的部分。咱们期待在新的一年里,可以进一步优化咱们的数据基础设施,让 Uber 的平台服务更上一层楼。