携程数据报表平台查询效率治理实践

  本文概述了面对公司数据报表平台遇到的查询性能挑战,数据平台组围绕数据缓存、物化视图、查询策略、SQL质量等方向所做的一系列治理工作,以提升平台的查询效率和稳定性。通过这些工作,平台的查询响应时间得到了显著的改善,其中平均响应时间从原来的8秒降低至4秒,响应时间90线由原先的约18秒降低至约8秒,总体性能指标提升幅度达50%以上。本文在各个小节中对各治理策略的关键原理和思路进行了阐述,希望能够为读者提供一定的参考和启发。

   一、背景

  数据报表平台(代称Nova,后同)用于支持携程内部数据分析、数据挖掘、数据可视化等业务需求,目前每日承载数十万Hive表AP查询,所涉数据量达万亿级别。随着用户基数逐步提升,承载查询量不断增大,平台查询性能面临挑战,具体表现如下:

  1)平均响应时间延长,大查询在业务高峰期存在阻塞现象,超时数量增多;

  2)查询所需时间不稳定,性能波动较大,在业务高峰期可能出现响应时间突增现象;

  3)查询负载集群资源占用率高,CPU、内存资源吃紧,I/O 请求排队等待,进而导致集群稳定性下降,时有节点宕机现象出现。

  针对上述现象,我们从平台自身服务、SQL路由分发组件、SQL执行引擎等方面入手,采用了一套“全方位组合拳”对平台的查询性能进行治理,目标有二:

  1)从用户体验角度:改善查询性能,提升查询效率和稳定性;

  2)从集群维护角度:提升集群稳定性,增强查询结果复用能力,提高算力使用效率。

   二、平台设计概览

  数据报表平台执行查询的主要链路如图1所示,其中有几个关键构件:  

图1:Nova 数据查询链路

  1)Nova:应用本体,提供可视化用户界面,包含报表即时查询、执行离线定时任务等功能;

  2)Router:用于分离指向不同引擎的查询请求,起到SQL路由功能;

  3)Starrocks & Hive:平台使用Starrocks作为主要查询引擎,向Hive外表发起查询请求。

   三、多维度数据缓存

  在硬件资源有限的情况下,要提升查询性能,最直观的思想是对重复的查询进行结果复用。在对平台的查询请求数据进行统计分析后,可发现存在相当数量的查询请求在不同时段内重复出现,这为我们引入缓存机制提供了实践基础。

  若将在执行过程中可能遭遇瓶颈的查询进行划分,可将大致分为I/O型、计算型和高频型三类,其中I/O型查询对网络和磁盘带宽的要求较高,往往涉及大规模数据的扫描;计算型查询对CPU和内存资源的要求较高,往往涉及大量连接、分组、聚合、筛选、再计算操作;高频型查询的单次调用开销可能较小,但在单位时间内发起的次数显著高于均值,在涉及远程调用(如元数据获取)的环节可能遭遇性能瓶颈,且在单位时间造成的资源开销可能与大查询相当。  

图2:受限查询分类

  目前,在整个数据查询链路中,我们在以下几个环节引入了缓存机制,以应对不同类型查询所带来的挑战。

  3.1 底表Data Cache预热

  当Starrocks从Hive外表进行数据查询时,Scan算子会将所需数据文件以块的形式读取至本地。对于典型的I/O型查询而言,这个过程所需时间可达整个查询流程耗时的70%以上。在业务高峰期,由于大量查询请求同时发起,I/O型查询的堆积将导致其他查询请求读取数据文件的等待时间增长,进而影响查询响应时间。

  针对这类情况,我们在Starrocks集群中开启了Data Cache,将每次读取得到的文件块标识并临时存储在本地磁盘中,在下次查询请求需要相同文件块时,若发现该文件块没有更新,则直接从本地磁盘读取,避免了经由网络和Hive带来的文件读取延迟。

  通过Data Cache缓存的文件块在Starrocks中由带冷热分区的LRU队列维护,当队列满时,将根据文件块的访问频率和时间戳进行淘汰,以保证缓存的命中率。

  从缓存一致性角度,Starrocks在使用Data Cache时,会通过元数据判断底表数据是否发生更新,若发现数据文件已更新,则将废弃缓存数据,重新拉取底表数据文件,以保证查询结果的准确性。

  3.1.1 预热机制

  通过对查询请求命中底表的情况进行统计,可发现其中热点表的使用呈现一定的规律性(如:每日相近时刻、每周固定几日访问量达峰等)。为此,我们为统计得到的各热点表建立了用户画像,记录并预测其访问高峰。  

图3:预热机制

  通过在业务高峰到来前将热点表数据主动Cache预热,可进一步分散业务高峰期的I/O压力。如图4 所示,这部分主动指定Cache的数据文件将会优

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隔窗听雨眠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值