英特尔® 傲腾™ 持久内存是Intel在2019年发布的一款革命性的产品,英特尔® 傲腾™ 持久内存是一种全新的内存类型,其架构设计旨在从数据中心中汲取更多价值,重构数据中心内存/存储层次结构。不同于传统的DRAM,英特尔® 傲腾™ 持久内存集大容量、经济性和持久性于一身,能够支持数据中心多个应用场景。浪潮基于英特尔® 傲腾™ 持久内存做了大量的应用场景解决方案,覆盖大数据分析、数据库、云与虚拟化、分布式存储等应用场景。为了帮助用户通过更加灵活的架构来实现创新型的应用,助力企业实现性能突破,浪潮发布了基于英特尔® 傲腾™ 持久内存技术的Spark应用方案。
Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎,常用来构建大型、低延迟的数据分析应用程序。Spark 一个主要特点在于,其能够在内存中进行计算,这使得其数据分析效率往往高于其它计算引擎,但是,服务器内存资源的限制也使得其性能的扩展存在着一定的瓶颈,在超大规模负载中无法充分发挥其利用内存进行计算的性能优势。为了解决此问题,浪潮在 Spark 方案验证中使用英特尔® 傲腾™ 持久内存代替传统的 DRAM 内存,实现了数倍的性能提升,被证明可以作为 Spark 内存扩展的优先方案。
Spark 搭载了高效的 DAG 执行引擎,可以通过基于内存来高效处理数据流。与Hadoop 的 MapReduce 相比,Spark 基于内存的运算要快 100 倍以上,基于硬盘的运算也要快10 倍以上,这使得其能够在大数据环境下对于数据进行实时处理。同时,其高容错性和高可伸缩性也使得其成为大数据部署的突出优势,用户可以将 Spark 部署在大量廉价的硬件之上,形成集群,满足低成本下的高性能计算需求。
在当前的应用环境下,Spark 可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)、图形计算(GraphX)等负载,这些不同类型的处理都可以在同一个应用中无缝使用。正是因为 Spark 具备上述优势,所以其广泛应用于云计算、物联网、机器学习等前沿领域的超大型数据集快速分析处理之中。
显然,高性能的数据分析是 Spark 的一个重要优势,要提升性能,除了可以在软件优化方面入手之外,还可以从硬件角度进行考虑:由于 Spark 依赖内存进行计算,所以内存的速度、容量对于计算效率至关重要,如果数据量超过了集群内存能容纳的最大值,部分数据就会落在相对低速的磁盘上,这导致Spark数据处理能力无法充分发挥。
扩展内存容量是一个比较简单、直接的方法,但是问题同样存在。首先,服务器内存插槽有限,且一般支持128GB 的 DRAM 内存,这决定了单台服务器扩展的总内存容量受到严格限制;其次,如果采用增加服务器节点的方式进行扩展,这些增长的服务器节点不仅意味着采购成本的增加,也会带来不菲的空间、运维成本。再加上企业级的大容量 DRAM 内存本身就价格昂贵,使得很多企业的 Spark 系统承受着巨大的成本压力。
由于介质、技术等原因限制,在现有的技术条件下传统 DRAM 内存在容量与成本上很难实现质的突破,所以,寻找创新的存储介质与架构也就成为了 Spark 系统性能扩展的重要方向。在比较英特尔® 傲腾™ 持久内存与 DRAM 内存之后,浪潮决定尝试采用英特尔® 傲腾™ 持久内存来进行 Spark 内存池扩展。
浪潮选择英特尔® 傲腾™ 持久内存的原因不难理解。首先,英特尔® 傲腾™ 持久内存提供了行业领先的高吞吐率、低延时、高服务质量和超高的耐用性,可以提供接近内存的延迟,并支持快速缓存和快速存储,对应用进行加速。
其次,英特尔® 傲腾™ 持久内存的单设备容量达到512GB ,远超DRAM 内存的128GB,这使得其可以将系统内存扩展至6TB(不包括系统自身内存)。而且,英特尔® 傲腾™ 内存的单位容量价格要远低于DRAM 内存,这些特性支持企业在数据中心部署更大、更经济的数据集,在大型内存池中获得新的洞察。
在本方案中,浪潮使用英特尔® 傲腾™ 内存作为 Spark 系统的存储介质,以解决服务器内存不足的问题。英特尔® 傲腾™ 内存有App Direct 模式和内存模式两种模式。本次测试采用App Direct 模式 ,App Direct 具有数据持久化、高容量、高可用性、显著加快存储速度等特点,是目前英特尔® 傲腾™ 内存主要使用模式(两种方案的对比如图1所示)。
图1
为了验证英特尔® 傲腾™ 持久内存的使用对于 Spark 系统性能的影响,浪潮基于英特尔® 傲腾™ 内存与 DRAM 内存,并分别针对Spark SQL测试与Spark K-Means测试配置了对比方案(采用相同的硬件配置和组网方式),两套方案的成本相当,因此可以直观的反映出两套方案的性能价格比。
图2
首先进行的是 Spark SQL 单机测试(测试结果如图3)与集群测试(测试结果如图4)可以发现,英特尔® 傲腾™ 内存方案的单机性能是DRAM方案的7.33倍,集群性能是 DRAM 方案的6.05倍。
图3
图4
接下来浪潮进行了 Spark K-Means单机测试(测试结果如图5)与集群测试(测试结果如图6)。测试结果显示,在单机情况下,英特尔® 傲腾™ 内存方案在训练方面的性能是DRAM方案的13.74倍,整体性能是DRAM方案的3.93倍;集群情况下,英特尔® 傲腾™ 内存方案在训练方面的性能是DRAM方案的10.76倍,整体性能是 DRAM 方案的3.99倍。
图5
图6
效果:英特尔® 傲腾™ 内存显著提升 Spark 方案性能与成本效益
以上测试显示,在 Spark 系统的构建过程中,如果需要处理的数据量高于服务器内存资源,那么基于英特尔® 傲腾™ 持久内存的配置方案性能将远超 DRAM 内存方案。这是由于超过服务器内存池容纳能力的数据会落在低速的磁盘上,从而导致处理速度的降低,而英特尔® 傲腾™ 内存不仅可以提供速度接近 DRAM 内存的快速存储器,而且可支持的内存池总容量远超 DRAM 内存,这能够让 Spark 缓存更多的数据,从而充分发挥 Spark 的数据高速处理优势。
尤为重要的是,英特尔® 傲腾™ 内存在单位成本上显著低于 DRAM 内存,这能够帮助企业有效控制Spark 系统的TCO。在大型的 Spark 应用实践中,英特尔® 傲腾™ 内存作为内存扩展方案,可以帮助企业在固定的性能目标下,有效控制服务器节点数量以及内存采购成本,从而实现性能与成本效益的均衡。