如何实现云上 Lakehouse 高性能

1、StarRocks 云上架构优化

在可用性方面,StarRocks 的架构简洁,整个系统核心只有 FE 和 BE 两类进程,不依赖外部任何主线,方便不属于维护。同时 FE 和 BE 模块可以在线水平扩散,元数据和数据都用副本机制,确保整个系统无单点。

FE 是 StarRocks 前端节点,负责管理元数据,管理客户端连接,进行查询规划查询调度。FE 配置根据配置有两种类型的角色, Follow 和观察者。Follow 选出一个 Leader,只有 Leader 会对元数据进行写操作,非 Leader 节点会自动将元数据写入路由到 Leader 节点,每次元数据写入的时候必须有多数的 Follow 写入成功才算成功。那么观察者不参与选组操作,只会异步同步并且回放日志,用于扩展集群的查询并发能力。每个 FE 节点在内存里都会保留一份完整的元数据,每个 FE 节点能提供无差别的服务。FE 为了保证性能,在 SQL 做完语义分析之后,还会进行分区裁剪,已过滤掉不必要的数据,同时还会基于 catalog 里面的统计数据进行 CBO 优化,以此生成的物理执行计划是最优的状态。

BE 是 StarRocks 的后端节点,负责数据存储以及 SQL 执行等工作。BE 为了保证良好的性能和扩展性,在执行层面引入了向量化执行器,使用 SIMD 指令集来获得更高的性能,而同时设备又有着较低的负载。同时 BE 在 IO 接口方面有良好的扩展性设计,使得很可以很方便的去扩展实现云存储,比如对象存储、CHDFS 等存储。

云侧为了降低应用侧的改造成本、同时拥有更高性能,实现了融合存储等技术,使得传统对象存储在调用文件系统 API 时和传统文件系统有着一样的性能表现。同时为了加速云上 StarRocks,引入了两层 Cache 和物化视图技术。

LocalCache 技术:在 BE 级点缓存底层存储数据块实现就近访问,可以通过良好的淘汰算法保证上层有极致的性能。因为云上的 StarRocks 工作在计算存储模式下,BlockCache 主要是缓存对象;存储数据块到计算节点,通过 BlockCache 来降低访问对象存储的延时,以获得良好的性能。物化视图技术:这里的物化视图,是指对经常使用的结果集进行物化,在查询的时候,通过 FE 的 SQL rewrite 直接提取物化结果来提升性能。

如何实现云上 Lakehouse 高性能_第1张图片

2、EMR Iceberg Data Layout

要获得良好的性能,除了有良好的架构、执行引擎外,对于数据的组织和索引管理也尤为重要。腾讯云 EMR  Iceberg 做了大量的优化工作。

多维分析是大数据分析的一个经典场景,这种分析一般带有过滤条件。对于此类查询,尤其是在高级字段的过滤查询,理论上,我们只需要对原始数据做合理的布局,结合相关的过滤条件,查询引擎就可以过滤掉大量不相关的数据,只读取很少部分的数据。例如我们在入库之前对相关的字段做排序,这样生成的每个文件相应字段的 minmax 值不存在交叉的。查询引擎下过滤条件跟数据源结合每个文件的  minmax 统计信息,就可以过滤掉大量不相干的数据。

上述技术既是我们通常所说的 Data Clustering 和 Data Skip。直接排序可以在单个字段上产生很好的效果。但是如果多个字段直接排序,那么效果会大打折扣。Z order 可以很好地解决多字段排序问题。Z order 是一种可以将多维数据压缩到一维的技术,在时空索引及图像方面使用较广,Z 曲线可以将一线一条无线长曲线填充到任意维度空间。对于一条数据来说,我们可以将其多个要排序的字段看作是数据的多维 Z 曲线,可以通过一定的规则将多维数据映射到一维数据上,构建 Z value 进而可以基于该一维数据进行排序。我们不用太去理解 Z order 在数学上的意义,重点在它为我们解决问题带来的思路 —— 降维。解决问题其实就是要利用空间填充曲线,对多维数据比如一张表的多个列进行降维处理,以提升相关数据聚集效果以及相应数据 minmix 的使用效率。

如何实现云上 Lakehouse 高性能_第2张图片

以图为例,假设红色块是查询中 where 的条件部分。正常情况下,在数据没有被 clustering 前,这些数据分布在 N 个数据文件之中,这样的一个 SQL 要扫描大量的数据文件才能得到结果集。而我们对数据重新排序并 clustering 生成类索引之后,红色块的数据只会分布在部分文件之中。查询给过滤条件的数据源,结合每个文件 minmix 统计信息即可过滤掉大量不相干的数据,这样就可以大幅提升性能。

腾讯云中的 EMR 的 Iceberg 在 ZO 的特性,领先于社区一年进入生产和环境。下面是 EMR 的 ZO 支持的数据类型。EMR 中的 Iceberg 类索引不仅支持基础数据类型,如 int、string、varchar、date 基础类型之外,还支持复合数据类型,如 map、struct 以简化业务使用类索引,同时还提供了 SQL 语法进行 Z 索引的构建,如 offline table、order by column 进一步降低客户使用 Z 索引的门槛。

如何实现云上 Lakehouse 高性能_第3张图片

以下是基于腾讯云 EMR Iceberg Z 索引基于 SSD 的性能测试报告。基于 SSD 的性能测试的硬件为 10 台八核 32g 磁盘为云 SSD 的标准型机型。

​​​​​​​​

如何实现云上 Lakehouse 高性能_第4张图片

你可能感兴趣的:(java,数据库,大数据)