英特尔® 傲腾™ 持久内存是Intel在2019年发布的一款革命性的产品,英特尔® 傲腾™ 持久内存是一种全新的内存类型,其架构设计旨在从数据中心中汲取更多价值,重构数据中心内存/存储层次结构。不同于传统的DRAM,英特尔® 傲腾™ 持久内存集大容量、经济性和持久性于一身,能够支持数据中心多个应用场景。浪潮基于英特尔® 傲腾™ 持久内存做了大量的应用场景解决方案,覆盖大数据分析、数据库、云与虚拟化、分布式存储等应用场景。为了帮助用户通过更加灵活的架构来实现创新型的应用,助力企业实现性能突破,浪潮发布了基于英特尔® 傲腾™ 持久内存技术的HDFS存储方案。
Hadoop是Apache开发的用于可靠,可扩展的分布式计算的开源软件。其不仅仅在云计算领域用途广泛,还可以支撑搜索引擎服务,作为搜索引擎底层的基础架构系统,同时在海量数据处理、数据挖掘、机器学习、科学计算等领域都越来越受到青睐。HDFS(Hadoop Distributed File Sysytem)作为Hadoop提出的分布式文件系统,更是因为其设计简单、易用性高而被广泛应用。为了帮助企业化解因为数据快速增长所出现的HDFS性能瓶颈,浪潮进行了基于英特尔® 傲腾技术的 HDFS 性能优化实践,通过将英特尔® 傲腾™ 持久内存作为HDFS的集中式缓存,相比于传统的DRAM内存方案,不仅大幅提升了数据吞吐性能,而且实现了更高的成本效益。
挑战:化解HDFS存在的存储性能瓶颈
HDFS虽然被广泛应用,但是对于需要频繁访问文件,或者具有性能SLA(Service-Level Agreement)的混合工作负载,HDFS仍不能满足高性能的要求。HDFS引入了集中式缓存管理功能,它是一个明确的缓存机制,允许用户指定要缓存的HDFS路径。在HDFS缓存的帮助下,高级应用程序可以更轻松地利用群集内存框架,例如Spark,MR,Hive,Pig和Impala。为了加快工作量,这些框架可以明确要求HDFS缓存数据集并计划任务,并考虑DRAM缓存位置。HDFS中NameNode会和保存着所需数据块的所有DataNode通信,并指导他们把数据块缓存在Off-heap缓存中。
由于HDFS应对的是超大规模数据集的存储需求,因此数据吞吐性能的重要性不言而喻。要提升HDFS数据吞吐性能,可以从优化内存规划、存储磁盘扩容和升级、参数调优等多个方面进行。以线上HDFS集群内存规划为例,内存由OS,HDFS和其他应用程序共享。影响系统内存利用率、IO利用率等资源以及读写性能等,是HDFS性能一个至关重要的影响因素。
但是,要想在控制总体拥有成本(TCO)的前提下,对HDFS集群内存进行最优规划并不是一件容易的事情。首先,HDFS集群需要的内存容量是海量且不断扩展的,而每一个存储节点的内存插槽数量、支持内存容量等条件却极大限制了其扩展性,在内存容量增长到一定程度后就会出现瓶颈。如果要进一步对于内存容量进行扩展,企业在传统上一般会采取两种方法,第一种是使用大容量的单条内存,第二种方法是扩展HDFS存储节点。
但是,这两种方法都不具备良好的成本效益。对于前者来说,虽然很多HDFS存储节点支持的单条内存容量理论上限是128GB,但是这种大容量的内存普遍处于验证阶段,可获得性不足,而且价格的提升远高于其容量的提升,会带来很高的成本压力;对于后者来说,扩展HDFS存储节点固然能够提升内存池的容量,但是这些存储节点的采购、空间占用、运维、供电无疑也会显著抬升成本。
因此,如何打破现有存储架构的限制,寻找一种创新的线上HDFS集群内存规划方法,在显著提升HDFS性能的同时有效控制成本,也就显得至关重要。
利用英特尔® 傲腾™ 持久内存技术优化内存结构
为了解决此问题,浪潮工程师团队对于HDFS的集中式缓存管理进行了分析,为了减轻内存资源的压力,持久性内存(PM)被称为存储类内存(SCM),在业界出现,它不仅可以为HDFS提供大容量缓存,摆脱单节点内存大小的限制,同时还能有效降低成本。
要将存储介质从内存更换为高性能固态盘,一个重要的条件就是固态盘在IOPS、时延方面与内存不能有太大的差距。在方案验证的过程中浪潮发现,英特尔® 傲腾™ 持久内存位于内存和存储介质之间(如图1),能够填补两者间的性能和时延差距,对存储层次模型进行重新划分和定义。因此,浪潮决定使用英特尔® 傲腾™ 持久内存作为HDFS的读缓存,并进行性能、成本等方面的验证。
图1
英特尔® 傲腾™ 持久内存是一种全新的内存类型,不同于传统的DRAM,其集大容量、经济性和持久性于一身,读写带宽比NVME设备高数倍,并大幅降低延时问题。由于写入方式不同,英特尔® 傲腾™ 持久内存也比Flash NAND更耐用,并通过高达512GB的单模块容量,实现了远超传统DRAM的系统内存容量。其从根本上改变了数据中心的弹性,将内存数据库重启时间从以前的几天、几小时缩短到现在的几分钟甚至几秒钟,并提供经济实惠的内存空间,将系统内存容量扩展到前所未有的水平。
英特尔® 傲腾™ 持久内存拥有两种特殊的运行模式——App Direct 模式和内存模式。具体来看,采用App Direct 模式,经过专门调试的应用程序可以从产品固有的持久性中充分获取价值,同时获得更大的容量;在内存模式下,在受支持的操作系统或虚拟环境中运行的应用程序可将该产品用于易失性存储,在无需重写软件的情况下,有效利用高达512GB的内存模块带来的附加系统容量,在大型内存池中获得新的洞察。
在实际的方案部署中,浪潮使用了英特尔® 至强® 第二代可扩展处理器与英特尔® 傲腾™ 持久内存组成强强组合,代替HDFS中DRAM显示缓存(如图2),改善HDFS 集群内存结构,以支撑云、数据库、高性能计算、内存分析和内容分发网络等关键数据工作负载。
图2
方案验证:英特尔® 傲腾™ 持久内存性能优势显著
为了测试英特尔® 傲腾™ 持久内存作为HDFS集中式缓存的性能,浪潮决定在总成本相当的情况下,分别测试基于英特尔® 傲腾™ 持久内存/ DRAM 内存两种配置下的性能对比。
在实际测试中,浪潮将英特尔® 傲腾™ 持久内存设置为 App Direct运行模式,并依据以下硬件配置来搭建了测试方案(如表1)。测试使用3台服务器,其中一台服务器用于管理节点,部署HDFS NameNode,另外两台服务器作为数据节点,部署HDFS DataNode。
表1
在至关重要的存储方面,英特尔® 傲腾™ 持久内存方案中每个数据节点使用192GB(12*16GB)的DRAM,并使用1TB(8*128GB)的英特尔® 傲腾™ 持久内存作为HDFS的缓存设备;DRAM方案中使用768GB(24*32GB)内存,两种方案的组网方式如图3。
图3
本次进行了两种场景测试,一种对HDFS进行顺序读和随机读测试;一种在text和parquet两种数据类型下对54个SQL和7个IO敏感型SQL查询测试。AD模型分别来评测HDFS在英特尔® 傲腾™ 持久内存做缓存、DRAM做缓存和无缓存下的读性能。
读写测试中,浪潮分别测试了三种配置在顺序读和随机读下的吞吐量(测试结果如图4)。可以看出,在SequentialRead测试模型下,英特尔® 傲腾™ 持久内存是DRAM的3.11倍,英特尔® 傲腾™ 持久内存是NoCache的11.64倍。在RandomRead测试模型下,英特尔® 傲腾™ 持久内存是DRAM的7.95倍,英特尔® 傲腾™ 持久内存是NoCache的21.33倍。
图4
SQL查询测试中,浪潮分别测试了三种配置在54个SQL和7个IO敏感型SQL下的查询时间。可以看出,在54个SQL查询测试模型下(测试结果如图5),对于text数据类型,DRAM是英特尔® 傲腾™ 持久内存的1.26倍,NoCache是英特尔® 傲腾™ 持久内存的1.49倍;对于parquet数据类型,DRAM是英特尔® 傲腾™ 持久内存的1.06倍,NoCache是英特尔® 傲腾™ 持久内存的1.13倍。在7个IO敏感SQL查询测试模型下(测试结果如图6),对于text数据类型,DRAM是英特尔® 傲腾™ 持久内存的1.7倍,NoCache是英特尔® 傲腾™ 持久内存的2.23倍;对于parquet数据类型,DRAM是英特尔® 傲腾™ 持久内存的1.16倍,nocache是英特尔® 傲腾™ 持久内存的1.22倍。
图5
图6
效果:大幅改善HDFS性能与成本表现
从测试结果可以看出,在成本相当的情况下,通过将HDFS的读缓存由传统的DRAM内存替换为英特尔® 傲腾™ 持久内存,可以成倍提升吞吐性能,大幅降低查询时间。之所以会有如此显著的提升效果,很大程度上是因为英特尔® 傲腾™ 持久内存支持的总容量远高于DRAM内存,能够缓存HDFS所有的数据集,而没有缓存驱逐。而且其极高的随机读性能能够满足HDFS随机读需求。
尤为重要的是,如果企业仅需要达到固定的性能,那么使用英特尔® 傲腾™ 持久内存将带来极大的成本节约,这在当前企业数据爆发式增长、在大数据方面的投入逐渐增大的背景下,显然具有重要意义。