摘要
本文介绍了 Alluxio 如何通过构建高性能缓存加速层,优化在超大规模数据湖上查询 Parquet 文件的性能。主要观点和结论如下:
核心工作负载与设计目标
- 核心工作负载:以亚毫秒级延迟对大规模、分区化的 Parquet 文件执行点查询(如
SELECT id, data FROM table WHERE id = 123)。
- 数据模式:Parquet 文件存储在 AWS S3 中,按唯一
id 列分区和排序。
- 挑战:直接从 S3 查询 PB 级数据延迟高(数百毫秒至数秒),标准 S3 Express 成本高昂且吞吐量受限。
- 设计目标:Alluxio 实现低延迟、高吞吐量、高可靠性和低成本,通过主动缓存、谓词下推、零拷贝传输、单 RPC 执行路径和元数据缓存等优化措施。
通过分布式缓存降低基线延迟
- Alluxio 采用智能缓存架构,将高频访问数据缓存至本地 NVMe 固态硬盘,底层仍依托 S3 存储。
- 将 Parquet 文件切分为按 4MB 对齐的页面,支持细粒度缓存。
- 每个 Alluxio worker 基于 LRU 策略自动缓存热点数据,并支持无缝回退到 S3。
- 使用一致性哈希进行数据分片和请求路由,实现分布式、无状态的架构。
- worker 集群并行预加载数据,吞吐量最大化,就绪时间最小化。
- worker 集成异步事件循环、基于 NVMe 的堆外页存储和零拷贝 I/O 等优化。
- 性能提升:单个 Alluxio worker 实例延迟可与 S3 Express 相媲美,相比标准 S3 快 100 倍,吞吐量接近 S3 Express 每个账户上限并线性扩展。
通过下推提升点查询延迟表现
- 下推机制:将谓词和投影计算下推到 Alluxio worker 节点执行,避免多次远程 RPC 调用。
- 优化步骤:
- 基线(直接在 S3 上启用下推):延迟 411 毫秒。
- 缓存到 Alluxio:延迟降至 232 毫秒。
- 将谓词和投影计算下推到 Alluxio worker:延迟降至 42 毫秒。
- 缓存 Parquet 元数据:最终延迟降至 0.297 毫秒。
- 中间层计算下推的基本原则:适用于 I/O 密集型任务和轻量级查询操作,避免存储节点承担过重计算负担。
低延迟存储方案的成本对比
- Alluxio 通过自动按需缓存和仅缓存工作负载所需数据,大幅降低存储成本。
- 案例对比:使用 Alluxio 缓存数据相比 S3 Express One Zone 每月可节省超过 40,000 美元,同时提供相同的低延迟性能。
相关工作
- 缓存数据与元数据:多数系统缓存仅针对特定计算引擎,Alluxio 实现全局可见性和灵活的下推。
- 存算一体:Alluxio 利用分离式系统中的计算资源,与传统方案不同。
- 计算引擎下推优化:Alluxio 能将逻辑直接下推到数据所在位置,无需多次往返交互。
结论及下一步工作
- Alluxio 实现了单服务器每分钟处理数百万请求且延迟低于毫秒级的性能,即使在 PB 级数据规模下仍高效。
- 未来方向:大规模分区表的可扩展性、运维工作负载的扩展、动态数据的低延迟保持、端到端 AI 集成。