加载中

在优步,实时数据分析使我们能够获得业务洞察力和运营效率,使我们能够制定数据驱动的决策,以改善优步平台的体验。 例如,我们的运营团队依靠数据来监控市场健康状况并发现我们平台上的潜在问题; 通过机器学习模型驱动的软件,利用数据来预测骑手的供应和驾驶员的需求; 并且数据科学家使用数据来改进机器学习模型,以便更好地进行预测。

过去,我们使用了许多第三方数据库解决方案进行实时数据分析,但没有一个能够同时满足我们的所有功能,可扩展性,性能,成本和运营要求。

tsingkuo2019
tsingkuo2019
翻译于 2019/02/25 10:17
2

在2018年11月发布的开源的实时分析引擎AresDB 能够规模化的增长我们的分析能力,AresDB使用的是非常规的计算源,显卡计算单元(GPUs)。近年来重点值得关注的新型实时分析技术GPU技术非常适合实时分析计算和并行数据处理。

在接下来的章节中,我们描述AresDB 的设计以及实时分析引擎怎么高效的解决实时分析问题,让我们的实时分析引擎更直接和有效统一,简单并且提升Uber的实时分析数据库解决方案的价值。通过阅读本文,希望读者能够在自己的项目中使用我们的AresDB,并且希望AresDB 能够在你的分析需求中提供帮助。

死宅IT猫
翻译于 2019/02/12 16:10
2

优步的实时数据分析应用程序

数据分析对优步的业务成功至关重要。在其他功能中,这些分析用于:

  • 构建仪表盘来监控我们的业务指标

  • 根据我们收集的汇总数据做出自动决策(例如,旅行价格发现欺诈

  • 进行随机查询以诊断和解决业务运营问题

我们可以将这些功能概括为具有不同要求的类别,如下所示:

  仪表盘 决策系统 随机查询
查询模式 众所周知 众所周知 随机
查询率
查询延迟
数据集 子集 子集 所有数据

仪表板和决策系统利用实时分析系统,在高QPS和低延迟的情况下,通过相对较小但非常有价值的数据子集(具有最大数据新鲜度)进行类似查询。

tsingkuo2019
tsingkuo2019
翻译于 2019/03/01 10:24
1

分析引擎的必要性

在Uber,实时分析解决的最常见问题是如何计算时间序列的总和,这些计算让我们能够洞察用户体验,从而相应地改善我们的服务。通过这些计算,我们可以在任意过滤(或有时加入)的数据上按时间范围内的特定维度(如日、小时、城市ID和旅行状态)计算指标。多年来,Uber已经部署了多种解决方案,以不同的方式解决这个问题。

x
xianyi_f
翻译于 2019/02/19 17:08
1

我们使用的一些第三方解决方案包括:

  • Apache Pinot是一个用Java编写的开源分布式分析数据库,可以用于大规模的数据分析。Pinot内部使用lambda架构来查询列式存储中的批处理数据和实时数据,使用反向位图索引进行过滤,并依赖星形树进行聚合结果缓存。但是,它不支持基于键的重复数据删除、upsert、连接和高级查询功能,如地理空间过滤。此外,作为基于jvm的数据库,在Pinot上执行查询的内存使用成本更高。
  • Elasticsearch 被Uber用于各种流数据分析需求。它是基于Apache Lucene构建的,用于存储文档和反向索引的全文关键字搜索。它已被广泛采用并扩展到支持聚合。反向索引支持过滤,但没有针对基于时间范围的存储和过滤进行优化。它将记录存储为JSON文档,增加了额外的存储和查询访问开销。与Pinot一样,Elasticsearch是一个基于jvm的数据库,因此不支持连接,其查询执行的内存成本较高。

虽然这些技术有它们自己的优势,但是它们缺少我们用例的关键功能。我们需要一个统一的、简化的和优化的解决方案,并从框架之外(或者更确切地说,从GPU内部)进行思考以获得解决方案。

雪落无痕xdj
翻译于 2019/03/03 13:20
1

利用GPU进行实时分析

为了以高帧速率呈现图像的真实视图,GPU以高速并行处理大量几何图形和像素。在过去的几年中,处理器的时钟频率增长已经趋于平稳,而芯片上晶体管的数量按照摩尔定律递增。因此,以每秒十亿次浮点数(GFLOP/s)衡量的GPU计算速度正在迅速提高。下面的图1描述了多年来NVIDIA GPU和Intel CPU的GFLOP/s理论趋势:

图1:历年CPU与GPU单精度浮点性能对比。图片取自英伟达的《CUDA C编程指南》。

雪落无痕xdj
翻译于 2019/03/03 13:26
1

在设计我们的实时分析查询引擎时,集成GPU处理是一个自然的选择。在优步,典型的实时分析查询需要处理几天内的数百万到数十亿条记录数据,然后在很短的时间内进行过滤和汇总。该计算任务非常适合通用GPU的并行处理模型,因为:

  • 并行处理数据非常快。
  • 提供更大的计算吞吐量(GFLOPS/s),使其非常适合于可并行化的繁重计算任务(单位数据)。
  • 与中央处理器(CPU)相比,提供更大的计算到存储(ALU到GPU全局内存)数据访问吞吐量(而不是延迟),这使得它们非常适合处理需要大量数据的I/O(内存)绑定的并行任务。
雪落无痕xdj
翻译于 2019/03/03 13:29
1

当我们决定使用基于GPU的分析数据库时,我们评估了一些利用GPU满足我们需求的现有分析解决方案:

  • Kinetica是一个基于GPU的分析引擎,最初于2009年面向美国军事和情报应用市场。虽然它展示了GPU技术在分析方面的巨大潜力,但是我们发现我们的用例遗漏了许多关键特性,包括模式更改、部分插入或更新、数据压缩、列级内存/磁盘保留配置,以及通过地理空间关系连接。
  • OmniSci,一个开源的,基于SQL的查询引擎,看起来是一个很有前途的选择,但是当我们对产品进行评估时,我们意识到它对于Uber的用例来说并没有关键的特性,比如重复数据删除。虽然OminiSci2017年开源了他们的项目,但在对他们基于c++的解决方案进行了一些分析之后,我们得出结论,无论是反馈还是分叉他们的代码库都是不可行的。
  • 基于GPU的实时分析引擎,包括GPUQPCoGaDBGPUDBOcelotOmniDBVirginian,经常被学术机构使用。然而,考虑到它们的学术目的,这些解决方案侧重于开发算法和设计概念的证明,而不是处理实际的生产场景。因此,我们根据我们的范围和规模对它们进行了折中。

总的来说,这些引擎展示了使用GPU技术进行数据处理的巨大优势和潜力,并激励我们根据Uber的需求构建自己的基于GPU的实时分析解决方案。考虑到这些因素,我们构建并开源了AresDB。

雪落无痕xdj
翻译于 2019/03/03 13:36
1

AresDB体系结构概述

在较高的级别上,AresDB将其大部分数据存储在主机内存(连接到CPU的RAM)中,使用CPU处理数据提取并通过磁盘进行数据恢复。在查询时,AresDB将数据从主机内存传输到GPU内存,以便在GPU上进行并行处理。如下面的图2所示,AresDB由一个内存存储、一个元数据存储和一个磁盘存储组成:

图2:AresDB单实例架构的特点是内存和磁盘存储,以及元数据存储。

雪落无痕xdj
翻译于 2019/03/03 13:39
1

与大多数关系数据库管理系统(RDBMS)不同,AresDB中没有数据库或模式作用域。所有表都属于相同AresDB集群/实例中的相同范围,使用户能够直接引用它们。用户将数据存储为事实表和维度表。

事实表

事实表存储时间序列事件的无限流。用户使用事实表来存储实时发生的事件/事实,并且每个事件都与一个事件时间相关联,经常通过事件时间查询表。事实表存储的信息类型的一个示例是trips,其中每个trip都是一个事件,而trip请求时间通常指定为事件时间。如果一个事件有多个与之关联的时间戳,则只有一个时间戳被指定为事实表中显示的事件的时间。

维度表

维度表存储实体(包括城市、客户端和驱动程序)的当前属性。例如,用户可以在维度表中存储城市信息,例如城市名称、时区和国家。与随时间无限增长的事实表相比,维度表总是受大小的限制(例如,对于Uber来说,城市表受世界上实际城市数量的限制)。维度表不需要特殊的时间列。

雪落无痕xdj
翻译于 2019/03/03 13:43
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(0)

返回顶部
顶部