英特尔® 傲腾™ 持久内存助力火山引擎
优化推荐系统存储架构,实现更优投资收益

  • 火山引擎携手英特尔,利用英特尔® 傲腾™ 持久内存和第二代英特尔® 至强® 可扩展处理器对推荐系统中内容信息业务的存储架构进行了深层次优化。持久内存的引入,不仅让其实现了可媲美原来使用纯 DRAM 内存时的出色性能,还凭借非易失的特性提高了数据处理的可靠性。

  • 更重要的是,火山引擎推荐系统内容信息业务还收获了持久内存带来的成本和容量优势:与仅使用 DRAM 内存的方案相比,存储投资收益提高了 20% 以上。

author-image

签署人:

执行概要

随着互联网技术的不断发展,各大平台的目标不再只局限于扩大用户规模,还致力于通过提升用户体验来留住用户。在网络信息呈爆发式增长的时代,智能推荐服务可利用信息过滤技术为用户推荐高质量内容,是助力企业改善用户体验、增强用户黏度和提升商业变现能力的有效途径。

作为全球领先的企业智能增长引擎之一,火山引擎依托字节跳动高效的大规模机器学习和个性化推荐技术推出了颇具竞争力的智能推荐服务。该智能推荐服务已在内外部几十家客户的业务场景中得到了广泛应用。然而,随着业务不断拓展以及客户与合作伙伴平台用户的不断增加,火山引擎推荐系统需要处理的数据体量不断攀升,对存储架构性能的要求也日益严苛。尤其在高吞吐量、大数据量请求的场景下,存储介质的性能更是与推荐系统的整体性能息息相关,因此寻求一种可以经济高效地扩展容量同时又不影响系统性能的方案已是势在必行。

 为此,火山引擎携手英特尔,利用英特尔® 傲腾™ 持久内存(以下或简称为 “持久内存” 或 “傲腾™ 持久内存”)和第二代英特尔® 至强® 可扩展处理器对推荐系统中内容信息业务(以下或称 “IndexService”)的存储架构进行了深层次优化。持久内存的引入,不仅让其实现了可媲美原来使用纯 DRAM 内存时的出色性能,还凭借非易失的特性提高了数据处理的可靠性。更重要的是,火山引擎推荐系统内容信息业务还收获了持久内存带来的成本和容量优势:与仅使用 DRAM 内存的方案相比,存储投资收益提高了 20% 以上 1

推荐系统对我们的业务至关重要,英特尔® 傲腾™ 持久内存的加持为我们推荐系统存储架构的优化带来了新的思路,让我们在提升性能的同时实现了成本节约目标。” —— 柴君钧 火山引擎高级工程师

业务挑战

了解火山引擎推荐系统

火山引擎的中台化 AI 推荐引擎具备出色的工程与模型能力,支持亿级候选和万亿级特征 2。为此,火山引擎基于异构存储设备构建了计算与存储分离的推荐系统架构(如图 1 所示)。整个系统由推荐服务、预估服务和召回服务等计算型服务,以及用户画像、参数服务和分布式索引等存储型服务构成。计算型服务承担了推荐策略计算、模型预估和内容检索等工作,而存储型服务则能为推荐系统中数百亿规模的数据特征,以及千亿规模的排序模型参数提供存储和实时更新能力。

图 1. 计算与存储分离的推荐系统架构

数据激增带来的数据存储及处理挑战

合作品牌以及智能产品投放应用的持续增加,使得火山引擎智能推荐服务面对的最终用户群体不断壮大。以合作伙伴之一的抖音为例,截至 2019 年时,其日活跃用户 (DAU) 就超过了 3.2 亿 3,而到 2020 年 1 月 5 日,抖音 DAU 已突破 4 亿4

快速增长的用户量使得火山引擎智能推荐服务背后的推荐系统需要存储和处理的数据量也在与日激增。另外,推荐服务的数据还具有实时更新等特点。这对存储容量及存储介质的速度提出了更多挑战。

用户更高期望令既有存储架构疲于应对

除与日俱增的数据存储和处理需求外,互联网用户对时延和内容推荐相关度的要求也日趋严苛。

由于推荐系统要根据已有的用户画像和内容向用户推荐其感兴趣的内容,这就涉及到两个关键问题:召回和排序(如图 2 所示)。

召回是指从大量信息集合中选择尽可能多的与用户相关的结果,将其返回给 “排序”,让 “排序” 完成对内容推荐优先级的划分。

为应对上述数据挑战和应用需求,火山引擎将 IndexService 应用于其推荐业务中,以提供高级语法树 + 复杂归并树 + 倒排索引功能,并赋予 KV 查询能力。这些举措带来的对数据的访问需求,又进一步增加了对 IndexService 的性能要求——此前积累的大量冷数据,访问困难且耗时长,但当用户在使用 APP 时,留给推荐系统的处理时长往往是毫秒级的,这就对推荐系统存储服务器的吞吐量、响应速度、稳定性和意外中断后的恢复能力提出了更高的要求。

图 2. 推荐系统工作流程图

破解挑战:寻求 DRAM 内存之外的高性价比扩容方案

针对推荐系统 IndexService 的性能提升需求,火山引擎原本的应对之道是采用 DRAM 内存来承载内容信息数据,通过扩充内存,也就是将更多数据放在 DRAM 内存上,以此来增强时延和吞吐的性能优势。但这种解决方案目前面临的困难越来越多:首先,DRAM 内存虽然能在一定程度上扩充内存整体容量,但受其规格限制,能够扩展的容量始终有限,因此不得不增设更多机架位来满足存储量需求,这会造成服务器经常处于内存紧张而 CPU 利用不充分的状态。此外,DRAM 内存高昂的价格以及更多机架位占用所带来的成本,还会大大推高 TCO。

因此,火山引擎希望能探索出新的存储方案,既能突破存储介质和架构的局限性,还能在保证性能的前提下实现投入产出上的增益。

图 3. 传统内存-存储层级与全新内存-存储层级

英特尔® 傲腾™ 持久内存助力火山引擎破局

颠覆内存-存储架构,弥补性能缺口

如图 3 所示,传统的内存-存储架构是内存加硬盘所组成的两级存储,大容量持久化存储主要由机械硬盘 (Hard Disk Drive, 以下简称为 “HDD”) 或固态盘 (Solid State Drive, 以下简称为 “SSD”) 来承担,高性能存储则交由 DRAM 内存担纲。由于 HDD/SSD 和 DRAM 内存在访问速度上存在非常大的差距,当数据在 DRAM 内存和基 HDD/SSD 的存储之间传输时,会给系统带来巨大的时延和带宽损失。不断增加的数据量和快速访问更多数据的需求,则会进一步放大这一性能差距带来的影响。

英特尔® 傲腾™ 持久内存的出现,为传统的内存-存储架构带来了真正意义上的颠覆。它不仅具备接近 DRAM 内存的性能,还具备 SSD 的数据持久性,可以很好地弥补 DRAM 内存和 SSD 之间的性能缺口;其相对于 DRAM 内存的大容量、低成本特性,还能助力企业在容量与成本之间取得更好的平衡。

鉴于这些优势,火山引擎决定将英特尔® 傲腾™ 持久内存作为新方案的核心,搭配第二代英特尔® 至强® 可扩展处理器对其推荐系统 IndexService 的存储架构进行了优化。这一新方案的配置如图 4 所示:

图 4. 基于英特尔® 傲腾™ 持久内存的新方案硬件配置

高性能低时延,满足业务需求

以火山引擎推荐系统 IndexService 目前承载的某项服务为例,它目前在晚高峰时期的总 TPS 可达到读 7000 万,写 3000 万;总 KPS 可达到读 30 亿,写 2.7 亿。如此大规模的访问量不仅需要足够大的存储容量来支撑,也需要快速高效的数据访问和处理能力。为满足该服务的性能需求,火山引擎在使用英特尔® 傲腾™ 持久内存时将其配置为 App Direct 模式。在该模式下,持久内存通过内存总线直接连接到处理器,应用程序可以绕过操作系统,无需驱动程序、系统调用、中断和上下文切换就能从用户空间直接访问持久内存上的数据,因此,系统几乎没有软件开销。如图 5 所示,在这种情况下,英特尔® 傲腾™ 持久内存的时延约为 100 ns-300 ns,不仅遥遥领先于 SSD,更是具有接近 DRAM 内存的性能 5,可以很好地满足高峰期间对数据访问速度的需求。

图 5. 访问不同内存-存储设备的软硬件开销

此外,傲腾™ 持久内存还遵循 SNIA 编程模型,同时英特尔为持久内存提供了一套持久内存开发套件 PMDK。这些优势都可以帮助应用直接访问持久内存而无需经过文件系统的页高速缓存系统、系统调用和驱动。在使用持久内存前,内存文件系统通过 mmap 的方式直接访问数据,而 App Direct 模式下的持久内存也采用同样的方式让应用程序直接访问数据,这一点与业务原有的设计非常贴合。

持久存储,断电无忧更可靠

英特尔® 傲腾™ 持久内存在 App Direct 模式下还具备数据持久性。不论遇到意外断电还是计划中的停机,持久内存中的数据都能得以持久保存,从而能提升存储可靠性、增加系统的业务弹性、缩短系统重启时间并提升推荐系统的故障恢复速度。

大容量低成本,实现增效节支

火山引擎选择的英特尔® 傲腾™ 持久内存 100 系列可提供 128 GiB、256 GiB 和 512 GiB 三种容量规格,而当前 DRAM 内存最大容量为单条 128 GiB。这些持久内存模组兼容 DDR4 插槽,可与传统 DDR4 DRAM DIMM 共存于同一平台。用户可在每个通道上安装一个持久内存,而单路最多支持六个,从而可提供高达每路 3 TiB 容量7。持久内存相比 DRAM 内存更大的容量配置可有效提升单台服务器的存储密度,降低因购买、部署和维护更多服务器而带来的大笔额外费用。再加上持久内存相对 DRAM 内存的每 GiB 成本更低,因而能实现存储上高密度和低成本的双重收益。

值得一提的是,当仅使用 DRAM 内存扩充内存容量时,火山引擎单台机器只能处理单个业务,CPU 利用率偏低;但使用 DRAM 内存 + 持久内存的方式扩容后,就可以在单台机器上并发处理两个数据业务,从而提升 CPU 利用率,充分利用服务器的潜能。

深度优化,充分发挥持久内存优势

由于 IndexService 业务底层存储是基于 RocksDB PlainTable,数据在内存文件系统或共享内存/dev/shm 中以 SST (Sorted String Table) 文件存储。SST 又分为多层,每一层的数据达到一定阈值后会挑选一部分 SST 合并到下一层,每一层的数据是上一层的 10 倍(因此 90% 的数据存储在最后一层)。RocksDB 中 L0 和 L1 是性能的关键,因为 L0 中文件是重叠的,其他层几乎是不重叠的。为了充分发挥傲腾™ 持久内存的优势,火山引擎与英特尔的技术支持团队做了如下优化:

分层混合介质存储:分层的主要目的有两个。首先是降低 L0 层的查询成本;其次,该业务下的数据更像 read latest 场景,大约有 30% 热数据上集中了 70% 的读。图 6 所示为混合介质上的数据分布情况,将 L0、L1 和 L2 放在 DRAM 内存中,以降低 L0 文件数、降低时延和提升重写业务性能,让 DRAM 内存和傲腾™ 持久内存能够发挥出各自的优势。

图 6. 分层混合介质存储

借助分层混合介质存储,可以得到数据在 DRAM 内存上的读写带宽,分别为 4830.16 MB/S 和 3036.23 MB/S,而在持久内存上的读写带宽分别为 1348.50 MB/S 和 521.60 MB/S 8。表 1 展示了数据在 DRAM 内存和持久内存中的空间分布。

表 1. 分层混合介质存储空间分布

在此基础上,优化 PlainTable 的二分结构和 Bloom Filter 参数,可降低 IO 访问次数。增大 L0 的文件大小并同时减小其他 level 的文件大小,可加速 L0 到 L1 的 compaction 速度,从而减少文件数量。优化 LSM 树结构,可对 LSM 树结构进行优化,改善读写放大的瓶颈,提高数据吞吐量,并使其更加贴合推荐系统的业务场景。


性能验证与成果

为了验证这个异构存储结构采用英特尔® 傲腾™ 持久内存后在推荐系统中的性能表现,火山引擎在英特尔的支持下,使用真实线上请求数据,按照表 2 所示的配置情况对采用了持久内存的相关系统进行了一系列的模拟测试,并获得了可喜的成果。

表 2. 火山引擎测试软件与硬件配置

以推荐业务最常见的查询文章相关属性这一场景为例,系统通常需要一次查询若干篇文章进行预测,才能判断一篇文章是否值得被推荐。一次查询的文章数量和每一篇文章对应的数据大小如图 7 所示:

图 7. 参与测试的查询业务特性

在引入持久内存并做了上述优化后,经测试发现:系统无论在时延、吞吐还是在 TPS/$ 和存储密度方面,都得到了显著优化。

图 8. 文章属性场景时延对比

如图 8 所示,对比单独使用 DRAM 内存与使用 DRAM 内存 + 持久内存时的引流测试数据可知,在使用后一种配置的情况下,时延虽然有所增加但可以接受,并且长尾并没有什么特别大的变化,特别是 pct9999 的时延还有所降低,而且把有持久内存加持的配置使用 dm-stripe 模式挂载到容器上进行混布,还能缓解网络带宽瓶颈、提升资源使用率和进一步降低成本。

上述测试结果表明:用导入持久内存的服务器来替代配备纯 DRAM 内存的服务器是完全可行的。根据火山引擎业务线实际测试结果,在达到相同 TPS 性能指标的情况下,服务器总成本(包含硬件以及平摊机架、网口的成本)降低了 16%9。这样一来,原来采购 5 台服务器的成本现在可以采购 6 台服务器,亦即成本不变的情况下性能提升了 20%10。在存储密度方面,原先硬件架构最大支持 1 TiB 的存储,现在最大可以支持 4.5 TiB 的存储。此外,分层后,还可以持续加入其他存储层级(NVME、SSD、HDD、磁带等),IndexService 也能为存储密度要求较高的用户提供更多的 “套餐”。网络带宽的提升,则能进一步释放处理器和持久内存的潜力。


总结与展望 

火山引擎与英特尔通力合作,将傲腾™ 持久内存引入推荐系统,为异构存储架构在推荐系统中的构建和运用进行了有意义的探索,并取得了丰硕成果。实践证明,使用英特尔® 傲腾™ 持久内存搭配第二代英特尔® 至强® 可扩展处理器,能够大大提升其推荐系统 IndexService 的存储性能,并且可以实现可观的存储投资收益。

在尝试利用持久内存强化推荐系统存储能力的同时,火山引擎与英特尔还围绕如何利用持久内存优化和升级数据库存储引擎开展了深入交流与协作6。未来,火山引擎还将继续携手英特尔,持续挖掘英特尔® 傲腾™ 持久内存在其他业务场景或服务中的应用价值,共同推动存储系统的升级与发展,破解更多阻碍应用和业务发展的技术瓶颈。

英特尔并不控制或审计第三方数据。请您审查该内容,咨询其他来源,并确认提及数据是否准确。

英特尔技术特性和优势取决于系统配置,并可能需要支持的硬件、软件或服务得以激活。产品性能会基于系统配置有所变化。没有任何产品或组件是绝对安全的。更多信息请从原始设备制造商或零售商处获得,或请见 intel.cn

性能测试中使用的软件和工作负荷可能仅在英特尔微处理器上进行了性能优化。诸如 SYSmark 和 MobileMark 等测试均系基于特定计算机系统、硬件、软件、操作系统及功能。上述任何要素的变动都有可能导致测试结果的变化。请参考其他信息及性能测试(包括结合其他产品使用时的运行性能)以对目标产品进行全面评估。更多信息,详见 www.intel.cn/benchmarks

描述的成本降低情景均旨在特定情况和配置中举例说明特定英特尔产品如何影响未来成本并提供成本节约。情况均不同。英特尔不保证任何成本或成本降低。

英特尔、英特尔标识以及其他英特尔商标是英特尔公司或其子公司在美国和/或其他国家的商标。

© 英特尔公司版权所有。

产品和性能信息

1, 7, 8, 9, 10 数据援引自火山引擎内部测试与评估,更多详情请咨询火山引擎。基准平台配置(未采用英特尔® 傲腾™ 持久内存):处理器:英特尔® 至强® 铂金 8260 处理器 (2.40 GHz);内存:512 GB DRAM (32 GB x 16);操作系统:Debian 8.11;内核版本:4.4.0-33.bm.1-amd64。新平台配置(采用了英特尔® 傲腾™ 持久内存):处理器:英特尔® 至强® 铂金 8260 处理器 (2.40 GHz);内存:128 GB DRAM (16 GB x 8) + 1 TB 英特尔® 傲腾™ 持久内存 (128 GB x8);操作系统:Debian 8.11;内核版本:4.4.0-33.bm.1-amd64。