#产品架构

# 单机部署

# 分布式部署

# 共享集群部署

# 主要模块介绍

数据库客户端

一般是客户基于YashanDB驱动开发的应用程序,或者YashanDB提供的客户端工具。

  • 驱动:应用程序和数据库存储之间的接口,每一个驱动实现某一种开发语言对数据库各类操作指令的调用。
  • 工具:一类软件应用程序或工具集,旨在帮助数据库管理员(DBA)和开发人员管理和维护数据库系统。

插件管理

插件管理为YashanDB提供的一个开发框架,用于与第三方合作开发插件,以拓展更加丰富的功能。

单机数据库服务端

包括数据库实例和一系列持久化文件。

数据库实例只在运行态存在,包括一组线程和内存空间,YashanDB采取单进程多线程架构,内存空间则由共享内存区域和私有内存区域两部分组成。

分布式数据库服务端

包括分布式服务组件、节点上的数据库实例和一系列持久化文件。

YashanDB分布式部署采用了Shared-Nothing的架构,各服务组件描述如下:

  • MN Group: MN负责集群的节点管理、元数据管理和分布式事务管理。MN组内节点具有主从关系,通过Raft协议实现节点间的一致性。
  • CN Group:CN负责对外提供接口,接收用户请求,生成分布式查询计划,向DN分发查询计划并汇总执行结果。
  • DN Group:DN负责存储数据,执行CN下发的查询计划。通过DN组提供高可用能力,组内节点具有主从关系,通过Raft协议实现节点间的数据一致性。

共享集群数据库服务端

包含数据库实例、集群服务组件和共享存储管理的持久化文件。

YashanDB共享集群是一种单库多实例的多活集群。部署基于Shared-Disk的架构,各组件描述如下:

  • Instance:多个节点的数据库实例采用聚合内存技术,通过全局资源管理、全局缓存管理以及全局锁管理协同多实例对数据页和非数据类资源的访问,对外提供对等的、强一致的并发读写能力。
  • YCS:集群数据库高可用的核心部件,统一管理集群文件系统、数据库等资源,提供配置、启停、监控等能力,并在各种故障场景下提供仲裁服务,维护全局统一的拓扑状态。
  • YFS:承担集群文件系统管理职责,直接管理裸设备,并提供强一致的文件系统服务给数据库使用。

持久化文件

数据库的持久化文件,确保在掉电等异常关闭场景中数据库仍能启动并正常使用,主要包括:

  • 控制文件:数据库最关键入口信息,保存数据库所包含数据文件、日志文件等结构,以及持久化相关信息。
  • 数据文件:保存所有系统表、用户表(HEAP表/TAC表/LSC表)、以及undo等数据。
  • Slice文件:保存LSC表的稳态数据。
  • 日志文件:保存redo日志,在recovery场景中用于修复脏页,在主备场景中用于向备机复制。
  • 归档日志文件:保存归档的redo日志,在recovery场景中用于结合数据库的备份文件将数据库恢复到特定时间点。
  • 集群配置数据:保存共享集群的管理配置信息,如节点、资源等。
  • 集群运行期数据:记录共享集群运行过程中的相关信息,尤其是在投票时记录相关过程数据。

私有内存区域

私有内存区域是各工作线程运行时分配释放内存的区域,与共享内存区域不同,此区域的内存一旦分配给特定工作线程后就是私有的,释放后才能再次分配给其他线程,各部分描述如下:

  • SQL执行区:SQL执行期使用的堆栈空间。
  • 虚拟内存:即Materialize zone,虚拟内存主要为需要物化数据的SQL算子使用,且在物化对象过大时将磁盘作为虚拟内存使用。

共享内存区域

共享内存区域包括内存共享池、数据缓存和有界加速缓存三个部分。

内存共享池的各部分描述如下:

  • SQL缓存:SQL解析树和执行计划保存在这里,用于同一SQL再次被调用时避免硬解析,节省开销。
  • 日志缓存:redo日志的缓存区,日志并发写入缓存区,批量刷盘。
  • PL/SQL池:存储过程、包、触发器等对象第一次执行时加载到这里,以提高后续再次执行的效率。
  • 数据字典缓存:数据字典是极为频繁使用的信息,缓存于此可以极大提升访问效率。
  • 大对象池:分配大对象的区域,例如超大SQL文本。
  • 全局缓存资源池:存放共享集群的数据块的全局资源元数据信息。
  • 全局锁资源池:存放共享集群的全局锁相关的元数据信息。
  • 全局队列资源池:存放共享集群的全局缓存和锁的排队管理信息。

数据缓存用于当磁盘上的一个Block被访问时,将其事先装载到此区域,且当此区域空间快满时,通过一定算法淘汰不经常使用的Block。

有界加速缓存是基于有界理论的AC对象缓存。

工作线程

工作线程是处理客户端连接请求的线程,可以为会话专有模式或共享模式。

后台线程

数据库后台任务的工作线程,主要包括:

  • 写日志:将redo缓存内容写入redo文件的后台任务线程。
  • 写数据:将数据缓存中脏页数据写入数据文件的后台任务线程。
  • Checkpoint:负责检查点任务的线程。
  • 数据转换:MCOL可变数据向SCOL稳态数据转换的线程。

(以下为分布式部署专有线程)

  • MDS:分布式部署中的元数据管理服务线程。
  • CMS:分布式集群管理服务线程。
  • GTS:分布式部署中的全局时间管理服务线程。

(以下为共享集群部署专有线程)

  • 同步消息处理:采取同步通信方式处理共享集群实例间的各种消息,例如跨实例的事务访问。
  • GRC:共享集群全局资源访问控制线程,实例间异步通信。
  • GLS:共享集群部署中提供全局锁服务的线程,实例间异步通信。
  • GCS:共享集群部署中提供全局缓存服务的线程,实例间异步通信。