如何利用SCM/NVM技术提高数据库性能?

Posted 架构师技术联盟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用SCM/NVM技术提高数据库性能?相关的知识,希望对你有一定的参考价值。



如何利用SCM/NVM技术提高数据库性能?

背景:Redis作为一款简洁、高效的开源K/V数据库,可以被用于内存缓存、持久化存储等不同场景,大量服务于各类互联网应用。同时也提供了丰富的功能配置,客户可以根据各自业务需求,在读写性能、缓存容量、数据可靠性等方面作出灵活的选择。


Redis提供了RDB和AOF两种持久化方式供选择,4.0中更是引入了RDB-AOF混合持久化的方式,整合RDB和AOF的优势,提供更实时的数据持久化保证、更快的恢复速度和更紧凑的空间使用。针对AOF的写入,Redis提供了两种选项供选择:


  • Always:Aoflog实时写入落盘,保证写入数据的安全性,但写入性能下降严重。

  • Everysec:Buffer写入Aoflog,后台定期刷盘,可以很好的保证写入性能,但在failure场景下,需要承担秒级新写入数据丢失的风险。


这两种模式需要用户在性能和数据安全性之间做出取舍,鱼和熊掌无法兼得。对一些对数据安全性有更高要求的场景,需要应用层协同来保证数据安全,会给系统设计和实现带来一定的复杂度。另一方面,在Redis发生failover的时候,会有一个缓存预热重建的过程,期间对应用会有一个可感知的不可服务时间、以及访问延时抖动。


关于上述问题,很重要的一个原因在于目前DRAM和SSD(请忽略HDD)之间巨大的性能鸿沟。近几年,备受学术界和工业界关注的NVM(Non-volatile Memory) 技术,给这类问题的解决带来了新的机遇。

如何利用SCM/NVM技术提高数据库性能?

图1:NVM产品的存储层次结构


目前已有的NVM产品,对上层应用提供DIMM形态的访问接口。作为一种NVM设备,相比于DRAM具备掉电不丢数据的特性,容量上也会比DRAM高出一个数量级,成本优势明显。相比于传统SSD,不但读写速度更快(百ns量级),而且具备字节寻址的能力。同时也要看到,NVM产品仍然存在读写不对称、顺序和随机访问不对称等特征。


从应用场景上来看,NVM产品可以定位于替代部分DRAM功能,支撑持久Memory或In-Memory应用。具体来说可被应用在如下场景:


  • 持久化内存:作为数据持久层,对数据一致性要求很高的持久化系统,同时兼顾数据可靠性和数据读写性能。

  • 内存数据库:作为数据In Place空间,提供数据运行和持久化存储空间。

  • 系统日志卷:作为日志卷,例如,在HPC系统中通常采用Checkpointing实现对计算中间状态进行持久化保存,这是一个耗时、耗系统吞吐量的过程。

 

基于NVM产品提供的字节寻址、持久化、高性能的能力,以及考虑到其读写、顺序和随机访问不对称等特性,对Redis作了细致的设计和深度的定制化改造,针对上面几个问题取得非常好的测试效果。


性能分析:前面提到Redis的always模式通过实时flush操作确保AOF文件的实时持久化,但这会导致性能大幅下降。Everysec模式通过大幅减少Flush操作的频率,基于page cache缓冲对设备的读写访问大幅提升QPS性能,但是这会引入秒级的数据丢失风险。而基于NVM产品提供的持久化能力可以非常优雅地解决这个问题,兼顾性能和可靠性。整个的数据流图如下:


如何利用SCM/NVM技术提高数据库性能?

图2: 基于NVM产品的数据读写流程



Bypass整个传统IO栈(Block层->设备驱动等),实现直接load/store操作。通过cache flush操作即可实现持久化,取代了Flush系统调用。

AOF机制的另一个问题是AOF文件的持续增大会造成巨大的空间浪费,所以阿里云Redis团队通过后台线程的方式按照一定的策略(考虑吞吐和资源占用量等)对AOF文件进行replay操作。即根据AOF命令在NVM产品上构造持久化的KV数据结构,然后完成回放的AOF文件就可以删除,从而解决了AOF占用空间的问题。


之所以选择后台线程异步Replay的方式在NVM上构建持久化数据结构,是因为该过程需要通过事务操作来保证写操作的原子性和数据结构的一致性,耗时较大,所以数据先写到DDR的方式可以保证客户端写操作的QPS不下降。


考虑到NVM拥有出色的读性能,数据异步replay到NVM之后,会根据数据冷热和内存占用量释放部分value比较大的内存副本,转而直接基于NVM提供读服务。所以DRAM逐渐演变为NVM的写cache和热数据的读cache,以充分发挥NVM的读性能和成本优势,同时规避NVM写性能(相对)的短板问题。


在两台96核/384GB神龙服务器上,实测string数据结构的SET操作,从结果数据来看几乎与everysec模式的性能持平,同时兼顾了always模式的数据安全性和everysec模式的高性能。


如何利用SCM/NVM技术提高数据库性能?

图3:Redis写入性能对比


Redis在重启时需要进行数据恢复操作。原生Redis重启后都需要从RDB和AOF中加载数据到内存,完成加载后才可以正常提供服务。经过实测,10GB左右数据的RDB加载时间大概为53秒左右,这段时间内Redis服务处于不可用状态。而在基于NVM的方案中,Redis重启后可以先基于NVM的持久化数据结构直接提供读服务,DRAM数据结构重建完成后即可提供完整的读写服务。


同样针对10GB左右的数据集,系统shutdown save后重启,实测1秒内可以提供只读服务,35秒内可以提供完整读写服务,整个数据恢复时间大幅下降。如下图所示:


如何利用SCM/NVM技术提高数据库性能?

图4: Redis recovery时间对比


另外,原生Redis通过fork一个子进程来保存全量DB数据到RDB或AOF文件,即使相比上次保存的数据仅有一个key的变更,也依然会全量保存整个DB,显然这不是一种高效的实现方式。并且该过程会对Redis带来较大的性能抖动。而基于NVM的方案是一种持续增量持久化的方式,更加高效和平滑,这点对于在线服务来说至关重要。


NVM相比DRAM能提供更高的存储密度和更大容量的数据存储空间,因此可以有效降低单位数据存储成本。基于NVM的字节寻址能力和与DRAM的速度差异,我们设计了NVM非易失性内存和DRAM易失性内存间的数据换入与换出策略,能在不影响Redis基本性能的前提下,提高数据的存储容量并节约成本。


结束语:整个方案中,充分发挥了NVM的字节寻址、持久化等能力,借助DRAM做cache来弥补NVM读写不对称的问题,从而实现了高可靠、高性能、低成本的Redis数据库,从测试数据可以看出NVM对Redis在持久化以及其他性能方面提升效果非常显著。


除此之外,NVM相比DRAM能提供更高的存储密度和更大容量的数据存储空间,因此可以有效降低单位数据存储成本。在不影响Redis基本读写性能的前提下,基于NVM和DRAM的动态数据输入换出,是我们下一步工作的方向之一。


当然,目前方案仍存在一些待优化的点,比如:对于高写入场景,Replay性能跟不上DRAM写入速度;Failover时候,需要等DRAM重建完成才能提供写服务等。后续会继续跟进这些问题,结合技术和产品来一起合理改进。


关于SCM技术,目前已经在各个行业得到广泛使用,为了让更多存储相关从业者全面了解和掌握SCM,笔者已经把SCM相关知识做了梳理和总结(详解SCM/NVM技术现状和研究方向),目录如下:


1 、SCM技术发展和背景 1

1.1 为什么要引入新型内存 3

1.2 SCM具备哪些特点 6

1.3 SCM与DRAM的关系 7

1.4 混合内存架构的机遇与挑战 8

2 、关于SCM(Storage Class Memory) 9

2.1 目前的内存子系统特点 9

2.2 新型内存子系统特点 9

2.3 外存储系统特点 9

2.4 存储领域发展趋势 10

2.5 新型存储器的诞生 10

3 、什么是相变存储器PCM 11

3.1 相变存储器存储介质 11

3.2 相变存储技术基本原理 12

3.2.1 写操作(Program) 13

3.2.2 读操作(Read) 14

3.3 多层(MLC)存储PCM 14

3.4 PCM和FLASH的异同点对比 15

3.5 PCM和DRAM的异同点对比 16

3.6 PCM在存储系统中的应用 17

3.6.1 在技术学术界 17

3.6.2 在商品产业界 18

3.7 PCM 在存储系统中的位置 18

3.7.1 PCM被用作Cache 19

3.7.2 PCM结合DRAM作为混合内存 19

3.7.3 PCM结合Flash作为混合外存 20

3.8 PCM研究现状及发展前景 20

3.8.1 芯片级别研究方向 20

3.8.2 存储介质研究方向 21

3.8.3 存储系统的研究方向 22

3.9 几种主要新型存储器 22

4、 MRAM磁性存储器 23

4.1 MRAM实现原理 23

4.2 MRAM存储特性 23

5、 STT-RAM自旋转移力矩存储器 28

6、 FeRAM铁电存储器 28

6.1 工作原理 28

6.2 存储特点 28

7、 RRAM阻变式存储器 29

8、 PFRAM聚合物存储器 29

9、 其它新型存储器件 29

10、 3D XPoint非易失性闪存技术 31

10.1 Post-NAND后闪存时代 31

10.2 3D Xpoint技术概述 31

10.3 Apache Pass(AEP)和Clodstream 32

10.4 Cache加速和Cache内存应用 35

11、 PowerMax针对SCM的计划 38

11.1 SCM加密和双端口技术 39

11.2 Optane DIMM支持 40

11.3 中档产品对SCM支持 40

12、 Netapp存储NVMe&SCM技术 41

12.1 NetApp在NVMe&SCM布局历程 41

12.2 NetApp在NVMe&SCM的战略 42

12.3 NetApp在NVMe&SCM的技术亮点 43

12.4 NetApp技术总结 44

13 、SCM关键技术和性能优化 44

13.1 SCM有哪些主要特性 45

13.2 持久性内存主要特点 46

13.3 SCM硬盘主要特点 46

13.4 Linux的I/O存储栈 48

13.5 驱动程序和块设备驱动 48

13.6 文件使用模式 49

13.7 I/O处理过程 50

13.8 传统存储栈特点 50

13.9 存取和使用模式的性能 51

13.9.1 PCM和 Flash性能对比 51

13.9.2 PCM和eMMC性能对比 51

13.10 通过NVMe简化存储栈 53

13.10.1 多核系统中的I/O调度优化 53

13.10.2 文件系统优化 54

13.10.3 操作系统优化 55

13.10.4 新操作语义 55

13.10.5 新编程模式 57

14、 SCM系统面临的问题和思考 57

14.1 软件堆栈时延 57

14.2 网络带来时延 58

14.3 系统崩溃一致性 58

14.4 访存重排引入崩溃一致性 59

14.5 如何应对这些挑战 59

14.5.1 应对软件栈时延的挑战 59

14.5.2 应对崩溃一致性的挑战 59

14.5.3 应对网络时延的挑战 59

14.6 挑战和应对方案总结 60

15 、SCM技术线路研究方向 60

15.1 SCM的存储系统的组织结构 61

15.2 SCM的存储系统的访问方法 61

15.3 SCM的存储系统数据可靠性 62

15.4 SCM的存储系统数据安全性保障 63

15.5 SCM的存储系统软件优化 63

15.6 SCM的存储硬件原型系统 64

15.7 SCM的事务性存储系统 64

15.8 SCM的上层应用 65

15.9 SCM研究路线总结 65

16、 深度分析Intel AEP关键知识点 66

16.1 AEP的特点 66

16.2 AEP与DRAM的简单对比 66

16.3 AEP与存储(SSD+HDD)的对比 67

16.4 AEP应用场景场景的思考 67

16.5 从Intel Optane SSD到Intel DIMM 67

16.5.1 软硬件开销的变化 67

16.5.2 AEP的访问模型 68

17、 SCM相关文章附录 69

17.1 SCM相关的开源项目 69

17.2 常用资源网址 69


电子书主要内容如上所示,请感兴趣的读者通过“阅读原文”获取详情。


文章来源:云栖社区


温馨提示:


以上是关于如何利用SCM/NVM技术提高数据库性能?的主要内容,如果未能解决你的问题,请参考以下文章

云原生技术分享 | MySQL锁与事务的并发性

优化程序性能——提高并行性

如何编写最能利用 CPU 缓存来提高性能的代码?

如何利用 Kyligence+tableau提高分析效率?

为啥数据库读写分离能提高数据库的性能?

C#泛型