鲁楠
发布于

OushuDB学习笔记(基本原理)

二、基本原理
1、基础架构
OushuDB 基础架构分为:客户端、主节点、虚拟计算集群、虚拟存储集群
架构特点:
1)存算分离
多个 Master 处理用户请求,处理用户认证,协调分布式执行计划引擎
2)分布式执行计划引擎
负责 SQL 解析,语义分析,基于代价的查询优化,产生分布式查询任务
3)分布式任务调度引擎 QD
负责执行计划分发、状态跟踪,节点间数据分发
4)SIMD 向量化执行引擎
逻辑计划转化为物理计划,完成资源分配,启动并控制查询计划的执行,并将执行结果回传
5)分布式可插拔存储引擎
支持 HDFS/S3/本地表,支持行存/列存,数据编码,压缩,存储和读写
6)分布式事务管理
提供 ACID 机制,支持分布式锁,支持并发读写
7)元数据管理
数据库对象管理与存储、基于 MVCC 的事务处理机制
8)全局资源管理
多租户、多级资源队列的资源统一分配

2、基本组件
1)Master 节点:接收客户端查询,分解任务,分派到 segment 节点,汇总 Segment 节点执行结果并返回客户端
2)Segment 节点:接收到任务,fork 出 QE 进程,协同完成任务,结果返回 master 节点
3)Standby 节点(5.0 版本之前):保证集群高可用
4)Magma:OushuDB4.0 时引入的分布式存储,在主节点配置 observer 用来提供 magma 的可用节点,magma node 用于提供读写服务,支持数据增删改,支持索引,行列混存,
5)HDFS:主节点配置 namenode,数据节点配置 datanode
6)运行模式:standalone,独占系统资源,自己管理资源;yarn,OushuDB 作为应用注册到 yarn,由 yarn 做资源管理和分配,在主节点配置 resource manager,在各个子节点配置 node manager
7)interconnect:节点间的数据传输服务

组件间运行模式:
1)元数据存储在 Master 节点本地(5.0 版本之前)
2)Master 节点认证和接受客户端请求
3)解释器生成语法树,优化器生成执行计划,从资源管理器得到可用节点资源
4)从 HDFS Catalog 获取存储在 HDFS 上的数据的分布,生成最优查询计划,决定在哪些节点访问哪些数据
5)QD 将查询计划分派给各个 segment 节点
6)处理事务

计算节点:
1)物理节点就是一个 segment 节点
2)segment 节点可分为多个 vsegment 节点,一般为 2、4、6、8,缺省 8
3)vsegment 是并行查询的基本计算单元,container

3、部署架构
OushuDB Master:配置 Magma observer,Standby Namenode
OushuDB Standby:配置 Magma observer,Active Namenode
Zookeeper node:3 个,有两个尽量在 Master 和 Standby 节点上
segment 与 hdfs 的 datanode 混布可以利用到本地读提高性能

4、进程架构
1)postmaster:监听用户请求的守护进程,为每个用户 fork 单独的 postgres 服务
2)logger:收集各个子进程的输出,写到 pg_log
3)stats collect:收集统计信息写入。stat 文件
4)Writer:共享内存数据刷到磁盘
5)resource manager:资源管理,segment 可用性检查
6)DFS metadata cache:缓存 block 信息
7)checkpoint:周期性 checkpoint 或 checkpoint 请求
8)sequenceserver:生成序列
9)Wal send server/sync agent:发送 WAL 日志,接收并执行 WAL 日志

评论(1)
  • 鲁楠
    鲁楠 回复

    5、计算引擎,执行器,优化器
    优化器:
    启发式规则优化 RBP(Rule Based Optimization)
    基于代价的优化 CBO(Cost Based Optimization)

    提升执行器性能:
    向量计算 Vectorized Execution:snowflake,oushudb
    代码生成 Code Generation:impala
    spark 两者都有使用
    两种技术侧重点不同,但都可以提升性能,不同的语句也会有不同程度的性能提升,向量计算更适合并行处理数据
    SIMD(single instruction multi-data)单指令多数据流
    SISD 单指令单数据流

    Orc 存储格式
    列式存储、可压缩
    提供多种索引:row group index, bloom filter index
    支持复杂数据结构,例如 Map

    新执行器支持 TPC-H/TPC-DS
    TPC-H 比 Greenplue 快 5-10 倍,比 sparksql3.0 以上版本快几十倍

    6、查询执行过程
    client 连接 master 节点的 postmaster 进程
    Master 节点的 postmaster 进程 fork 出 QD 进程
    client 连接 QD 进程
    QD 进程将 SQL 通过解析器生成语法树,通过优化器生成查询计划
    查询计划分派到各个 segment
    segment 的 postmaster 进程 fork 出 QE 进程
    QE 进程执行查询计划,并将结果返回 Master 的 QD 进程
    QD 进程汇总结果,并返回给 client

    Motion 的种类
    1)Redistribution Motion:数据重分布
    2)Broadcast Motion:小表广播到所有节点
    3)Gather Motion:Master 节点收集汇总 segment 的执行结果
    按 Motion 划分 slice,每个 slice 对应一个 QE 进程
    QE 进程数=vseg 的数量 * slice 数

    vseg 数量的确定:
    Hash 表由桶数确定
    Random 表由 guc 值和 SQL 的复杂度决定

    7、外部接口
    PSQL:PostgreSQL 的命令行交互工具
    JDBC:提供 JDBC jar
    ODBC:兼容 pg 官方 ODBC
    pgadmin:postgres 官方 UI 客户端

    8、Magma
    存储结构化数据
    支持增删改查
    基于 Raft 协议数据复制实现存储和访问服务的高可用
    支持基于多版本 MVCC 的分布式事务特性
    行列混存
    支持索引,主键索引和非主键索引
    非纯粹的存储,具有内建的计算能力,支持算子下推
    便捷的集群扩展
    容错和负载均衡

    主要功能:数据分布、负载均衡、数据副本、索引、事务、数据清理

    节点启动 magma 进程,多个 magma 进程组成 magma 集群

    RangeGroup 有多个副本,RangeGroup Leader 对外提供服务
    每个 RG 包含多个 Range
    每个 RG 包含数据缓冲、数据文件、统计数据、索引文件、删除数据 DBTFile
    数据文件的结构:由多个 block 组成,按行切分,block 内按列存分页保存

    数据结构:
    每个节点有多个数据目录
    每个数据目录有多个 RG
    RG 下有 ap 数据目录、index 索引目录、rafelog 日志目录
    ap 下分为多个 Table,每个 Table 下包含多个 Range 目录
    Range 目录下是持久化文件、统计数据、索引文件、DBTFile

    9、HDFS
    Datanode 负责文件存储和读写,将文件分为多个 block 分布在 datanode 上,client 对 block 可并行访问
    Namenode 负责文件元数据管理,文件路径名,数据块 ID 和存储位置
    副本:一个 block 复制多份,存在不同 datanode 或不同机架,应对磁盘损坏、datanode 宕机、交换机宕机

    高可用:
    block 计算校验和 checksum,通过其他副本恢复
    datanode 磁盘坏,将 blockid 上报 namenode,由 namenode 通过其他副本生成新副本
    datanode 宕机,通过心跳发现,namenode 通过其他副本生成新副本
    namenode 宕机,通过 namenode 主从热备高可用机制恢复,zookeeper 提供 znode 锁,共享存储系统 shared edits 同步元数据信息

test