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

举报
GaussDB 数据库 发表于 2024/09/02 16:58:24 2024/09/02
【摘要】 华为《GaussDB: A Cloud-Native Multi-Primary Database with Compute-Memory-Storage Disaggregation》论文被国际数据库顶会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持续创新,打造新型竞争力,为世界提供更优选择。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。