英特尔® 傲腾™持久内存是Intel在2019年发布的一款革命性的产品,英特尔® 傲腾™持久内存是一种全新的内存类型,其架构设计旨在从数据中心中汲取更多价值,重构数据中心内存/存储层次结构。不同于传统的DRAM,英特尔® 傲腾™持久内存集大容量、经济性和持久性于一身,能够支持数据中心多个应用场景。浪潮基于英特尔® 傲腾™持久内存做了大量的应用场景解决方案,覆盖大数据分析、数据库、云与虚拟化、分布式存储等应用场景。为了帮助用户通过更加灵活的架构来实现创新型的应用,助力企业实现性能突破,浪潮发布了基于英特尔® 傲腾™ 持久内存技术的HBase应用方案。
HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,该技术来源于Fay Chang所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统"。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的列式数据库。HBase与HDFS相比两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点。在需要实时读写、随机访问超大规模数据集时,可以使用HBase。
HBase中内存规划直接涉及读缓存BlockCache、写缓存MemStore,影响系统内存利用率、IO利用率等资源以及读写性能等,重要性不言而喻。目前很多用户由于内存资源有限,而导致HBase使用出现严重的性能瓶颈。
利用英特尔® 傲腾™ 持久内存改善HBase服务能力
在现有存储架构中,内存和存储介质之间存在容量、性能和时延的差距,基于英特尔® 傲腾™持久内存技术的Persistent Memory位于内存和存储介质之间,能够填补两者间的性能和时延差距,对存储层次模型进行重新划分和定义。英特尔® 傲腾™ 持久内存为HBase的读缓存提供了新的选择。
英特尔® 傲腾™持久内存是一种全新的内存类型,其架构设计旨在从数据中心中汲取更多价值,重构数据中心内存/存储层次结构。不同于传统的DRAM,英特尔® 傲腾™持久内存集大容量、经济性和持久性于一身,能够支持数据中心多个应用场景,包括数据分析、数据库和内存数据库、人工智能、高容量虚拟机、容器,以及内容分发网络等,使之在性能、可用性上有大幅度提升。英特尔® 傲腾™持久内存技术从根本上改变了数据中心的弹性,将内存数据库重启时间从以前的几天、几小时缩短到现在的几分钟甚至几秒钟,并提供经济实惠的内存空间,将系统内存容量扩展到前所未有的水平。
图一
在现有存储架构中,内存和存储介质之间存在容量、性能和时延的差距,英特尔® 傲腾™ 持久内存位于内存和存储介质之间,能填补两者间的性能和时延差距,对存储层次模型进行重新划分和定义。英特尔® 傲腾™ 持久内存读写带宽比NVME设备高数倍,并大幅降低延时问题。另外,由于写入方式不同,英特尔® 傲腾™ 持久内存也比Flash NAND更耐用,并能支持比传统DRAM更大容量的系统内存配置。与传统DRAM不同,英特尔® 傲腾™ 持久内存将提供前所未有的高容量,经济性和持久性组合。通过扩展经济实惠的系统内存容量(每个CPU Socket大于3 TB),最终客户可以使用支持这种新型内存的系统,通过在处理器附近移动和维护更大量的数据来更好地优化其工作负载,并极大限度地降低延迟从系统存储中获取数据。英特尔® 傲腾™ 持久内存将以每个模块高达512GB的容量提供。同时,英特尔® 傲腾™ 持久内存具有的非易失性这一大优势能够保证数据在掉电后或系统维护中不会丢失。
图二
英特尔® 傲腾™ 持久内存通过两种特殊的运行模式——App Direct模式和内存模式,展现其独特的能力。具体来看,采用App Direct模式,经过专门调试的应用程序可以从产品固有的持久性中充分获取价值,同时获得更大的容量;在内存模式下,在受支持的操作系统或虚拟环境中运行的应用程序可将该产品用于易失性存储,在无需重写软件的情况下,有效利用高达512GB的内存模块带来的附加系统容量,在大型内存池中获得新的洞察。
在数据时代,新一代数据中心对于加快数据的流动,提高数据的存储和处理能力提出了更高的要求。在这种情况下,英特尔新一代至强可扩展CascadeLake处理器与英特尔® 傲腾™ 持久内存成了新的强强组合。这一组合将改变云、数据库、高性能计算、内存分析和内容分发网络等关键数据工作负载,成为新的动力之源。
对于HBase读缓存BlockCache,有两种工作模式:LRUBlockCache和BucketCache。BucketCache可以看成是对SlabCache思想在实现上的一种改进及功能扩展,其优点是解决LruBlockCache的缺点(FullGC和碎片化)及支持面向高性能读的大缓存空间,缓存Block的存储介质不再仅仅依赖在内存上,而是可以选择为高性能SSD等高速磁盘,我们称之为二级缓存。这样BucketCache既可以为HBase提供大容量缓存,同时又可以摆脱单节点内存大小的限制,降低成本。
HBase使用基于高性能SSD等高速磁盘作为读缓存,可在不显着增加存储基础架构成本的情况下大幅提高HBase性能。由于绝大多数读取缓存访问都是小型随机请求,因此使用具有出色随机IOPS性能的英特尔® 傲腾™ 持久内存解决方案至关重要。
为了测试英特尔持久内存作为BucketCache读缓存的优势,HBase使用intel开发的同时支持HBase3.0的PMEM模块,在相同成本下,8块HDD盘作为HDFS数据盘,英特尔® 傲腾™ 持久内存作为HBase BucketCache读缓存进行了基准测试, DRAM作为HBase BucketCache读缓存进行基准测试作为对比。其中英特尔® 傲腾™ 持久内存采用App Director模式。
方案验证
下表列出了两种测试方案的硬件配置。
测试使用4台服务器,一台服务器用于管理节点,部署HDFS NameNode和HBase Master,另外三台服务器作为数据节点,部署HDFS DataNode和HBase Region Server,四台机器部署zookeeper集群。PMem方案中每个数据节点使用192GB(6x32GB)的DRAM。DRAM方案中使用384GB内存。
组网方式
图三
RandomRead测试:
图四
图五
图 四 ‒ 图 五 显示了在RandomRead测试模型下,PMem和 DRAM的性能对比。可以看到,PMem的平均延时只有DRAM的51.1%,吞吐率却达到了DRAM的1.92倍。
随着负载的增加,PMem的吞吐率有较大的增长,Tps达到16W;另外PMem随着随机读数据量增大,跟aep相比有了很大的提升,可见PMem可以满足HBase高负载大数据量下的读缓存需求。
在 PMem 和DRAM成本相当的前提下,作为读缓存,PMem在高负载下表现出来的吞吐量达到DRAM的1.92倍,延迟却只有DRAM的51.1%。由此可见,在 HBase 应用中,如果发现存在性能瓶颈,可以选择PMem内存用于读缓存,不仅提供了大幅的性能提升,而且相比于DRAM具有更高的性价比。PMem相比DRAM具有大幅性能提升的原因在于:
大容量:PMem提供了高容量的内存,能够缓存HBase所有的热点数据,而没有缓存驱逐
高随机读能力:PMem的高随机读能力能够满足HBase随机读需求