openGauss逻辑架构

openGauss逻辑架构

  • 了解openGauss逻辑架构
    参考文档:https://blog.opengauss.org/zh/post/jiajunfeng/%E6%B5%85%E8%81%8Aopengauss%E9%80%BB%E8%BE%91%E6%9E%B6%E6%9E%84/
    https://my.oschina.net/gaussdb/blog/5057889

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逻辑架构)