使用presto和alluxio在aws上搭建高性能平台来支持实时游戏服务(代码片段)

Alluxio Alluxio     2022-12-07     352

关键词:

概要速览

美国艺电 (EA) 是游戏行业的翘楚,每年为全球几十亿用户提供数十款游戏。能否针对EA的在线服务做出近实时决策对于业务发展至关重要。本文介绍了在AWS上搭建的基于Presto和Alluxio的数据平台,如何为游戏产业提供即时响应的在线服务。

EA的数据与人工智能部门搭建了数百个平台,来管理游戏和用户每天产生的PB级数据。这些平台包含从实时数据导入到 ETL工作流在内的各类数据分析作业。部门产生的格式化数据已经被公司高管、制作人、产品经理、游戏工程师和设计师等广泛采纳,用于市场营销和货币化、游戏设计以及提升客户参与度、玩家留存率和终端用户体验。

用例

EA的在线服务需要能够获取近实时信息,这对于制定业务相关的决策(如推广活动和故障排查)至关重要。这些服务包括但不限于实时数据可视化、仪表板(dashboarding) 和会话分析,我们的团队正在积极寻找可以支持这些用例的框架。

在EA,为获取支持决策的数据分析结果,我们采用了诸如 Tableau 和 Dundas等一系列的数据可视化工具。这些工具通常连接多个数据源,例如 MySQL DB、AWS S3 或 HDFS。用户可能同时从多个数据源加载数据来运行计算复杂度较高的算法。由于数据加载是 I/O 密集型的,因此可能成为严重的性能瓶颈。尤其当相同的数据需要被多次加载时,性能瓶颈问题可能更严重。因此,我们需要一种解决方案,通过在本地缓存数据的方式来降低数据的访问开销。

仪表板是另一个常见的用例,用于实时追踪用户参与度、客户满意度或系统状态。在这些场景下,数据量通常是GB级的,但需要能够对频繁的信息刷新进行即时处理。目前,我们使用Redshift等商业数据库来处理时间敏感型数据,希望寻求一种在不降低性能的情况下削减成本的替代方案。

我们最近开发了一款汇报式聊天机器人,来提供即时的游戏相关分析,例如实时用户满意度和实时利润分析。该系统的后端运行 Presto,PB级的数据存储在 S3 上。聊天机器人会将用户的提问转换为 ANSI SQL查询语句,并在 Presto 集群上运行这些查询。查询通常会涉及复杂的计算过程,例如在跨数据集搜索后进行预测和合并。我们迫切希望找到一种解决方案,与基于S3存储的数据集互补,确保在不增加成本的情况下提高性能。

架构

为了服务这些具有近实时需求的不同用例,我们搭建并评估了以Presto为查询引擎,S3为数据存储,Alluxio为作业数据集缓存层的数据平台。文中,我们模拟了上述在当前生产环境中搭建的基于S3的 Presto(没有Alluxio)架构,与环境设置(Presto和S3)相同但部署了Alluxio的技术方案进行比较。架构如下图所示:

关于设置的具体信息如下:

√ 每个实例启动并置的Presto 和Alluxio服务。

√ 硬件方面,我们使用了三个 h1.8xlarge AWS 实例,每个实例上都挂载了 8TB 临时磁盘,供Alluxio把数据缓存到Presto 的本地位置。

S3 作为底层持久文件系统挂载到Alluxio。

√ Presto 配置了两个目录;一个连接到我们现有的 Hive metastore,关联到存储在外部S3 上的基准测试数据集,另一个连接到一个单独的Hive metastore,其中包含在 Alluxio 中创建的基准测试数据表。

√ 我们在 S3 上使用相同的数据集进行性能比较,并通过 alluxio fs distributedLoad /testDB指令将数据预加载到 Alluxio。

√ 为了提升处理海量小文件时的查询性能,我们在alluxio-site.properties 中启用了元数据缓存功能来进行性能调优。

alluxio.user.metadata.cache.enabled=true

alluxio.user.metadata.cache.max.size=100000

alluxio.user.metadata.cache.expiration.time=10min

基准测试结果

我们选取了代表各类工作负载的四个独立基准测试。基线(baseline)是 Presto 直接查询 S3 时的性能。

基准测试1

测试1是我们对玩家在游戏中事件的内部合成快照,代表 I/O 密集型用例。测试的三个数据集的总数据大小分别为 1GB、10GB 和 100GB,文件为 ORC 格式。每个数据集都是使用相同的 DDL 创建的,包含 49 个 cols(列)、40 个 varchar、5个布尔值和 4个映射。基准测试查询选取所有列以及针对一个varchar 字段的过滤条件。

结果

使用Alluxio缓存数据后,Presto 的性能比基线直接查询S3时的性能快 2 ~ 7倍。

基准测试2

使用游戏元数据和用户参与记录模拟数据可视化。这是一个典型的CPU 和 I/O 密集型查询。我们一共选用了两组数据集和两个查询,分别是Tableau 和 Dundas 中的常用查询,查询选择所有符合日期过滤条件的列,然后对日期字段进行 GROUP BY 和 ORDER BY操作。在这个测试中,我们特意禁用了(已显示出卓越性能提升的)Alluxio元数据缓存功能,以便了解数据缓存在这里起到的作用。

结果

在没有元数据缓存的情况下,在Dundas数据集上使用Alluxio的Presto查询速度比S3快2.75倍,在 Tableau数据集上比S3快 5.1 倍。

基准测试3

使用包含海量小文件的数据集来模拟我们的仪表板用例。数据集是一批 2MB 的文件,总数分别是50、500 和 5000 个文件。使用的查询是聚合每个日期条目数的select查询。

结果

使用元数据缓存功能的Alluxio比 S3 快 1.2 ~ 5.9 倍。如果不启用元数据缓存,Alluxio 实现的性能提速仅为 1 ~1.35 倍。启用元数据缓存可通过记忆元数据、识别热数据和增加副本来显著缩短执行时间。

基准测试4

模拟对话机器人,使用的数据集是每日游戏性能的快照。为模拟 CPU 密集型查询,该查询包含多个计算阶段,将整数字段( integer field) 转换为 HyperLogLog,然后合并, 再选择基数,最后将integer和 varchar 字段作为过滤条件得出结果。

结果

不使用元数据缓存的 Alluxio 可以将查询时间从 85.2 秒缩短到 3 秒,性能提高了 27 倍。

结论

本文探讨了一个支持游戏行业的在线服务即时响应的创新平台,平台使用 Presto 作为计算引擎,把Alluxio 作为 Presto 和 S3 存储之间的数据编排层。我们通过数据可视化、仪表板和会话聊天机器人三个真实行业案例对该平台进行性能评估。

初步测试结果表明, Presto+Alluxio 的部署在所有情况下的性能都显著优于 S3。特别是当Alluxio启用元数据缓存功能后在处理海量小文件时更是实现了高达 5.9 倍的性能提升。Alluxio 通过管理所分配的临时磁盘,将S3中的数据缓存到 Presto的本地位置,从而实现存储和计算的分离。在测试的每个场景中,我们可以观察到性能提升主要得益于Alluxio的高级缓存管理能力,能够针对数据的冷热程度来区别化创建不同数量的副本。

文章作者:

Teng Wang, Du Li, Yu Jin and Sundeep Narravula

原文发表于2020年8月6日

金山云团队分享|5000字读懂presto如何与alluxio搭配

...队(赵侃、李金辉)在交互查询场景下对Presto与Alluxio相结合进行了一系列测试,并总结了一些Presto搭配Alluxio使用的建议。本次测试未使用对象存储,计算引擎与存储间的网络延时也比较低。如果存储IO耗时和网络... 查看详情

uber实战案例:基于alluxio实现presto缓存

01Uber的业务场景如上图所示,在Uber,所有的决策都与数据有关。Presto以及其他各种查询引擎在Uber是被广泛使用的。例如,运营团队在Dashboard等服务中大量使用了Presto,而UberEats和市场团队也依赖于这些查询结果来... 查看详情

揭秘presto+alluxio的n个核心“黑魔法“

揭秘Presto+Alluxio的N个核心"黑魔法"Prestocommitter教你构建海量数据OLAP查询引擎活动回顾活动回顾:在探索Alluxio系列活动中,Alluxio的资深软件工程师王北南博士,为我们介绍讲述了Presto+Alluxio构建大规模... 查看详情

meta公司新探索|利用alluxio数据缓存降低presto延迟(代码片段)

目录概要速览Presto架构Presto+数据缓存架构软亲和调度数据缓存本地缓存的内部构成和配置基本缓存单元缓存位置和层级线程并发缓存恢复监控基准测试开销节省节省的扫描数据量:57%缓存命中率如何使用?其他有用的... 查看详情

alluxio为presto赋能跨云的自助服务能力

...数据平台的考虑因素结论本文重点介绍两大流行开源项目Alluxio 和 Presto之间的协同作用,并展示如何利用两者实现跨云自助服务数据架构。作者介绍范斌 AlluxioVPOpenSourceandFoundingMemberAditMadan AlluxioSeniorProductManagerJasmineWang  查看详情

alluxio为presto赋能跨云的自助服务能力

...数据平台的考虑因素结论本文重点介绍两大流行开源项目Alluxio 和 Presto之间的协同作用,并展示如何利用两者实现跨云自助服务数据架构。作者介绍范斌 AlluxioVPOpenSourceandFoundingMemberAditMadan AlluxioSeniorProductManagerJasmineWang  查看详情

prestoiceberg数据源+alluxio使用以及最新进展介绍

本文来自Alluxio在2021年11月27日举办的《【Iceberg+Alluxio】助力加速数据通道》在线会议。分享者为王北南和shouweichen。本次分享主要分两部分:•Alluxio和Iceberg的简介;•PrestoIceberg数据源+Alluxio使用介绍以及最新进展... 查看详情

b站presto+alluxio:b站数据库系统性能提升实践

...一问题,B站做了诸多的实践探索,采用Presto搭配Alluxio的模式来提 查看详情

认识一下mrs里的“中间人”alluxio

摘要:Alluxio在mrs的数据处理生态中处于计算和存储之间,为上层spark、presto、mapredue、hive计算框架提供了数据抽象层,计算框架可以通过统一的客户端api和全局命名空间访问底层的存储系统,并切提供内存级的I/O... 查看详情

meta(facebook):基于alluxioshadowcache优化presto架构决策

...支持标准的ANSISQL.包含查询、聚合、JOIN以及窗口函数等。Alluxio将其在数据层的创新作为Presto和各种分析应用程序和用例的关键支持技术。它创建了一个虚拟数据层,可以聚合来自任何文件或对象存储的数据,提供跨存储... 查看详情

meta(facebook):基于alluxioshadowcache优化presto架构决策

...支持标准的ANSISQL.包含查询、聚合、JOIN以及窗口函数等。Alluxio将其在数据层的创新作为Presto和各种分析应用程序和用例的关键支持技术。它创建了一个虚拟数据层,可以聚合来自任何文件或对象存储的数据,提供跨存储... 查看详情

alluxio2022技术干货年终大赏

...很多嘉宾参与了我们的社区直播活动17场主题活动(AlluxioDay、Meetup、DatafunSummit等)44位嘉宾44个主题(来自一线大厂的实战者)2000+分钟的分享时长(内容涵盖【金融】【互联网&科技】【大数据】【通信... 查看详情

alluxio架构场景与部分配置参数详解(代码片段)

Alluxio架构、场景与部分配置参数Alluxio:架构及数据流-简书(jianshu.com)Alluxio-基于内存的虚拟分布式存储系统_机器爱上学习的博客-CSDN博客_alluxio1架构1.1概述​Alluxio作为大数据和机器学习生态系统中的一个新的数据访问层࿰... 查看详情

b站presto+alluxio:b站数据库系统性能提升实践

...一问题,B站做了诸多的实践探索,采用Presto搭配Alluxio的模式来提高系统性能,具体的探索内容将从以下4个维度进行分享:内容概览:B站离线集群架构>>B站SQLOnHadoop的架构,整体包含5个部分:最上... 查看详情

使用 HDFS RAMDisk 和 Alluxio 有啥区别?

】使用HDFSRAMDisk和Alluxio有啥区别?【英文标题】:What\'sthedifferencebetweenusingHDFSRAMDiskandAlluxio?使用HDFSRAMDisk和Alluxio有什么区别?【发布时间】:2018-12-2805:16:30【问题描述】:既然HDFS支持RAMDisk,那么使用Alluxio有什么好处。在我们的... 查看详情

如何借力alluxio推动大数据产品性能提升与成本优化?

...存算分离将存储系统和计算框架拆分为独立的模块,Alluxio作为如今主流云数据编排软件之一,为计算型应用(如ApacheSpark、Presto)和存储系统(如AmazonS3、AlibabaOSS)的数据访问构建了桥梁。本文使用亚马逊... 查看详情

Presto (AWS Athena) 中的拆分和搜索逗号分隔列

】Presto(AWSAthena)中的拆分和搜索逗号分隔列【英文标题】:SplitandsearchcommaseparatedcolumninPresto(AWSAthena)【发布时间】:2020-02-1420:36:25【问题描述】:我有下表my_table,其中两列都是字符串-+------------+-------------+|user_id|code|+------------+---... 查看详情

在presto中使用一致性哈希来改善动态集群的缓存命中率

目前,越来越多的用户开始在Presto里面使用Alluxio,它通过利用SSD或内存在Prestoworkers上缓存热数据集,避免从远程存储读取数据。Presto支持基于哈希的软亲和调度(hash-basedsoftaffinityscheduling),强制在整个... 查看详情