鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级

news2024/11/29 8:34:24

在2023年云栖大会上,阿里云数据库产品事业部负责人李飞飞在主题演讲中提到,瑶池数据库推出“DB+存储”一体化能力,结合人工智能、机器学习、存储等方法和创新能力,实现Buffer Pool Extension能力和智能冷温热数据分层能力。在大会的《云数据库RDS年度发布与最佳实践》演讲中,阿里云RDS及OLAP开源产品部负责人彭祥表示,面对当前越来越丰富且复杂的数据环境,性能、弹性、成本是数据库用户的三大重点诉求;阿里云RDS产品在业界率先推出新型存储类型——通用云盘,将云盘的IOPS与容量彻底解耦,增加缓存扩展的能力,用技术提升RDS产品IO性能,降低存储降本。

👉RDS通用云盘IO加速功能现已全网公测,欢迎点击「公测」直达体验。


1. 什么是通用云盘?

介绍通用云盘前,我们先来说说存储。众所周知,数据库架构设计由下至上可分为存储层、引擎层、服务层、网络层。存储层负责数据的持久化存储和读取,处于整个数据库系统架构的最底层。数据存储和数据检索读取是它的两大功能。在数据库中,存储层常见的存储类型,往往有基于物理机本地硬盘的本地盘和基于分布式存储架构的云盘。本地盘存储,数据存储与计算资源位于同一物理服务器节点上,由于数据读写不需要经过网络传输,因此IO延迟通常较低,随机读写性能高,但本地盘的存储容量受限于单个服务器的硬件配置,一旦服务器出现故障,可能影响数据的安全性和可用性,且本地盘存储容量难以独立扩展;云盘基于分布式存储架构,数据存储与计算资源分离,用户可独立地按需调整计算和存储资源,提高了资源的利用率和灵活度,但云盘通过网络为计算节点提供存储服务,多少会对IO延时有所影响,而且,云盘的性能,往往跟其容量绑定,提升性能大部分情况下势必需要提升云盘容量,除此之外,云盘不支持缩容。

而在调研和分析用户业务场景的过程中,我们发现,在多个行业,例如电商行业、新零售行业、游戏行业等,用户业务流量并不是一直持续一个水位,有明显的波峰波谷特征,如何让性能不受容量影响,顺应峰值的到来而提升,如何得到性能(低延迟、高持久)的同时做到完美的成本控制(低成本),已然成为大部分客户在数据库选型中的关注点。阿里云RDS产品,率先推出了通用云盘,同时满足用户关于低成本、低延迟、高持久性的诉求

通用云盘,首先是一种云盘。但与当前业界主流云盘的区别在于,通用云盘深度融合PaaS层和IaaS层的技术创新,改变了传统的数据存储结构,将原有的单一数据存储划分为了三层存储结构:缓存层、数据层、冷存层。热数据存入缓存盘(High Performance Disk),温数据存入数据盘(ESSD云盘),归档数据存入冷存盘(OSS对象存储)。这样的存储结构设计中,将缓存盘作为可扩展的一部分,达到IO加速的效果;基于AliSQL独有的内核能力,轻松应对读写数据库过程中的IO突发情况发生,并支持最小10GB,最大64T的容量空间、云盘缩容以及自动秒级扩容的功能;同时,将不常用的冷数据归档存储于对象存储上,又实现使用成本的节约。通用云盘将IO性能与云盘容量解耦,使得数据层在IO性能与云盘容量两个方面都实现了极致弹性。

image

2. 三层存储是怎样的一种架构?

image

通用云盘的架构设计如上图所示,从左至右依次是缓存层、数据层、冷存层。各层存储各司其职,选择不同的存储介质,在对应存储层中发挥价值最大化。

  • 缓存层处理高IOPS和超低IO时延需求,一般百万级IOPS和微秒级IO时延需求。采用阿里云高速缓存盘(High Performance Disk),结合RDS数据库引擎的缓存技术,实现查询数据库过程中的IO加速功能,带来更高的查询性能。
  • 数据层处理低IO时延和数据可靠性需求,一般万级IOPS和毫秒级IO时延需求。采用阿里云ESSD云盘,保障数据的高可靠性和安全性,并借助基础设施和AliSQL内核的创新能力,以及RDS数据库的管控架构升级,达到IO性能与云盘容量的解耦,实现数据库读写过程的IO突发功能,提升了IO性能与云盘容量的极致弹性。
  • 冷存层处理数据持久化和存储低成本需求,一般存储在冷存层的数据不常被访问,但有超高的数据库可靠性和持久性需求。采用阿里云对象存储(Object Storage Service,OSS),结合RDS数据库引擎的归档技术,实现了数据库的归档功能,并支持通过ALTER TABLE实现表文件在数据层和冷存层的切换,为不常访问的数据表提供了更低成本的存储选择

image

表1:RDS通用云盘三层存储介质对比

3. 通用云盘有哪些特征?

在详解特性技术前,我们整理了一张通用云盘三层存储的特性对比表,如下:

image

表2:RDS通用云盘三层存储特性对比

3.1 缓存层特性——IO加速

IO加速是指提升数据库查询性能的一种特性。该特性主要体现在通用云盘的缓存层,发挥出高速缓存盘的高IO性能优势,从整体上提升数据库的查询性能。相比于ESSD云盘,高速缓存盘具备更高的IOPS上限和带宽上限,以及更低的IO时延。

缓存层通过两种方式实现IO加速:

  • 缓存池扩展(Buffer Pool Extension, BPE):利用高速缓存盘进行缓存池扩展,提高缓存命中率,减少数据层ESSD的访问次数,加快数据库查询速度。
  • 存放临时表/文件:利用高速缓存盘存放临时表/文件,提高临时表/文件的访问速度,进而提高数据库查询性能。

基于此,IO加速特性较适合读负载较高、临时表/文件使用较多的业务场景。当前,RDS的MySQL引擎已支持上述两种方式,RDS的PostgreSQL引擎暂仅支持存放临时表/文件的方式来实现IO加速。

3.1.1 缓存池扩展(Buffer Pool Extension, BPE)

缓存池(Buffer Pool,简称BP)是数据库引擎内存区域的一部分,用于临时存储常用的数据和索引页,从而减少对磁盘的访问次数,提高数据库操作的性能和效率。因此,缓存池越大,缓存命中率就越高,数据库对磁盘的访问次数就越少,整体的查询性能和效率就越高。

但是,缓存池的大小受限于内存资源,而对于数据库系统来说,内存资源的使用往往是比较紧张的。为了能够在不增加内存资源的情况下扩大缓存,并且充分利用高速缓存盘高IO性能的优势,RDS的MySQL引擎实现了缓存池扩展的功能,对内存中的缓存池进行扩充,进一步提高缓存命中率,提升数据库整体查询性能。

图1:缓存池扩展工作原理

缓存池扩展作用原理如上图,一次数据页读取的过程:

        1.客户端侧发起读取数据页的请求。

        2.请求进入内存的缓存池中查找指定数据页:

  • 如果在缓存池中找到数据页,则返回结果给客户端侧,查询和读取结束。
  • 如果在缓存池中未找到数据页,则执行步骤3。

        3.请求进入缓存盘的缓存池拓展中查找指定数据页:

  • 如果在缓存池拓展中找到数据页,则返回数据页给缓存池,再返回结果给客户端侧,查询和读取结束。
  • 如果在缓存池拓展中未找到数据页,则执行步骤4。

        4.请求进入ESSD的数据表文件中查找指定数据页。找到数据页后返回给缓存池,再返回结果给客户端侧。

        5.查询和读取请求结束。

3.1.2 存放临时表/文件

对于数据库引擎来说,内存中的缓存池、磁盘中的临时表/文件都会影响数据库的查询性能。临时表/文件用于当前会话或者查询中,存放数据查询过程中产生的中间结果或者超出内存的结果,一般不需要持久化存储到数据文件中,使用后便会被删除。

基于临时表/文件在业务中的无持久化需求,RDS通用云盘,有别于当前的ESSD云盘,更改了临时表/文件的存储位置。之前,RDS数据库的临时表/文件存放于ESSD数据盘中;而推出通用云盘后,临时表/文件可存储于高速缓存盘中,提升了数据库对临时表/文件的访问效率,进而加快数据库查询速度。

以8核16GB规格为例,IO加速功能测试结果如下:

  • read_only QPS提升80%
  • write_only QPS提升33%
  • read_write QPS提升103%

image

image

image

3.2 数据层特性——IO突发和云盘缩容

通用云盘的数据层采用云盘ESSD作为存储介质,借助ESSD云盘的创新能力实现云盘的IO性能与容量解耦,并结合数据库RDS的管控架构优势和数据拷贝能力实现云盘的缩容,为数据库实现IO性能和云盘容量两方面的极致弹性。

3.2.1 IO突发

高IO负载、波动IO负载是较为常见的两种业务场景。RDS数据库之前接入的ESSD云盘(PL1-3),其云盘IO性能与容量深度绑定,IOPS和带宽上限深受存储容量的限制。在这个限制下,应对高IO负载、波动IO负载的高IO洪峰场景时,云盘扩容成为了获得更高云盘IO性能的唯一解。

RDS的通用云盘在数据库通过技术创新,将云盘的IO性能与存储容量解耦,提供IO性能突发能力,并可根据实际业务的使用量动态调整云盘的IO上限。高IO负载时,自动触发IO突发,提升IO上限,IO负载回落后,自动恢复IO上限,实现IO性能的极致弹性,避免IO性能和成本浪费。

如下测试图例,当开启IO突发后,业务IO高峰时,RDS实例的IOPS使用率会突破100%。

image

图2:RDS通用云盘IO突发测试

目前,RDS通用云盘IO突发功能已支持RDS MySQL、PostgreSQL和SQL Server三款引擎。

3.2.2 云盘缩容

众所周知,云盘不支持缩容。但RDS通用云盘,借助RDS数据库管控架构和AliSQL内核的优势,结合数据拷贝功能,实现了RDS云盘缩容。同时,基于云盘本身的秒级扩容能力,可以让客户根据业务需求自由地调整云盘容量,实现云盘容量的极致弹性。

3.3 冷存层特性——数据归档

通用云盘的冷存层数据层采用对象存储OSS作为存储介质,将表级别数据归档于OSS中,并不影响用户正常查询OSS中归档表数据。开启数据归档功能后,客户可通过ALTER TABLE将表文件在ESSD数据盘与OSS对象存储之间切换,同时在OSS中的归档表支持正常的查询。

OSS存储成本远低于ESSD,所以数据归档功能可以为客户不常访问的表大幅度降低存储成本。数据归档特性较适用于有不常访问或修改的表的业务场景。冷存层通过数据库内核直接访问对象存储和借助JuiceFS访问对象存储OSS两种方式实现数据归档。

3.3.1 数据库内核直接访问对象存储

数据库内核直接访问对象存储是指归档表数据put到OSS中,并通过get访问OSS归档表数据。RDS的MySQL引擎主要采用这种方式。值得注意的是,为确保归档表的兼容性,AliSQL内核采用InnoDB引擎存储格式。因此,缓存池扩展能力(BPE)仍然能够作用于归档表,对其查询性能进行加速。

开启数据归档功能后,可通过执行ALTER TABLE,将正常表上传至OSS转变成归档表,也可通过ALTER TABLE将归档表转为正常表。归档表目前仅支持读操作,用户可通过SELECT语句访问归档表中的内容。MySQL内核会对用户指定的归档表执行具体操作如下:

  • 将数据表对应的ibd文件,按照oss_block_size指定的大小(默认2MB)切分成文件块。
  • 利用OSS的sdk将切分后的文件块上传到OSS中。
  • 在ESSD数据盘上保留space header文件,加速实例的启动和表文件的扫描速度。

image

图3:RDS MySQL冷存归档数据流

3.3.2 借助JuiceFS访问对象存储

借助JuiceFS访问对象存储OSS的数据归档方式,主要用于RDS PostgreSQL引擎。

这种方式下,开启数据归档功能后,RDS PostgreSQL实例除了数据目录外,会增加归档目录/cold-jfs及对应的表空间rds_oss。客户可通过ALTER TABLE语句将对应的表转移到rds_oss表空间中。处于rds_oss表空间中的数据会借助JuiceFS文件系统上传到OSS上,并不占用ESSD数据盘空间。rds_oss表空间中的所有表均为归档表,客户可以用正常的查询语句查询归档表中的数据。

image

图4:RDS PostgreSQL冷存归档数据流

RDS MySQL冷存表只读性能测试结果如下:

相比于正常表,冷存表的QPS是正常表的15%左右。

image

4. 总结

性能、弹性、成本,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的通用云盘,是PaaS层和IaaS层的深度融合的技术最佳实践,通过三层存储架构设计(缓存层、数据层和冷存层),每一层采用使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1432410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 高并发服务器

多进程并发服务器 使用多进程并发服务器时要考虑以下几点&#xff1a; 父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)系统内创建进程个数(与内存大小相关)进程创建过多是否降低整体服务性能(进程调度) server /* server.c */ #include <stdio…

【刷题题解】最长回文子序列

给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列 这道题&#xff0c;一眼动态规划&#xff0c;但是即使动起来也规划…

TrinityCore安装记录

TrinityCore模拟魔兽世界&#xff08;World of Warcraft&#xff09;的开源项目&#xff0c;并且该项目代码广泛的优化、改善和清理代码。 前期按照官方手册按部就班的安装即可。 注意几点&#xff1a; 1 需要配置Ubuntu22.04版本的服务器或者Debian11 服务器。2 需要使用gi…

python_ACM模式《剑指offer刷题》链表4

题目&#xff1a; 面试tips&#xff1a; 询问是否需要判断环&#xff0c;可微调下方代码。 思路&#xff1a; 思路一&#xff1a; 判断环是否存在&#xff1a;设定一快一慢指针&#xff0c;均从头节点出发&#xff0c;快指针一次走两步&#xff0c;慢指针一次走一步。若无环…

docker安装-centos

Docker CE 支持 64 位版本 CentOS 7&#xff0c;并且要求内核版本不低于 3.10 卸载旧版本Docker sudo yum remove docker \ docker-common \ docker-selinux \ docker-engine使用yum安装 yum 更新到最新版本: sudo yum update执行以下命令安装依赖包&#xff1a; sudo yum…

[设计模式Java实现附plantuml源码~结构型]处理多维度变化——桥接模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

SpringBoot第二天

Bean管理 Bean扫描 在Spring中&#xff0c;Bean的扫描有两种写法 第一种是在xml配置文件中用标签扫描 <context:component-scan basepackage"com.cacb"/> 第二种是是注解扫描 ComponentScan(basePackages"com.cacb") 而在SpringBoot中&#xf…

张维迎《博弈与社会》威胁与承诺(4)宪政与民主

有限政府 动态博弈理论对我们理解民主与法治具有重要的意义。 自人类进入文明时代以来&#xff0c;政府就是社会博弈重要的参与人。任何社会要有效运行&#xff0c;都需要赋予政府一些自由裁量权。但如果政府的自由裁量权太大&#xff0c;政府官员为所欲为&#xff0c;不仅老百…

Jetson AGX Orin安装Anaconda,Cuda,Cudnn,pytorch,Tensorrt,ROS

Anaconda&#xff1a;https://repo.anaconda.com/archive/ Cuda&#xff1a;https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 1&#xff1a;安装Anaconda3 下载&#xff1a;Anaconda3-2021.11-Linux-aarch64.sh chmod x Anaconda3-2021.11-Linux-aarch64.s…

瑞_23种设计模式_工厂模式

文章目录 1 什么是工厂模式案例案例代码 2 简单工厂模式&#xff08;Simple Factory&#xff09;2.1 简单工厂模式的结构2.2 案例改进——简单工厂模式2.3 案例改进代码实现2.4 简单工厂模式优缺点2.5 拓展——静态工厂 3 工厂方法模式&#xff08;Factory Method&#xff09;★…

OJ_整数奇偶排序

题干 c实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<algorithm> using namespace std;//compare函数不交换返回true bool compare(int a, int b) {//1.a奇数&#xff0c;b偶数&#xff0c;不交换//2.a奇数&#xff0c;b奇数&#xff0c;a比b…

openGauss学习笔记-213 openGauss 性能调优-总体调优思路

文章目录 openGauss学习笔记-213 openGauss 性能调优-总体调优思路213.1 调优思路概述213.2 调优流程 openGauss学习笔记-213 openGauss 性能调优-总体调优思路 213.1 调优思路概述 openGauss的总体性能调优思路为性能瓶颈点分析、关键参数调整以及SQL调优。在调优过程中&…

【Redis】整理

对于现代大型系统而言&#xff0c;缓存是一个绕不开的技术话题&#xff0c;一提到缓存我们很容易想到Redis。 Redis整理&#xff0c;供回顾参考

TiDB架构设计和实践:高性能分布式数据库解决方案

摘要&#xff1a;TiDB是一个开源的分布式NewSQL数据库&#xff0c;具备强大的水平扩展能力和高性能查询能力。本文将介绍TiDB的架构设计和实践经验&#xff0c;帮助读者了解如何利用TiDB构建可靠、高性能的分布式数据库系统。 正文&#xff1a; ### 1. 引言 随着互联网规模的…

Struts2远程代码执行漏洞复现

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、漏洞介绍 Struts2漏洞是一个经典的漏洞系列&#xf…

探索智能巡检机器人深度学习的奥秘

机器人深度学习&#xff08;Robot Deep Learning&#xff09;是指利用深度学习技术&#xff0c;使机器人能够从大量数据中学习和提取特征&#xff0c;进而实现自主感知、决策和行动的能力。通过深度学习算法&#xff0c;机器人可以从传感器获取的数据中自动学习模式和规律&…

【SpringBoot】ApplicationContextAware 与 @Autowired 注解效果是一样,但是时机不一样

一、区别 ApplicationContextAware 是一个接口&#xff0c;它提供一个方法 setApplicationContext &#xff0c;当 spring 注册完成之后&#xff0c;会把 ApplicationContext 对象以参数的方式传递到方法里&#xff0c;在方法里我们可以实现自己的逻辑&#xff0c;去获取自己的…

深入了解关联查询和子查询

推荐阅读 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;一&#xff09; 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;二&#xff09; 文章目录 推荐阅读关联查询子查询 关联查询 关联查询 从多张表中查询对应记录的信息&#xff0c;关联查…

C++参悟:扩展资源

有用的资源 一、概述二、模式、手法、提示和技巧1. cpppatterns2. C Core Guidelines3. MSDN 三、第三方库 一、概述 在 cppreference 中我发现了很多比较有趣的扩展资源。我是从其官网下载的离线 chm 版本以便查看 https://zh.cppreference.com/w/%E9%A6%96%E9%A1%B5 在我下…

一款轻量级、高性能、功能强大的内网穿透代理服务器

简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协议&#xff08;访问内网网站、本地支付接口调试、ssh访问、远程桌面&#xff0c;内网dns解析等等……&#xff09;&#xff0c;此外还支持内网htt…