这是我参与「第四届青训营 」笔记创作活动的第12天。
第七节课「Presto 架构原理与优化介绍」的内容主要包含 4 个方面:概述、Presto 基础原理和概念、Presto 的重要机制、性能优化实战。这篇文章为 Presto 的重要机制介绍,包括多租户资源管理、多租户任务调度、内存计算和多数据源联邦查询。
多租户资源管理
-
Presto 用户多租户隔离的手段
Presto 通过 Resource Group 对不同的用户创建不同 Group 从而实现不同租户,不同场景的资源管理
-
Presto Resource Group 的优缺点
- 优点:支持通配符的形式,对不同租户,不同提交场景下的用户进行限制
- 缺点:资源的管理和判断是以当前用户正在运行的 SQL 资源使用量为基准,对于低频大 SQL 场景不太适用
多租户下的任务调度
-
Presto 从以下三个方面实现了多租户的任务调度
- Stage 调度策略
- Task 的节点选择策略
- Split 调度策略
-
Presto Stage 调度的方式
- AllAtOnceExecutionPolicy(同时调度)
- PhasedExecutionPolicy(分阶段调度)
-
Presto 进行 Task 调度时的调度方式
- HARD_AFFINITY: 计算、存储 Local 模式,保障计算与存储在同一个节点,减少数据传输
- SOFT_AFFINITY: 基于某些特定算法,如一致性 HASH 函数,常用于缓存场景,保证相似的 Task 调度到同一个 Worker
- NO_PREFERENCE: 随机选取,常用于普通的纯计算 Task
内存计算
-
Presto 实现 Back pressure mechanism
- 控制 split 生成流程
- 针对每个 Task 定时检查, 如果 OutputBuffers 使用率低于 0.5 (下游消费较快, 需要提高生产速度), Split 并发度+1
- 控制 Operator 执行速度
- "sink.max-buffer-size" 写入 buffer 的大小控制
- "exchange.max-buffer-size" 读取 buffer 的大小控制
- Buffer 达到最大值时 Operator 会进入阻塞状态
多数据源联邦查询
- Presto 多数据源支持的优点与缺点
- 优点:支持多数据源的联邦查询
- 缺点:针对不同数据源,还存在许多问题需要解决
- 谓词下推
- 每个数据源都需要单独的一套 catalog 管理
- 如何针对数据源进行分片操作
个人总结
了解了 Presto 的多租户资源管理、多租户任务调度、内存计算和多数据源联邦查询等重要机制。