立即注册
登录
搜索
前端开发
后端开发
虚幻引擎
U3D引擎
体感研发
数据库
论坛
BBS
本版
帖子
用户
麒麟软控
»
论坛
›
麒麟软控
›
数据库
›
DTCC演讲整理 | 可计算存储在数据库应用场景的实践 ...
返回列表
发新帖
DTCC演讲整理 | 可计算存储在数据库应用场景的实践
黄工
黄工
当前离线
积分
7
1
主题
5
帖子
7
积分
新手上路
新手上路, 积分 7, 距离下一级还需 43 积分
新手上路, 积分 7, 距离下一级还需 43 积分
积分
7
发消息
发表于 2023-3-3 12:20:30
|
显示全部楼层
各位线上的朋友,大家好。很高兴能在这里给大家分享《可计算存储在数据库应用场景的实践》。这次演讲的内容主要是围绕可计算存储原理以及如何给企业数据库降本增效。
首先有些朋友对可计算存储这个概念还比较陌生。所以这里我先来简单介绍一下背景。近十多年来,数据的产生和使用出现爆发式增长,而存储产能却跟不上,这给IT系统带来巨大的挑战。其中之一就是企业数据存储成本在增加。为此很多数据库提供数据压缩方案。
但是,随着摩尔定律的失效,CPU性能增速变缓,面对海量数据的运算需求,单机的CPU算力也逐渐成为问题。当传统的计算和存储方案很难满足数据增长需求时,就需要通过创新来提升计算和存储的效率。其中一个有效的解决方案就是让计算和存储分流,将部分计算交给更专业高效的设备去完成。
比如说AI复杂的计算下推给 GPU/TPU等芯片,网络方面繁重的压缩和加密运算交给智能网卡等芯片,存储的压缩和加密可以卸载到SSD内部。这个就是可计算存储诞生的背景。
在产业界有个可计算存储工作组,专门从事计算存储标准和模型规范的定义。ScaleFlux是这个组织的创始成员之一。ScaleFlux创立于2014年,从事可计算存储的研究和生产销售,是大规模部署可计算存储的领导者。
ScaleFlux目前已经推出第三代可计算存储产品 SFX3000 。SFX3000 本质上还是企业级NVMe SSD,新增内置计算加速引擎,在成本和性能上给SSD带来很大的变化。
我们来具体看看SFX3000 的产品特性。首先我们可以看到很多企业级NVMe SSD基本的特性。像支持PCIe 4.0协议、U.2接口、S.M.A.R.T工具、TRIM、LDPC纠错等等。同时也看到 SFX3000独特的特性,如透明压缩/解压缩、原子写等。后面我们将逐步介绍透明压缩、原子写对SSD成本和性能的影响。
首先我们来看CSD透明压缩的原理。
右图是应用读写SSD的示意图。上面是应用,中间是OS内核层,下面是硬件层。数据读写从文件系统到通用块层到NVMe驱动,通过PCIe接口,发送到SSD内部,再通过后端闪存控制器发送到后端闪存NAND。普通SSD读写路径就是这样,CSD不一样的地方是在数据进入SSD后会通过硬件压缩,然后再发往后端闪存。
这个压缩逻辑主要是硬件电路实现,不占用主机CPU。同时对读写延时的影响非常小,但是会大大压缩后端闪存带宽使用率。
我们的研究表明,当前端接口是PCIe 4.0和5.0时,前端带宽通常不是应用读写的性能瓶颈,而SSD内部的后端闪存带宽更容易成为性能瓶颈,尤其是对SSD读写延时影响比较大。
左下角是SSD读写延时等待跟SSD闪存带宽使用率关系。可以看出,使用率越低,前端读写延时等待也越低。这就是 CSD在性能方面更好的关键原理。后面我们可以通过很多组测试数据来证明这点。不过,SSD后端NAND带宽利用率不好观测,但是SSD的写放大因子却可以。
透明压缩不光能降低后端NAND带宽利用率,还能抑制降低SSD的写放大。
这里我稍微赘述一下SSD写放大的原理。SSD的写原理比较像 LSMTree数据库,支持新增写,但不支持原地修改,只能通过异地更新来间接实现业务修改。
如下面闪存写示意图。业务先后写入ABCDEFGH数据后,要更新ABCD,只能再找新的页写入A’B’C’D数据。那老的ABCD数据就是垃圾数据,它们所在的闪存页不能用于写入,除非擦除掉。而闪存擦除的单位是块,一个块里可能有几百个页,里面有些页还有有效数据。
所以擦除之前需要对当前块上有效数据进行搬迁。这个数据搬迁不是业务发起的,是SSD后台GC线程发起的,会占用部分闪存后端带宽。SSD的NAND写入量是可以观察的。这种业务写引发的SSD额外的写活动就叫写放大。SSD都提供有接口可以计算SSD的写放大因子。标准的SSD写放大值通常是大于等于1。
最右边的图就是CSD的闪存写示意图,可以看到由于有了透明压缩,同样的数据占用的闪存页更少,所以剩余空间相对比较足,GC的必要性不是很高,GC活动就相对很少,数据搬迁自然也少,写放大就很低。CSD的写放大是可以小于1的。
前面我们从理论上分析CSD透明压缩可以抑制写放大,那接下来我们就看具体的测试数据如何证明这点。
为此,我们测试写入了多组不同压缩特性的随机数据。可以看出橙色的写放大因子随着FIO数据压缩比的增加而下降,最低的时候在0.5左右。对于SSD标盘,当测试方法定了后,不管数据自身如何变化,其写放大因子基本保持不变,随机写场景写放大一般在3以上。
CSD透明压缩不光是改变了SSD的写放大因子,还增加了SSD的寿命(DWPD值)以及随机读写IOPS值。
图中绿色的是SSD的寿命DWPD,从写放大因子公式推导出来。柱状图是4KiB随机写IOPS值。可以看到随着数据压缩比的增加,这两项指标都能够提升2倍以上。
数据压缩特性会提升SSD寿命和性能,这是CSD相对于SSD标盘的独特之处。关于透明压缩对性能的提升,我们再来看更多的IO场景。
通常考察SSD的性能使用最多的就是FIO测试。这里展示的就是使用FIO对不同容量规格的CSD进行测试,并且跟SSD标盘做对比。测试场景包括顺序读写和随机读写,考察顺序读写的带宽、随机读写的IOPS和延时。
实际测试表明,CSD的128KiB顺序读写带宽相比标盘更高一些,更能接近 PCIe 4.0的带宽限制。CSD的4KiB随机读写IOPS也是比标盘SSD高。
其中写方面的优势更明显,能提升有 80%~200% 左右。IOPS更高说明延时更低,在高并发读写下,CSD的读写延时相比标盘更低且更稳定。
这里看的是单纯的读或者写,我们可以看出随机读的IOPS是远远高于随机写的IOPS。这是因为SSD内部的写通常伴随着写放大和GC。
实际数据库业务IO通常都是读写混合一起的。接下来我们再看看CSD读写混合的特点。
在读写混合场景里,总的IOPS的值会受写请求比例影响。当写请求比例越高的时候,总体的IOPS会下降。所有的SSD都是这个特点,包括CSD也一样。
不一样的地方是,CSD由于有透明压缩,其性能下降的幅度会比SSD标盘要低很多。下面左图是IOPS绝对值随着横坐标写比例增加而下降,右图是CSD和SSD的性能下降的比例趋势。橙色的是SFX3000,蓝色的SSD标盘。这个曲线走向证实了刚才的结论。
前面是从存储视角考察了可计算存储的性能和特性等。接下来我们再从数据库应用视角来看。
可计算存储在数据库应用里主要价值就是降本增效。除了传统的MySQL、PG、ORACLE数据库,还有一些国产数据库、云原生数据库以及部分非关系型数据库等,部署在可计算存储上都能取得不同的收益。
这些收益主要从4个角度去看:读写延时、读写QPS、存储容量成本、存储寿命等。不同数据库架构和存储引擎原理不同,取得的收益也不完全相同。其中以MySQL数据库的收益最多最大。比如说1-3倍QPS提升,以及存储成本降低到一半以下。
接下来我们看几个具体的数据库测试数据。
首先看MySQL数据库的压缩降本方案。
MySQL数据库支持页压缩,表压缩等多种压缩方案,但是CSD透明压缩在压缩比效果上要远高于MySQL数据库。
从图中可以看出,同样规模的测试数据,使用MySQL数据库开压缩,部署在SSD标盘上确实可以节省存储成本,最大压缩比是页压缩zlib算法方案,达到2.74 。但是MySQL数据库不开压缩部署在SFX3000上,数据存储透明压缩比可以到3.57。
跟数据库压缩方案相比,CSD透明压缩的好处有:
对应用完全透明,应用不需要做任何改造。
透明压缩压缩效率更高。因为在文件系统层下面,SSD硬件内部。
那么这么高的压缩比跟成本有什么关系呢?
答案是压缩比高时,SFX3000是可以扩容使用。比如说扩容两倍,一块3.84T的SFX3000就可以当7.68T的普通盘用。一块盘当两块盘用,数据存储成本大幅下降。
这就是CSD降本的原理,很多客户使用ScaleFlux产品的主要原因就是为了降本。在云上面CSD的这个特性价值更大。比如说阿里云PolarDB的一款大容量低成本存储就使用的是CSD透明压缩技术,实际成本节省了60%。
SFX这个产品在携程和唯品会的MySQL业务集群里也有大量使用。
透明压缩能降低成本,那是否会牺牲性能呢?接下来我们再看看性能数据。
前面对比了MySQL多个压缩方案,通常观点认为开压缩会降低性能,其实说就是应用数据库的压缩方案。而在CSD透明压缩使用的盘内算力,不占用主机CPU,所以性能不会下降反而会提升。
我们看一下sysbench测试数据。图中以MySQL在标盘上不开压缩的OLTP场景性能为基准,对比MySQL开压缩部署在SSD标盘上、MySQL不开压缩部署在SFX3000上的性能。在SFX3000上有两组数据,后者使用了CSD原子写方案。
图中展示的性能增量数据。可以看出MySQL在CSD上2个结果优势都很明显。如果不用CSD原子写,CSD上MySQL读写混合性能最大提升150%;如果使用CSD原子写,最大提升300%以上。
可以看出原子写对性能的促进作用很大。不过这里需要说明的是,CSD的原子写只是功能上保证8KB~128KB的IO原子性,对SSD读写性能并没有促进作用。之所以MySQL测试中性能还能再翻一倍,其原因是关闭了MySQL的双写缓冲。熟悉双写缓冲原理和目标的人都能看出,MySQL自身为了保证16KB的IO原子性,牺牲了读写性能。
看完MySQL数据库的测试数据,我们再看看PG数据库。
首先是数据压缩比。同样的sysbench数据,在PG上数据压缩比比MySQL上还要高一些,同时高并发读写场景下,读写混合的QPS在CSD上比SSD标盘上高出最大1倍。
此外,PG还有个空间换性能的设计,它可以跟 CSD透明压缩完美结合,即降低建表时的填充因子来提升数据库更新的性能 同时又不会浪费空间。
其原因是PG每个页里的预留空间在CSD透明压缩下几乎不占用NAND容量。图中箭头方向就是降低填充因子后在CSD盘和标盘上引起空间和性能变化。
可以看出作用于同样规模的数据表,填充因子降低25%,CSD的数据NAND容量增加 0.01TiB,PG性能还能提升约28%左右,而SSD标盘上容量增加 0.4TiB,性能提升约 25% 左右。
由此可见,在CSD上部署PG,降低填充因子,对读写混合场景的性能是有提升的,并且还不用担心浪费存储空间。
这个是PG在SFX3000和SSD标盘上性能差异对比,基准数据是SSD标盘上的PG,其他两个是SFX3000上的PG性能提升比例。
从图中首先看出,PG在SFX3000上性能在不同场景下会有20%~100%的性能提升。当降低PG填充因子时,数据库读性能会略有下降,写更新的性能会有个明显的提升,从 10% 到70%左右。
最后我们简单总结一下可计算存储带给企业数据库的价值。首先是在数据存储成本上,大部分线上业务数据库在不开启压缩的情况下,数据压缩比都高于2.4。使用CSD将容量扩容一倍,至少能降低一半存储成本。
第二是部分数据库在 IO成为性能瓶颈时,通过CSD还可能将性能再提升 25%~150% 左右。如果使用CSD的原子写替换数据库自身的原子写方案,性能还可以额外再提升。
如果数据库本身有一些空间换性能的设计,那么可以跟CSD完美结合,实现性能和空间的双赢。
第三点收益就是可计算存储的寿命会更长。有些数据库开压缩后,CSD透明压缩比可能比较低。虽然成本降低不多,但是其寿命却还是能显著提升。这对于个别在乎SSD寿命的场景也是很有帮助的。
OK 今天的分享就到这里,对可计算存储原理和实践有兴趣的朋友可以查看我们公众号、官网或者线下联系我们。谢谢大家!
第十三届数据库技术大会
https://www.zhihu.com/video/1591066338025455616
上一篇:
选择艾玛诗人体工学护腰硅胶椅,自由活动,远离腰椎、颈椎问题
下一篇:
马斯克画了张未来的饼,投资者只想要眼前的肉
回复
举报
使用道具
分享
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
快速回复
返回顶部
返回列表