众所周知,内存与存储之间存在巨大的性能鸿沟,两者的性能几乎有数百万倍的差距。

但在强调用户体验的互联网行业,每一秒的延迟可能都会导致用户流失,为了提升数据访问性能,是否可以将数据库放置到内存当中?这就是内存数据库Redis诞生的背景,Redis在一定程度上缓解了性能需求,提升了用户体验。

但是另外一个问题随之诞生。

目前主流的服务器内存基本都是DRAM,纵观数十年来的DRAM发展情况,再结合未来发展趋势,比如DRAM的频率从十年前DDR3的1033MHz,到现在的DDR4的3200MHz以及未来的DDR5,性能确实越来越高。但是容量呢?

DRAM内存的单位容量几乎没有太大的起伏,尽管服务器内部使用时的DDR内存从主流的16GB过渡到32GB,但单条DDR内存的容量始终保持在最大128GB,多少年来,几乎没有变化。

当然,服务器随着处理器的更新换代而不停地更新,单颗处理器可支持的内存通道数量从原来的4通道发展到现在的6通道、8通道,在一定程度上增加了可部署的内存容量。但这依然“治标不治本”,一则服务器的物理尺寸是业内标准的,很难变动,这意味着物理空间受限,很难设计更多的内存插槽;二则内存的单位成本虽然根据市场波动略有起伏,但总体变化不大,容量越大的内存也意味着成倍的成本增加。

这个看似无解的问题,随着IntelOptane中文名:傲腾)系列产品的发布而出现了曙光。IntelOptane用全新的3DXPoint材质,有类似相变存储的特性。其主要意义可以用两点来概括:高性能与非易失性。

Intel率先推出了傲腾SSD,与传统的NANDSSD相比,其拥有均衡的读写性能,而延迟则低一个数量级,让市场领略到了傲腾的高性能。但SSD通常使用PCIe通道,PCIe技术的性能并不足以完全发挥出Optane的性能优势。因此,Intel又推出了OptanePresistentMemory(傲腾持久内存,简称PMem)。

傲腾持久内存是一个全新的产品,其填补了内存与主存储之间的性能鸿沟。

傲腾持久内存所带来的现实意义,其延迟在纳秒级别,远远小于NANDSSD的微秒级别延迟,可以为应用增加一个新的存储层,极大地提升应用响应速度

相比于CPU访问内存的延迟,访问傲腾持久内存的延迟肯定要高出很多。但傲腾持久内存的意义在于,其容量非常大,比如第一代傲腾持久内存PMem100的最小容量为128GB,后又陆续发布750GB与1.5TB的产品,单条傲腾持久内存的容量远超传统DRAM内存。

而且傲腾持久内存的意义还在于,具备非易失性存储特性,这是DRAM内存所没有的,这意味着即使在掉电的情况下,傲腾持久内存依旧拥有保存数据的能力。

正因为傲腾持久内存同时具有DRAM的高性能和NANDSSD的非易失性存储特性,使得其使用也非常灵活,既可以作为DRAM内存的补充,增大系统内存容量(内存模式);又可以作为直接数据存储(应用直连模式);还可以一部分用作内存,一部分用作数据持久存储(混合模式)。

傲腾持久内存拥有DRAM的特性,使得其可以作为传统DRAM内存的补充,极大地增大应用或系统可用的内存空间,且无需应用任何改动。这天然就是内存数据库的最佳载体。比如在SAPHANA解决方案中,就已经认证使用了傲腾持久内存产品。

而现在,新浪也考虑使用傲腾持久内存来承载其Redis数据库,为用户带来更快、更好的访问体验。为了验证傲腾持久内存替代传统内存能否真的能够满足线上业务的需求,新浪在使用傲腾持久内存之前,部署了一套贴近真实应用环境的Redis内存数据库环境,使用傲腾持久内存作为内存(内存模式),利用memtier_benchmark工具对Redis实例进行压力测试,评估傲腾持久内存在Redis数据库环境下的性能表现。

新浪用于部署Redis数据库环境的硬件平台。采用近乎相似的硬件,图左使用傲腾持久内存来增大系统内存容量,图右的硬件平台则采用传统的DRAM方案

测试中所使用的memtier_benchmark软件是RedisLabs推出的一款命令行工具,它能够产生各种各样的流量模式,可以对Memcached和Redis内存数据库实例进行基准性能测试,其测试结果已经成为业内内存数据库性能评估的事实标准。

在测试场景一中,根据实际业务需求对memtier_benchmark的测试流进行调节,模拟数据块大小为512KB尺寸的混合读写场景,读写比例为1:2,分别测试傲腾持久内存和DRAM内存的读写性能以及平均响应延迟。

需要注意的是,在测试中选用了512KB这一尺寸较大的数据块,其原因在于,当傲腾持久内存添加到服务器系统中,并使用内存模式时,原来的DRAM内存将作为傲腾持久内存的缓存,当较小的数据块访问,CPU可能实际访问的就是DRAM内存,其性能和延迟与使用DRAM内存时几乎没有区别。因此在测试时选用了更大尺寸的测试数据块,以评估傲腾持久内存和传统DRAM内存的性能差异。

上图即为傲腾持久内存(AEP)和传统DRAM内存(RAM)的Redis性能对比图,从图中可以看到,即使是在512KB较大尺寸的数据块混合读写时,尽管DRAM的性能更高,但差距并不明显。而且随着压力测试时间的不断持续,傲腾持久内存与DRAM内存之间的性能差距有变小的趋势,这说明傲腾持久内存完全有能力替代传统DRAM内存。

傲腾持久内存与传统DRAM内存在Redis数据库测试中的平均延迟曲线图。可以看到,尽管傲腾持久内存的延迟略高,但并不明显,仅有大约5%的差距,这说明傲腾持久内存拥有良好的性能稳定性,可以作为传统DRAM内存的补充。

在实际应用环境中,IO数据块的尺寸是不同的,通常有多种不同大小的数据块并发访问。因此,根据这一实际情况,在接下来的测试中采用了两种尺寸的数据块,分别为4KB和512KB,两种尺寸的数据块同时对Redis数据块进行并发读写测试,并按不同混合比例(20%、40%、50%、60%与75%)下的性能进行统计,并对比。

从上图可以看出,在不同混合比例的大小数据块压力测试中,尽管傲腾持久内存的平均延迟稍高,但几乎与传统DRAM内存没有明显差异。

同时,测试还对由多个Redis内存数据库组成的集群进行了压力测试,结果如下:

傲腾持久内存的性能表现尽管会稍低传统DRAM内存,但差异并不明显。这意味着两者的性能很接近,在应用层面并不会造成明显的差异,进而导致不良的用户体验。这也意味着傲腾持久内存完全能够替代传统DRAM内存。

而相比于容量发展几乎稳定的DRAM内存而言,傲腾持久内存即将推出第二代PMem200系列产品,相比第一代傲腾持久内存,其单条性能增加至少25%,同时在新一代Intel处理器中,将支持8通道内存,这意味着在单台服务器中可使用的傲腾持久内存数量进一步增加,据估计,单机性能将有50%的性能增长。

除了性能之外,傲腾持久内存的容量也将进一步增长,其拥有类似NANDSSD的容量发展路线。这意味着傲腾持久内存不仅容量增长,性能也会随之增长。替代传统DRAM内存大有可为。