presto原生多coordinator

110 阅读1分钟

Presto 原生支持多 Coordinator。为了克服单 Coordinator 存在的扩展性和单点故障问题,Facebook 提出了一个新的设计:一个分解的协调器(disaggregated coordinator),允许 Coordinator 在单个 Worker 池中横向扩展。这种架构在新组件资源管理器(resource manager)的帮助下支持 Coordinator 池。

架构组成

  • 资源管理器(Resource Manager) :资源管理器聚合来自所有 Coordinators 和 Workers 的数据,并构建集群的全局视图。集群支持多个资源管理器,每个资源管理器充当主资源管理器。资源管理器不在查询语句的关键路径上,而是一种互补的过程,可以在短暂的不可用时存活下来。
  • Coordinator:Coordinator 定期向所有资源管理器发送心跳。这些心跳包含有关 Coordinator 处理的查询的信息,资源管理器使用这些信息刷新集群的全局视图。Coordinator 定期从资源管理器获取聚合的 Resource Group 信息。
  • Worker:每个 Worker 定期向资源管理器发送包含内存和 CPU 利用率的心跳,资源管理器会跟踪 Worker 池的这些指标。

查询执行流程

  1. 查询被提交给集群中的一个 Coordinator。
  2. Coordinator 通过解析、分析并将查询分配给给定的 Resource Group 来准备执行查询。
  3. 当 Coordinator 创建查询时,心跳被发送到每个资源管理器。
  4. Coordinator 定期从资源管理器获取聚合的 Resource Group 信息。

这种多 Coordinator 架构可以显著提高 Presto 集群的扩展性和可靠性,减少单点故障的风险。

参考文献:

prestodb.github.io/blog/2022/0…