OushuDB学习笔记1

架构简介

主节点

  1. 资源管理器:
    负责整个集群的资源管理,可以感知集群健康状态,动态识别集群节点,协调查询间的资源分配
  2. 查询解析器:
    负责解析查询并检查语法及语义,最终生成查询树发送给优化器
  3. 分析器:
    检查语法树结构,对语法树进行补充或优化改进,分析器和查询解析器是合并的
  4. 优化器:
    负责接收查询树,生成找出最优的查询计划。
  5. 容错服务:
    检测哪些节点可以,哪些节点不可用的节点
  6. 事物管理:
    提供分布式事物的控制能力,提供基于多版本的事物隔离机制
  7. 权限安全:
    负责控制用户的行为,对用户权限进行约束
  8. 调度器:
    优化器优化完查询以后,派遣计划到各个节点执行,并协调查询执行的整个过程

计算层

  1. 计算层可以划分为多个虚拟计算集群(VC),相互独立支持动态弹性扩展。
  2. 每个虚拟计算集群下可以划分多个虚拟计算集群实例(VC 实例),提供多租户支持。
  3. 每个虚拟计算集群实例包括多个计算节点,计算节点上会运行个 OushuDB 子节点,计算节点可以动态添加。节点加入到虚拟计算集群后即可接受查询计算任务。
  4. 子节点实现了数据库的查询计算,在执行查询时会在资源容器中启动多个查询执行器,实现对数据的并行处理。

存储层

由存储节点组成的多个可插拔存储集群组成,支持可插拔存储,包括 Magma、HDFS、S3,支持用户对存储集群按照不同的特性和用途进行集群分组。

  1. 元数据集群:依托 Magma 存储,是 OushuDB 用来管理元数据的集群
  2. 数据集群:用户数据存储的集群

进程介绍

Master 节点

  1. PostMaster 进程:监听用户请求的守护进程,为每个客户端连接 fork 单独的 postgres 服务。当 postgres 出错时尝试修复,当 Segment 节点的 postgres 进程挂掉时会认为节点宕掉。
  2. Logger 进程:负责收集各个进程的输出并将其写入 pg_log。这里包括成功 log 和出错的 log。
  3. Stats collector 进程:统计收集数据的信息,生成描述数据库、表等统计信息的。stat 文件。
  4. Writer 进程:定期将共享内存的数据写到磁盘上。
  5. Masterresource manager 进程:管理、分配、回收资源,定期查询、接收、处理 Segment 的心跳信息,从而获取整个集群可用的节点。
  6. Segment resource manager 进程:查询本节点的状态,包括查询临时文件是否可读写,发送 Segment 的心跳信息。
  7. DFS metadata cache 进程:master 节点都有的进程,由于偶数 DB 是存储和计算分离的,数据存储在 HDFS 或 Magma 上,进程会读取并缓存 block location,从而计算数据的存储,也就是存储数据的这些 block 是如何分布的,因此在生成查询计划时,可以确定去某些节点访问某些数据的速度,从而进一步保证本地读。
  8. Checkpoint 进程:负责周期性做 checkpoint 或响应常规的 checkpoint 请求。
  9. Sequence 进程:产生序列(自增长列)。
  10. Wal send server 进程:负责把 write ahead log 发给 Standby Master。
  11. Sync agent 进程:负责和 Master 上 Wal send server 通信的,处理 Master 和 standby 节点状态。

查询执行过程

  1. 客户端连接 Master 节点上的 PostMaster 进程,PostMaster 会 fork 出 query dispatcher 进程(QD 进程),建立 Client 到 QD 进程的连接。
  2. 之后 QD 进程在 Master 节点上进行 parse(将 SQL 转换成一颗语法树)和 plan(选择最优的查询计划)并将优化后的长计划根据资源分配情况下发到 Segment 节点。
  3. Segment 节点接受到查询计划后会 fork 出 Query Execytor 进程。这时由 QD 到 PostMaster 的连接转化为 QD 到各个节点的 QE 的连接
  4. 各个节点上的 QE 按照查询计划将查询执行的结果返回给 QD,QD 将汇总后的结果返回给客户端,完成整个 Query 的执行。
评论
    test