美文网首页
openGauss逻辑架构

openGauss逻辑架构

作者: 消想 | 来源:发表于2021-06-30 19:46 被阅读0次

    openGauss逻辑架构

    openGauss逻辑架构图在openGauss源码doc目录下,见下图。


    openGauss-architecture.png

    线程管理

    列举了openGauss的后台线程。

    • 业务处理线程池
      业务处理线程(gaussdb)负责处理客户端请求的任务。高并发场景下,推荐使用线程池。
      -- 线程模式在高并发下,线程切换频繁会导致性能下降;所有线程共享内存,可能出现线程把内存写坏了,其他线程感知不到,出现错误。openGauss实现线程池通过线程利用来解决线程频繁切换的问题
      线程池的实现:
    1. 客户端向数据库发起连接请求,数据库主线程创建会话,将会话分发给线程组,加入到线程组的epoll列表中
    2. 线程组的监听线程负责监听epoll列表中的所有客户端连接
    3. 线程组监听线程监听到客户端任务请求,将会话分配给空闲的线程组worker线程。任务完成后,worker线程返还会话给监听线程,如无其他等待响应请求的会话,则worker线程标记为空闲状态
    4. 线程组worker线程在客户端断开连接后,关闭连接,并释放相关资源
    5. 每个线程组可以与一个NUMA节点绑定
    • 日志写线程
      日志写线程(WALwriter)将WAL buffer的内容刷新到磁盘并保存在WAL日志中,确保已提交的事务都被永久记录,不会丢失。
    • 数据页写线程
      数据页写线程包括:pagewriter和bgwriter。
      pagewriter线程负责将脏页写入双写文件,推进整个数据库的检查点。
      bgwriter线程主要将pagewriter转发过来的脏页落盘。
    • 检查点线程
      检查点线程(checkpointer),周期性发起数据库检查点。
      检查点(checkpoint)是一个事务日志中的点,所有数据文件都在该点被更新以反映日志中的信息,所有数据文件都将被刷新到磁盘。
    • 统计线程
      统计线程(statscollector)进行数据库统计信息收集,并将这些信息保存在pgstat.stat文件中。
    • 日志发送线程
      日志发送线程(WALsender),在主节点将预写日志发送到备节点。
    • 日志接收线程
      日志接收线程(WALreceiver),在备节点接收主节点发送过来的预写日志。
    • 清理线程
      清理线程(autovacuum)主要负责清理dead tuples,冻结事务id,清理不需要的clog部分,更新目标表的FSM、VM,更新部分统计信息。
    • 归档线程
      归档线程,数据库打开归档功能时启动的一个线程,此线程用于将数据库日志归档到指定的路径。
    • 管理线程
      管理线程可以看作是一个消息转发中心,在接收到请求后,启动相应的子线程完成相关操作。

    通信管理

    • 通信协议处理
      openGauss数据库使用的前端后端协议,根据连接状态的不同,存在几种不同的子协议。
    • 控制命令信号处理
      信号是一种软件中断机制,openGauss数据库线程之间的通讯离不开这些信号。

    SQL引擎

    • SQL解析器
      解析接收到的SQL命令,生成语法树。
    • SQL查询重写
      利用已有语句特征和关系代数运算生成更高效的等价语句。
    • SQL优化
      枚举不同的候选执行路径,根据代价估算,选择最优的执行路径。
    • SQL执行
      SQL执行器遍历执行计划树,根据计划树的具体逻辑完成操作。
    • DDL命令处理
      解析DDL命令语法,查询数据字典执行更新操作。
    • 存储过程解析
      存储过程是一组可以完成特定功能的SQL语句集合,经编译后存储在数据库中。对存储过程的解析在SQL引擎中完成。

    存储引擎

    • 行存
      将表以行为单位存储在硬盘。
    • 列存
      列存的基本单位是CU(压缩单元),表中一列的一部分数据组成的压缩数据块。
    • 内存表
      基于全内存态的数据存储,为openGauss提供了高吞吐的实时数据处理分析能力和极低的事务处理延时。
    • CSN快照
      CSN:在openGauss内部,使用的一个全局自增的长整数作为逻辑的时间戳,它模拟数据库内部的时序。openGauss事务启动时会创建CSN快照。
    • 大内存缓冲管理
      与外部文件系统进行page页面交换并作缓冲,对内存共享页面的脏页进行LRU算法淘汰并刷盘。
    • 日志管理
      采用多个Log Writer线程并行写的机制。
    • 空闲空间管理
      清理数据库中的历史版本数据。
    • 索引管理
      主要管理索引结构,如索引创建,更新,删除等。
    • 并行日志回放
      将重做日志中已记录的数据文件变更操作重新应用到系统/页面中的过程,主要发生在故障恢复或者主备数据同步的备节点上。
    • 锁管理
      对事务并发访问过程中数据库对象的加锁操作进行管理。
    • 存储管理适配
      对存储介质层的管理,对不同的存储介质进行适配封装,对上层数据页面访问屏蔽底层真正存储系统的差异,例如管理HDD的使用、管理SSD的使用。
    • 增量检查点
      增量检查点会小批量的分阶段的滚筒式的去进行脏页刷盘,同时更新lsn信息,回收不需要的xlog日志。
    • NUMA 数据结构
      通过numa绑核,减少跨核内存访问的时延问题,提升CPU利用率,提升多线程间同步性能,xlog日志批量插入,热点数据分散处理。

    安全管理

    • 身份管理
      openGauss使用了一系列的认证机制来实现,通过认证模块限制用户对数据库的访问,通过口令认证、证书认证等机制保障认证过程中的安全,通过黑白名单限制访问IP,通过数据库属性或用户属性限制连接数。
    • 访问控制
      基于角色的访问控制机制,控制数据库资源和对象的访问权限。
    • 通信加密
      openGauss提供了数据加密、数据脱敏、加密数据导入导出等机制保障数据的隐私安全。
    • 审计
      openGauss提供了基础审计能力,审计内容包括事件的发起者,事件的发生时间和事件的内容。

    通用组件

    • 数据字典
      数据库的元数据,可以通过查询数据字典查看数据库的相关信息,如数据库对象的属性等。
    • 内存管理
      根据openGauss的配置参数,规划数据库各种内存的分配。
    • 数据类型
      数据库中数据的属性。
    • 内置函数
      数据库内定义的子程序,实现特定的功能需求。

    工具

    • 客户端命令行工具
      gsql
    • 数据库实例控制工具
      实例初始化(gs_initdb),实例启停(gs_ctl) 等。
    • 物理备份/恢复工具
      gs_basebackup
    • 逻辑导入导出工具
      gs_dump,gs_dumpall
    • OM安装
      gs_om

    客户端驱动

    • 命令行接口(CLI)
      gsql客户端
    • Java数据库连接(JDBC)
      openGauss提供了对JDBC 4.0特性的支持
    • 开放式数据库连接(ODBC)
      openGauss提供了对ODBC 3.5的支持

    相关文章

      网友评论

          本文标题:openGauss逻辑架构

          本文链接:https://www.haomeiwen.com/subject/nhbhultx.html