VLDB 2024论文解读丨GaussDB:计算-内存-存储三层池化解耦的多主云原生数据库

华为《GaussDB: A Cloud-Native Multi-Primary Database with Compute-Memory-Storage Disaggregation》论文被国际数据库顶会VLDB 2024收录,该论文创新性提出了GaussDB云原生数据库的三层池化解耦架构,以及实现多节点透明多写的核心技术。通过三层池化解耦技术,显著提升了云数据库弹性能力;通过分布式内存缓冲池、热温冷数据分层自适应读写、本地亲和性读写、数据智能路由与汇聚、细粒度页面级Lamport LSN等技术,提升了数据库的透明多写性能;通过内存和磁盘双检查点、Past Image就近页面恢复等机制,实现节点故障秒级恢复(RTO<6s),存活节点持续运行,业务不中断;提出计算层无状态设计机制,实现了秒级计算节点弹性伸缩,提出了基于Bucket的细粒度一致性哈希算法,实现内存节点在线弹性扩展。

下面对论文进行全方位解读,揭开GaussDB云原生数据库的面纱。

背景介绍

新应用场景持续涌现、业务负载快速增加,叠加新硬件技术的不断突破,成为推动数据库架构演进变革的重要推力。OLTP关系型数据库自问世以来,先后出现了主备架构、shared-disk多主架构、shared-nothing分布式架构和云原生存算分离主备架构。如何在云环境下充分发挥先进硬件优势,突破现有架构吞吐扩展能力瓶颈,成为近些年工业界和学术界研究的热点,云原生三层解耦多写数据库正是在这样的背景下产生的。

核心技术解读

高性能

以D*和O*为代表的传统shared-disk多主架构,支持多节点透明多写,具备一定的吞吐扩展能力,在很长一段时间成功的支撑了企业关键业务负载。但其限制也很明显,首先D*和O*多写架构依赖专有硬件,弹性伸缩能力差,TCO较高,用户易被Lock in,在云计算和通用服务器大行其道的背景下,越来越多的用户希望多写架构能够运行于开放平台之上。另外,D*和O*的多节点并发事务状态多采用中心化模式设计,导致其扩展线性比较低,在重业务负载情况下,资源的扩展并不能带来对等的性能收益,导致其业务承载能力受到限制。

为继承D*和O*透明多写能力,同时充分利用云平台资源弹性和RDMA高速网络等先进硬件技术,当前业界头部数据库厂商均积极研究云原生多写架构。近期,某云厂商推出的云原生多主数据库,采用计算-内存-存储三层解耦的云原生架构设计,基于中心化组件实现多节点透明多写,是该方向架构演进的一个突破。但从其发表论文的测试数据来看,32节点TPCC吞吐为910万tpmC,而华为GaussDB云原生数据库在相同32节点可达3000+万tpmC的吞吐能力,支持128节点(16384鲲鹏核心)部署,能够支撑PB级OLTP业务规模,目前已在华为内部支撑实际业务生产。

存在上述性能差距的原因,笔者认为有如下几点:

第一,国内云厂商多写数据库的页面跨节点修改,采用进程级LLSN实现WAL记录的保序,而GaussDB云原生数据库采用细粒度页面级Lamport LSN保序,进程内无全局冲突点,在多核/众核环境下扩展性更强,能够更好的发挥硬件算力。

第二,GaussDB云原生采用页面亲和性设计,脏页面无需回写共享内存,而该云厂商数据库采用中心式全量脏页面管理机制,事务产生的脏页面均须回写共享内存,造成大量页面在网络间频繁传递。

GaussDB云原生数据库架构图

GaussDB云原生数据库在节点亲和性算法设计方面,除了分布式缓冲池的页面属主和读授权机制外,Undo段和FSM算法也充分考虑了节点亲和性设计,将节点间的网络交互降至最低,确保极致性能。

在Undo segment的节点亲和性设计上,从undo tablespace分配空间,多节点共享undo tablespace,而每个计算节点使用分布式锁机制亲和性分配Undo segment,每个Undo segment同一时刻只能被一个计算节点绑定。

Undo segment亲和性分配机制图

在FSM空闲空间管理节点亲和性算法上,针对Heap FSM采用自动分区机制优化表数据插入分配页面算法,减少节点间冲突;针对索引空页面管理,采用自动分区机制优化索引查找空页面算法,减少节点间冲突。

空闲空间管理亲和性分配机制

高可用

在高可用方面,GaussDB云原生数据库的节点故障能够做到6s内恢复,且对其他正常节点无影响,而其它厂商需要30s以上。可用性存在上述差异的根本原因在于,该云厂商部署在共享内存层支撑多写的核心组件存在单点问题,保存其上的全量脏页面、锁、事务状态等信息,在故障时需要全量恢复,特别是全局Buffer Pool,需要从共享存储的检查点依次恢复,较为耗时。与之相对比,GaussDB云原生围绕高可用做了大量创新:

首先,共享内存无脏页状态设计,仅内存节点故障时无需恢复WAL;

其次,计算节点采用Past-Image设计,计算节点故障可从最近Image恢复,恢复时间大幅减少;

最后,GaussDB云原生业界首创双check-point设计,计算节点故障从内存检查点恢复,只有计算节点和共享内存节点同时故障时,才从共享存储的检查点恢复WAL。

双check-point设计机制

高弹性

在弹性扩展方面,GaussDB采用计算-内存-存储三层池化解耦设计,支持分层独立弹性伸缩,对应用透明。计算层将全局锁和页面属主目录(POD,Page Owner Directory)等状态下沉至共享内存层,本地仅保留数据页面,计算层增删节点无需状态信息迁移,实现秒级弹性伸缩;共享内存层采用POD方式管理缓冲池页面属主关系,POD基于一致性Hash均匀分布在共享内存层,增删节点仅迁移少量Bucket,内存层秒级弹性,应用无感知。

分层弹性伸缩

论文总结

GaussDB云原生数据库,打造计算/内存/存储三层池化架构,实现多节点透明多写、分层弹性伸缩、秒级快速恢复、秒级节点扩展能力,为用户带来最大价值。GaussDB持续创新,打造新型竞争力,为世界提供更优选择。

欢迎小伙伴吗交流~

相关推荐
Casual_Lei2 分钟前
Neo4j
数据库·oracle·neo4j
IT枫斗者10 分钟前
集合工具类
java·linux·数据库·windows·算法·microsoft
大厂小码哥36 分钟前
图解Redis 01 | 初识Redis
数据库·redis·缓存
咚咚?2 小时前
麒麟操作系统 MySQL 主从搭建
数据库·mysql
爬山算法3 小时前
Oracle(130)如何启动和关闭Oracle数据库?
数据库·oracle
天荒地老笑话么4 小时前
MySQL——数据库的高级操作(三)权限管理(1)MySQL 的权限
数据库·mysql
天荒地老笑话么7 小时前
MySQL——数据库的高级操作(二)用户管理(1)uer表
数据库·mysql
GG编程7 小时前
Mysql 索引
数据库·mysql
Python私教7 小时前
Go语言现代web开发13 方法和接口
前端·数据库·golang
yaoxin5211239 小时前
第二十三章 加密安全标头元素
前端·数据库·安全