Hologres揭秘:高性能原生加速MaxCompute核心原理

简介:Hologres技术揭秘系列持续更新中,本期咱们将带来Hologres高性能原生加速查询MaxCompute的技术原理解析。

Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼容PostgreSQL协议并与大数据生态无缝打通,能用同一套数据架构同时支持实时写入实时查询以及实时离线联邦分析。它的出现简化了业务的架构,与此同时为业务提供实时决策的能力,让大数据发挥出更大的商业价值。从阿里集团诞生到云上商业化,随着业务的发展和技术的演进,Hologres也在持续不断优化核心技术竞争力,为了让你们更加了解Hologres,咱们计划持续推出Hologres底层技术原理揭秘系列,从高性能存储引擎到高效率查询引擎,高吞吐写入到高QPS查询等,全方位解读Hologres,请你们持续关注!html

往期精彩内容:缓存

本期咱们将带来Hologres高性能原生加速查询MaxCompute的技术原理解析。网络

随着数据收集手段不断丰富,行业数据大量积累,数据规模已增加到了传统软件行业没法承载的海量数据(TB、PB、EB)级别,MaxCompute(原名ODPS)也所以应运而生,致力于批量结构化数据的存储和计算,提供海量数据仓库的解决方案及分析建模服务,是一种快速、彻底托管的EB级数据仓库解决方案。架构

Hologres在离线大数据场景上与MaxCompute自然无缝融合,无需数据导入导出就能实现加速查询MaxCompute,全兼容访问各类MaxCompute文件格式,实现对PB级离线数据的毫秒级交互式分析。而这一切的背后,都离不开Hologres背后的执行器SQE(S Query Engine),经过SQE实现对MaxCompute的Native访问,而后再结合Hologres高性能分布式执行引擎HQE的处理,达到极致性能。并发

Hologres加速查询MaxCompute主要有如下几个优点:app

  • 高性能:能够直接对MaxCompute数据加速查询,具备亚秒级响应的查询性能,在OLAP场景能够直接即席查询,知足绝大多数报表等分析场景。
  • 低成本:MaxCompute通过数年的发展,用户在MaxCompute上存储了大量数据,不须要冗余一份存储可直接进行访问;另外一方面用户能够只需将部分高性能场景的数据迁移到SSD上,报表等分析场景的数据能够存储在MaxCompute进一步下降成本。
  • 更高效:实现对MaxCompute的Native访问,无需迁移和导入数据,就能够高性能和全兼容的访问各类MaxCompute文件格式,以及Hash/Range Clustered Table等复杂表,下降用户的使用成本。

SQE 架构介绍

mc加速1.png

如上图所示是SQE的总体架构,能够看出整个架构也是很是简单。MaxCompute的数据统一存储在Pangu,当Hologres执行一条Query去加速查询MaxCompute的数据时,在Hologres端:异步

  • Hologres Frontend经过RPC向SQE Master请求获取Meta等相关信息。
  • Hologres Blackhole 经过 RPC 向 SQEExecutor 请求获取具体的数据相关信息。
  • SQE由两种角色的进程组成:
  • SQE Master负责处理Meta相关的请求,主要负责获取表、分区元数据、鉴权以及文件分片等功能。
  • SQE Executor做为SQE的核心,负责具体读取数据请求,涉及Block Cache、预读取、UDF 处理、表达式下推处理、索引处理、Metric、Meter等等功能。

MaxCompute外表引擎核心技术创新

基于SQE的架构,能作到对MaxCompute的数据高性能加速查询,主要是基于如下技术创新优点:分布式

1)抽象分布式外表高并发

结合MaxCompute的分布式特性,Hologres抽象了一个分布式的外表,来支持访问MaxCompute分布式数据。目前可支持访问跨集群的MaxCompute分布式盘古文件,并按MaxCompute计算集群就近读取。性能

2)和 MaxCompute Meta无缝互通,支持带版本的元数据缓存

SQE和MaxCompute 的 Meta 无缝互通,能够作到 Meta 和 Data 实时获取,支持经过Import Foreign Schema命令,自动同步MaxCompute的元数据到Hologres的外表,实现外表的自动建立,结构自动更新。

3)支持UDF/表达式下推

SQE 经过支持 UDF/表达式下推,来实现用户自定义的UDF计算;将表达式下推能够减小无用的数据传输带来的开销,进一步提高性能。

4)异步ORC Reader,异步prefetch

目前MaxCompute大部分数据为ORC格式,在Hologres V0.10及以上版本,Hologres更新了执行引擎,使用异步 Reader 进行更高效的异步读取,还支持异步prefetch,进一步下降读取延迟;此外Hologres支持了 IO 合并、LazyRead、Lazy Decoding 等一些列的优化技术手段,来下降在 IO 在整个查询上的延迟,以带来极致性能。

5)支持Block Cache

为了不每次读数据都用IO到文件中取,SQE一样使用BlockCache把经常使用和最近用的数据放在内存中,减小没必要要的IO,加快读的性能。在同一个节点内,经过一致性Hash实现将相同访问的数据共享一个Block Cache。 好比在Scan 场景可带来2倍以上的性能提高,大大提高查询性能。

6)常驻进程,减小调度开销

传统的进程模型等架构须要动态实时的建立进程等调度操做,带来了较大的调度开销。SQE 采用常驻进程模式,避免没必要要的调度开销,此外还能够大大提高Block Cache的命中率和有效使用率。

7)Network Shuffle,减小落盘开销

Network Shuffle须要提供一种快速且稳定的容错机制。因为Network Shuffle必须保证发送端和接收端进程同时alive才能完成数据shuffle。一样的,若是采用传统落盘的方式来进行Network Shuffle的Retry,虽然可以保证稳定性,可是可能会在Retry过程当中因为磁盘IO引入比较大的性能overhead。为了解决这个问题,咱们优化了分阶段调度来解决快速稳定的容错问题。

MaxCompute外表引擎升级到HQE

上面提到了咱们经过SQE进行加速查询MaxCompute外表,经过SQE查询时性能能够作到很好,可是和Hologres交互时中间会有一层RPC 交互,在数据量较大时网络会存在必定瓶颈。

所以咱们基于Hologres已有的能力,在Hologres V0.10及以上版本咱们对执行引擎进行了优化,支持Hologres HQE查询引擎直读MaxCompute 表,在性能上获得进一步的提高,较SQE方式读取有 30%以上的性能提高。

这主要得益于如下几个方面:

1) 节省了 SQE 和 Hologres中间 RPC 的交互,至关于节省一次数据的序列化和反序列化,在性能上获得进一步的提高。

2) 能够复用Hologres的Block Cache,这样第二次查询时无需访问存储,避免存储IO,直接从内存访问数据,更好的加速查询。

3) 能够复用已有的Filter 下推能力,减小须要处理的数据量。

4) 在底层的IO层实现了预读和Cache,更进一步加速Scan时的性能。

如下是某客户某实际在线业务查询的性能数据:

E2E运行时间 SQL Num SQE查询性能(平均响应) HQE查询性能(平均响应) 性能提高
2-10s 547 4,956 ms 2,609 ms +47.34%
10-30s 207 16,757 ms 5,457 ms +67.43%
30s以上 63 78,686 ms 12,666 ms +83.90%
Total 817 13,631 ms 4,106 ms +69.87%
执行817个SQL,整体性能提高70%,其中长 Query 提高80%以上。 说明:该优化目前已在Hologres V0.10上线,欢迎点击 查看文档使用。 # MaxCompute加速场景选择 在Hologres中加速查询MaxCompute有两种方式: 1)建立外表(数据仍是存储在MaxCompute中),性能相比在MaxCompute中查询会有2-5倍的提高 2)导入内表,性能相比外表约有10-100倍的提高 建立外表的方式其原理就是PostgreSQL中的Foreign Data Wrappers,经过外部访问接口,来访问存储在外部的数据。 建议 您使用更方便的IMPORT FOREIGN SCHEMA 方式来建立外表,能够更好的简化元数据的同步,无需关注字段类型映射等。 直接建外表并的方式其实是利用查询引擎的优化能力来提升效率的,可是没有利用到Hologres的索引能力。因此当把外表导到内表的时候,能够根据查询的方式指定内表的索引结构,经过这些索引能力带来更高的查询性能。这就是外表导入内表,内表的性能更好的缘由,能够充分发挥数仓的索引优化能力。 目前这两种方式主要对好比下:
<span class="lake-fontsize-12">场景/维度</span> <span class="lake-fontsize-12">性能</span> <span class="lake-fontsize-12">存储成本</span> <span class="lake-fontsize-12">数据量</span> <span class="lake-fontsize-12">索引</span> <span class="lake-fontsize-12">便捷性</span>
<span class="lake-fontsize-12">Hologres 内表</span> <span>很是好</span> <span>高</span><span>(SSD)</span> <span>可支持PB级</span> <span>可支持位图、聚簇等多种索引</span> <span>须要导入数据</span>
<span class="lake-fontsize-12">Hologres 外表</span> <span>较好</span> <span>低</span><span>(HDD)</span> <span>单次Query查询200GB</span><span>限制</span> <span>只支持ODPS索引</span> <span>无需迁移和导入数据</span>
从上面对比能够看出: * 若是您是数据量很大、对性能有很高的要求时(好比100ms内等),对查询延迟敏感,对查询有SLA要求时,建议您将数据导入Hologres内表,进行查询访问。 * 若是是临时性的探索性分析,或者对延迟不敏感的内部业务,可使用MaxCompute外表方式,减小数据移动。 * 除上述场景外,您能够根据具体业务状况选择合适的使用场景。 # MaxCompute与Hologres的组合关系 上面介绍了不少Hologres外表查询引擎如何加速查询MaxCompute的场景,但并非说全部类型的查询都适合在Hologres的外表引擎上执行。 Hologres是针对交互式分析场景设计的同步的查询引擎,面向的是大数据进,小数据出的场景,典型用在Serving和Analytics的场景。而MaxCompute是针对海量数据加工处理处理场景设计的异步的数据加工引擎,面向的是大数据进,大数据出的场景,典型用在ETL的场景。在ETL的场景,做业异步提交,IO接口针对Scan优化,计算过程须要节点的冗余设计支撑高可用,须要计算状态落盘从而能够在失败时自动重试,而这些都是Hologres不具有的能力。所以MaxCompute+Hologres组合在一块儿,造成了数据加工+服务的一站式体验,减小了数据的隔离和冗余,能够为大数据数仓提供合理的解决方案架构,支撑实时离线一体化的开发体验。 # mc加速2.png总结 Hologres经过SQE与MaxCompute深度整合,充分利用Hologres和MaxCompute的优点,以极致性能为目标,直接就能加速查询MaxCompute数据,让用户更方便高效的进行交互式分析,同时也下降了极大的分析成本,实现离线数仓服务一体化。 做者简介:王奇(花名慧青),阿里巴巴技术专家,现从事交互式分析引擎Hologres研发工做。 后续咱们将会陆续推出有关Hologres的技术底层原理揭秘系列,具体规划以下,敬请持续关注! * Hologres揭秘: 首次公开!阿里巴巴云原生实时数仓核心技术揭秘 * Hologres揭秘: 首次揭秘云原生Hologres存储引擎 * Hologres揭秘: 深度解析高效率分布式查询引擎 * Hologres揭秘:高性能原生加速MaxCompute核心原理(本文) * Hologres揭秘:__如何实现MaxCompute与Hologres数据同步速度快百倍 * Hologres揭秘:__如何支持高吞吐Upsert * Hologres揭秘:__如何支持在线服务场景的超高QPS * Hologres揭秘:__如何支持高并发查询 * Hologres揭秘:__如何支持高可用架构 * Hologres揭秘:__如何支持资源隔离,支持多种负载 * Hologres揭秘:__向量检索引擎Proxima原理与使用实践 * Hologres揭秘:__读懂执行计划,查询性能翻十倍 * Hologres揭秘:__分布式系统如何设计Shard与Table Group * Hologres揭秘:__如何支持更多Postgres生态扩展包 * Hologres揭秘:高吞吐写入Hologres的N种姿式 * ...... 感谢您的阅读,也欢迎使用体验Hologres,能够参考 使用手册,同时也欢迎扫码加入钉群进行技术交流: image > 本文内容由阿里云实名注册用户自发贡献,版权归原做者全部,阿里云开发者社区不拥有其著做权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。若是您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将马上删除涉嫌侵权内容。
相关文章
相关标签/搜索