共计 4693 个字符,预计需要花费 12 分钟才能阅读完成。
Hologres(中文名交互式剖析)是阿里云自研的一站式实时数仓,这个云原生零碎交融了实时服务和剖析大数据的场景,全面兼容 PostgreSQL 协定并与大数据生态无缝买通,能用同一套数据架构同时反对实时写入实时查问以及实时离线联邦剖析。它的呈现简化了业务的架构,为业务提供实时决策的能力,让大数据施展出更大的商业价值。从阿里团体诞生到云上商业化,随着业务的倒退和技术的演进,Hologres 也在继续一直优化核心技术竞争力,为了让大家更加理解 Hologres,咱们打算继续推出 Hologres 底层技术原理揭秘系列,从高性能存储引擎到高效率查问引擎,高吞吐写入到高 QPS 查问等,全方位解读 Hologres,请大家继续关注!
往期精彩内容:
- 2020 年 VLDB 的论文《Alibaba Hologres: A cloud-Native Service for Hybrid Serving/Analytical Processing》
- Hologres 揭秘:首次公开!阿里巴巴云原生实时数仓核心技术揭秘
- Hologres 揭秘:首次揭秘云原生 Hologres 存储引擎
- Hologres 揭秘:Hologres 高效率分布式查问引擎
本期咱们将带来 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 次要有以下几个劣势:
- 高性能:能够间接对 MaxCompute 数据减速查问,具备亚秒级响应的查问性能,在 OLAP 场景能够间接即席查问,满足绝大多数报表等剖析场景。
- 低成本:MaxCompute 通过数年的倒退,用户在 MaxCompute 上存储了大量数据,不须要冗余一份存储可间接进行拜访;另一方面用户能够只需将局部高性能场景的数据迁徙到 SSD 上,报表等剖析场景的数据能够存储在 MaxCompute 进一步降低成本。
更高效:实现对 MaxCompute 的 Native 拜访,无需迁徙和导入数据,就能够高性能和全兼容的拜访各种 MaxCompute 文件格式,以及 Hash/Range Clustered Table 等简单表,升高用户的应用老本。
SQE 架构介绍
如上图所示是 SQE 的整体架构,能够看出整个架构也是非常简单。MaxCompute 的数据对立存储在 Pangu,当 Hologres 执行一条 Query 去减速查问 MaxCompute 的数据时,在 Hologres 端:
- Hologres Frontend 通过 RPC 向 SQE Master 申请获取 Meta 等相干信息。
- Hologres Blackhole 通过 RPC 向 SQE Executor 申请获取具体的数据相干信息。
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 的索引能力。所以当把表面导到内表的时候,能够依据查问的形式指定内表的索引构造,通过这些索引能力带来更高的查问性能。这就是表面导入内表,内表的性能更好的起因,能够充分发挥数仓的索引优化能力。
目前这两种形式次要比照如下:
场景 / 维度 | 性能 | 存储老本 | 数据量 | 索引 | 便捷性 |
---|---|---|---|---|---|
Hologres 内表 | 十分好 | 高 | |||
(SSD) | 可反对 PB 级 | 可反对位图、聚簇等多种索引 | 须要导入数据 | ||
Hologres 表面 | 较好 | 低 | |||
(HDD) | 单次 query 查问 200GB 限度 | 只反对 ODPS 索引 | 无需迁徙和导入数据 |
从下面比照能够看出:
- 如果您是数据量很大、对性能有很高的要求时(比方 100ms 内等),对查问提早敏感,对查问有 SLA 要求时,建议您将数据导入 Hologres 内表,进行查问拜访。
- 如果是临时性的探索性剖析,或者对提早不敏感的外部业务,能够应用 MaxCompute 表面形式,缩小数据挪动。
- 除上述场景外,您能够依据具体业务状况抉择适合的应用场景。
MaxCompute 与 Hologres 的组合关系
下面介绍了很多 Hologres 表面查问引擎如何减速查问 MaxCompute 的场景,但并不是说所有类型的查问都适宜在 Hologres 的表面引擎上执行。
Hologres 是针对交互式剖析场景设计的同步的查问引擎,面向的是大数据进,小数据出的场景,典型用在 Serving 和 Analytics 的场景。而 MaxCompute 是针对海量数据加工解决解决场景设计的异步的数据加工引擎,面向的是大数据进,大数据出的场景,典型用在 ETL 的场景。在 ETL 的场景,作业异步提交,IO 接口针对 Scan 优化,计算过程须要节点的冗余设计撑持高可用,须要计算状态落盘从而能够在失败时主动重试,而这些都是 Hologres 不具备的能力。因而 MaxCompute+Hologres 组合在一起,造成了数据加工 + 服务的一站式体验,缩小了数据的隔离和冗余,能够为大数据数仓提供正当的解决方案架构,撑持实时离线一体化的开发体验。
总结
Hologres 通过 SQE 与 MaxCompute 深度整合,充分利用 Hologres 和 MaxCompute 的劣势,以极致性能为指标,间接就能减速查问 MaxCompute 数据,让用户更不便高效的进行交互式剖析,同时也升高了极大的剖析老本,实现离线数仓服务一体化。
作者简介:王奇(花名慧青),阿里巴巴技术专家,现从事交互式剖析引擎 Hologres 研发工作。
后续咱们将会陆续推出无关 Hologres 的技术底层原理揭秘系列,具体布局如下,敬请继续关注!