GaussDB技能解读——GaussDB架构先容(五)

[复制链接]
发表于 2026-2-27 13:32:57 | 显示全部楼层 |阅读模式
GaussDB架构先容(四)从云原生关键技能架构&关键技能方案两方面对GaussDB云原生架构举行相识读,本篇将从关键技能方案的事故存储组件、SQL引擎组件、DCS组件、实时分析组件等方面继续先容GaussDB云原生架构。
目次

事故存储组件
1、本地内存和长途内存两级缓存
2、页面查找机制
3、支持长途内存池, 内存独立扩展。
4、本地缓存长途页面所在,页面所在共享,全RDMA/UB单边读写。
5、Lamport LSN
SQL引擎组件
DCS组件
1、署理层
2、数据管理
实时分析组件
PageStore组件
备份规复组件
安全


事故存储组件

云原生数据库支持透明多写,全部节点对等,每个盘算节点都可以读写全部的数据页面,事故在本节点实验,没有分布式事故。每个盘算节点都有Local buffer pool,接纳Remote memory pool扩展盘算节点的内存,在多个盘算节点之间共享buffer所在,制止页面在多个盘算节点之间传来传去。存储引擎接纳Inplace update引擎,底层存储接口同一接纳段页式存储方式。事故ID本节点分配,包管唯一性。事故提交时间戳同一分配,归并原来的CLOG和CSN LOG同一记载。存储层接纳Log is data,把数据库存储引擎的恒久化卸载到Page Store实验日志日志恒久化,日志日志回放修改页面,创建查抄点。


图1 分布式缓冲池表现图

在盘算节点,分布式缓冲池位于数据访问层和分布式存储层的中心,全部的数据访问都要颠末缓冲池。分布式缓冲池必要包管页面数据的同等性和页面查找访问的高效性,是云原生数据库实现透明多写,内存资源弹性的关键模块。具体计划如下:
1、本地内存和长途内存两级缓存

本地内存和长途内存的读写时延差异非常大(30~100ns 和 800ns~5us的区别), 哪些页面在本地缓存,哪些页面在长途缓存非常关键。同时尚有一个紧张的因素必要思量,那就是页面是否在多个盘算节点被读写,因此云原生数据库把页面分为三大类,一类是页面在多个盘算节点被读写(Heap页面,FSM页面),得当存放在长途内存里,页面所在共享;一类是页面大概率被读,险些不被修改大概极低概率被修改(索引的非叶子页面,体系表的页面)得当存放在本地内存;别的一类是页面只在固定的单节点被读写,(智能路由优化后索引的叶子节点页面),得当存放在本地内存。
理想的页面分布情况如下图所示:


图2 理想页面分布表现图

2、页面查找机制

每个页面缓存对应一个元信息,称为page directory(PD),它形貌了页面的最新版本在哪个节点,也就是page owner node(PON),页面是否是共享的长途页面所在,以及长途页面所在。PD 也是分布在各个盘算节点上,每个盘算节点管理一部门PD, 接纳同等性Hash的方法管理PD。


图3 页面查找表现图

索引页面按照Range主动汇聚算法,根据SQL访问把相干页面汇聚到一个节点,进步索引访问的本地内存的亲和性。
索引的叶子节点本身就是从左到右按照索引key的巨细序次存放的,因此很容易根据索引的叶子节点主动分别Range,SQL优化器的路由模块按照Range路由就可以让索引页面按照Range汇聚到SQL节点的本地缓存里实现亲和性访问。针对多个索引的多个Range的亲和性场景,优先选择主键作为亲和性的Range路由。
3、支持长途内存池, 内存独立扩展。

云原生数据库在云上支持各种业务负载,CPU、MEM和Storage的配比很难一开始就设置符合,有的是盘算麋集型的业务,有的是内存麋集型的业务,有的是存储容量大的业务。针对各类业务场景,云原生数据库必要提供风雅的各种资源的独立扩展本事。支持长途内存池,实现了集群物理内存独立扩展。内存池是可选服务,也可以跟盘算节点合摆设。
4、本地缓存长途页面所在,页面所在共享,全RDMA/UB单边读写。

页面如果频仍在多个节点被读写,为了制止页面在多个节点之间传来传去,接纳共享页面所在的方式,SQL节点Local buffer pool里缓存页面的长途所在,通过全单边读写长途页面。在计划上必要思量读写页面的Latch标题以及写页面过程中故障的处理处罚标题。对于exclusive latch接纳lock bit和lock owner node的方式表现,对于share latch,lock bit和lock owner node的方式无法表现, 由于可以有很多发起者同时持有share latch。因此云原生在计划上接纳lock-free无锁机制读取页面。
5、Lamport LSN

在云原生数据库多写的架构下,每个节点有独立的日志日志流,本地日志流的LSN是本地分配维护的,本地有序逻辑递增,页面在各个SQL节点之间分别被修改的情况下,必要包管在新节点上修改页面产生的日志LSN要比这个页面之前的日志LSN要大才可以,也就是说从多个节点修改过同一个页面,日志固然在各个节点独立的日志流里,但是要维护修改页面的日志序次LSN。Redo日志在多个SQL节点都存在,必要包管这些日志的LSN序次,才可以包管日志回放的序次精确性,因此接纳Lamport LSN。这部门的具体计划请参照文档<< GaussDB Kernel TD V600R001C00 XLog日志体系计划分析书.docx>>。


图4 页面Lamport LSN维护表现图

SQL引擎组件

云原生数据库SQL引擎继续原来openGauss的词法分析,语法分析,查询重写,查询优化和实验引擎的本事。由于云原生数据库是shared disk 架构,一个事故在一个节点上实验,以是不必要原来分布式根据分布式key举行数据分布,分布式实验和分布式2PC提交的本事。为了支持数据库粒度的异地多活,云原生数据库引入了CDB和ADB的概念,SQL引擎在访问表等对象的过程中,必要记载当前实验的数据库上下文信息,内存上下文根据CDB来分配和管理,而且必要把当前的CDB信息透传到存储引擎,把日志恒久化到相应CDB的日志流中。
云原生支持SQL读写同等性路由,根据当前会话的数据同等性要求和CDB的主备把SQL路由到相应集群举行处理处罚。云原生支持SQL数据亲和性路由,根据数据的访问亲和性对数据举行汇聚,SQL优化辨认出数据分区所在节点后,把SQL路由到相应节点举行处理处罚。
云原生恒久演进要求数据和步调的解耦,在SQL引擎中实现体系表存储和分析的解耦,实现体系表的前向兼容。
DCS组件

云原生数据库支持DCS一是为了DCS可以或许支持恒久化本事,二是构建一站式的云数据库服务本事。DCS原来是一个share nothing的分布式集群,有本身的通讯管理,集群管理和客户端。在云原生数据库中,DCS是作为一个组件集成到整个服务中,紧张提供字符串(String)、哈希(Hash)、列表(List)、聚集布局(Set、SortedSet)等数据范例的直接存取,包罗署理层实现消息收发分析,KV数据的根本读写,数据分片管理和数据存储等功能。通讯和集群管理使用云原生的通讯和集群管理。


图5 DCS方案表现图

表1 DCS紧张模块

模块功能形貌 署理模块
  依据GaussDB消息协议实现消息分析、消息封装等功能。署理在DCS服务端集成,不存在现实的署理节点。引入署理的紧张目标是屏蔽客户端对服务端实现细节的感知。
  数据管理
  实现数据分片分布和管理,保障数据可靠性。通过跳表实现逾期删除和对象接纳,保障租户内存复用。同时实现双云同步功能。
  存储模块
  以分片数据为细粒度实现数据的内存存储、逻辑恒久化、多版本备份等本事。
云原生DCS服务继续原来DCS内存KV数据的CRUD、路由管理、跨DC复制、逻辑恒久化、逾期删除、对象接纳、数据核查等数据处理处罚功能,必要调解新增的模块功能如下:
1、署理层

原来DCS客户端协议与Redis兼容,Redis客户端使用RESP(Redis序列化协议)与Redis服务器举行通讯,RESP位于TCP之上,客户端和服务器是保持双工的毗连。云原生客户端可同时支持SQL使用和KV使用,除了SQL使用的前后端消息协议,还必要思量KV使用的通讯协议。云原生数据库计划目标要求DCS的KV接口完全兼容,但不要求兼容redis原生客户端,以是在反面SQL使用通讯协议辩论的条件下,DCS的通讯协议继续原来的实现方式,对于辩论的部门,优先包管SQL的通讯协议,调解DCS的通讯协议实现。
2、数据管理

数据分片分布基于同等性hash算法,实现分片数据和盘算节点的映射。数据分区照旧基于经典的同等性hash算法,将(0~2^64-1)的所在空间分别为固定细粒度的分区,主键的hash值会映射到固定的分区中,数据内存存储通过DCS数据管理模块实现。盘算节点通过模仿表情势将KV数据存放到存储引擎实现数据落盘。
3、DCS在云原生数据库中是shared disk架构,全部节点对等,在DCS初始化时,必要通过同等性hash盘算分区管理的owner,在一个节点故障关照同等性视图调解时,必要选择一个节点接受故障节点的分区,而且通过数据库的存储引擎读取数据,规复内存数据布局。
4、DCS提供GR地理复制本事,支持DCS数据举行跨DC数据备份,实现DC故障时业务的无损切换,实现DC容灾。一个源端集群对应多个备份集群,为包管集群可以或许跨DC通讯,通过GR Link创建跨DC的链接,Link代表一个DC到别的一个DC的复制和备份关系的有向链接。用户通过设置好的GR同步备份或复制的规则,才华触发数据同步。LINK、RULE的使用接口在DCS内部实现,规则恒久化到体系表或设置表。DC同步跨集群消息转发接纳云原生数据库通讯体系中跨集群通讯服务处理处罚。
实时分析组件

云原生数据库以OLTP为主,同时也支持基于OLTP数据的OLAP需求,如逐日报表。在云原生数据库中,DBA可以选择为这部门表创建列存索引。创建完列存索引之后,实验器在做序次扫描的时间,会主动选择列存索引举行数据的读取,实现快速扫描盘算的本事。
云原生数据库以行存为底子,数据的增编削都先以行存的情势落到数据库中。事故、xlog等机制保障了行存的ACID特性。行存接纳Inplace-update引擎,一个Tuple一旦被插入到表中,位置根本不会改变。每个Tuple可以用它的物理位置(文件页号+页内偏移,称为RowID),作为唯一标识。事故的多版本在回滚段中,可以根据RowID直接访问。云原生数据库中的列存索引方案如下图所示:列存是根据行存构建的一个read-only的副本,每次对行存的更新使用会在元数据地区(In Memory Delta Unit,IMDU)增长一条RowID记载。列存扫描的时间会查察元数据地区,确定哪些Tuple已经失效,再去行存中根据RowID读相应的数据。背景线程会周期性地更新列存,接纳元数据。如果列存索引和更新使用不在同一台呆板上,使用batch模式,即把一个事故中产生的全部失效信息,同一打包到一个RPC哀求中,发送给列存索引所在的实例上,从而淘汰对OLTP哀求的影响。行存的block为8KB,列存必要较多的数据量才华实现更好的压缩、向量化使用等优化。以是一个IMCU对应多个行存的block,如今暂定为1024个,如许一个1024个block称为一个Super Block。


图6 列存索引表现图

为了支持列存巨细凌驾内存容量的场景,列存索引支持从内存中置换到磁盘上。但是列存本身在故障情况下并不能包管自身的同等性,故障重启之后列存必要根据行存的内容重新构建。以是这里的磁盘对于列存来说,是内存的延伸,用来缓存额外的数据。由于DU容量小,且经常被修改,以是可以常驻内存。
列存索引和行存完满是解耦开的。摆设形态上,列存索引既可以与行存在一个实例中,节省物理资源;也可以与行存在差异的实例中,制止OLAP哀求对OLTP哀求产生影响。两种摆设形态分别如下图所示:


图7 行存列存混淆摆设表现图



图8 行存列存分开摆设表现图

PageStore组件

PageStore是一个分布式存储,对外提供SAL接口,SQL节点通过SAL接口举行日志和页面的恒久化服务,PageStore对象间的映射关系如下图所示。
Page Cluster Manager Control Server(集群管理):页面集群管理控礼服务负责整个存储节点的管理,VFS和StoreSpace的管理,以及Slice的分配和调理。
VFS:假造文件体系,每个租户可以创建一个VFS,集群管理按照VFS统计容量和IO等信息;
PG(Placement Group,放置组):多个存储节点构成一个PG,PG的多个存储节点满足反亲和性。集群管理在分配Slice的时间,按照PG举行分配。
Slice:数据存储的根本单位,Slice分配到具体的某个PG,分配到PG后,Slice就运行在PG下的多个节点上。每个Slice管理10G的数据量,10G的数据大概来自多个文件的一段一连页面。Slice逻辑上紧张实现SQL节点页面的恒久化和快速检索。Slice的元数据接纳Btree管理,多个节点的Slice副本通过Raft机制提供数据的可靠性。每个Slice是数据回放的根本单位,实现独立的快照和查抄点。Slice存储管理如下图所示。
存储节点:每个存储节点上运行一个PageStore历程,PageStore历程会管理多个Slice。PageStore历程内的全部Slice共享BufferPool、ThreadPool、通讯组件、消息分发和PAL等模块功能。多个Slice共享PageStore历程的CPU资源和内存。
文件:抽象的存储,为Slice存储数据,Slice会使用多个文件来存储数据。
PAL:恒久化层,用于对Slice的文件举行恒久化,下面可以对接LocalFS、Plog、Lun等。图中赤色虚线框为PageStore提供的本地皮恒久化方案。


图9 PageStore对象关系表现图



图10 Slice存储管理表现图

备份规复组件

备份和规复PITR紧张是为了应对人为失误、硬件故障和天然灾难等。云原生数据库默认支持一级备份,一级备份是分布式存储Page Store基于append only实现的快照功能,快照数据生存在本集群,用户可以设置开始一级备份的时间段、频率以及保存时间,由OM_Server根据集群的负载等数据天生备份筹划。一级备份即是是数据页的备份,为了实现PITR,在开启一级备份后,会默认开启日志归档,通过快照数据+日志实现快速PITR。
用户可以设置开启二级备份,一级备份数据生存在本集群,会占用用户生产集群的空间且全闪情况下费用较高,同时为了进步备份数据的可靠性,云原生数据库提供二级备份将备份数据及日志生存在OBS等远端存储上。当一级备份的保存时间逾期时,云原生数据库会主动将其转储为二级备份,转储乐成后主动删除一级备份的快照。同样用户可以设置二级备份的保存时间,二级备份保存时间逾期时会主动将远端存储备份删除。
在规复时,由于云原生数据库一个页面大概涉及多个日志流,必要对多个日志流举行扫描,对日志举行归并规复。在扫描日志阶段可以根据规复设置文件设置的规复点确定规复的位置,从而在正式规复时规复到这个时间点即可。
安全

云原生数据库是一个分布式体系,各个服务之间,服务与外部应用和外部用户之间,服务与内部应用和内部用户之间紧张通过通讯举行交互,它们的数据流图如下图所示。


图11 安全威胁分析表现图

从图中可以看出,云原生紧张包罗三个通讯平面,OM_Monitor,OM_Agent,OM_Server构成的管理平面(使用维护),GaussDB Master Server和DB Cluster Resource Schedule Server构成的控制平面。GaussDB Server,DCS Server,Memory Server,Message Server,Page Server,Page Cluster Manager Control Server构成的用户平面。
云原生体系外部交互紧张有三类接口:
第一类是GaussDB Server,DCS Server提供的业务访问接口,这个接口是外部接口。
第二类是OM_Server提供的使用维护接口,这个接口对接公有云的维护背景。
第三类是Message Server提供的跨地区集群的消息通讯接口,这个接口固然是内部接口,但通讯网络不在内部网络。
云原生数据库是一个池化的共享资源体系,差异租户的运行情况通过历程隔离,租户的存储通过VFS举行隔离。为了包管租户数据不泄漏,不发生篡改,在控制平面必要对租户身份举行署名认证,租户资源调理信息的通报必要防止仿冒和篡改。在用户平面,差异租户的数据使用差异的秘钥举行加密,对于长途内存使用的RDMA rkey举行随机化,其他安全继续原来数据库的本事,包罗用户管理、权限管理和审计。在维护平面,对接入的访问举行认证,对举行的使用举行审计。
- END -


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表