作者:IT创事纪
千行百业的数字化、智能化转型正如火如荼,IT基础设施资源的供求矛盾也日益突出,这尤其体现在AI和大数据的应用上。
以AI应用为例:有统计表明,模型训练所需的算力平均100天就会翻番。算力需求的几何级数增长虽然看起来很有挑战性,但一直处于高速发展状态的各类芯片,或者说算力相关技术还能勉强跟上节奏。IT资源不足的真正麻烦,其实更多发生在内存和存储环节,也就是被业界称为“内存墙”的问题日渐严重。
“内存墙”,给大数据与AI“添堵”
所谓“内存墙”,原先主要是指在性能层面,内存与算力差距渐大(如带宽、读写速度等)造成的协作壁垒或鸿沟,而今也包含内存容量扩展跟不上热数据存储需求所造成的阻碍。
后者产生的背景,是用户在持续提升算力单元(如CPU)的性能后,通常希望将更大体量的热数据存放在距算力更近的地方——充分利用内存距算力更近、性能相对其他存储介质和产品更高的优势,高速地为算力单元“投喂”其需要处理的数据,进而充分发挥算力提升所带来的效益。
但目前主流的DRAM内存不仅容量有限,而且成本高昂,在面对数百GB甚至是以TB计的热数据承载需求时,会让大多数企业望而却步,因此不可避免地在容量层面形成“内存墙”问题。
难道就没有一种既能保证性能又具备性价比优势的理想内存,来帮助企业破解容量“内存墙”问题吗?答案是否定的。其实,已有众多企业开始尝试突围,比如火山引擎就在其导入创新的内存-存储架构后,缓解或突破了“内存墙”,显著提升IT系统和应用的性能,并兼收大幅节支的功效。
另辟蹊径,实现内存-存储架构蜕变
火山引擎依托字节跳动高效的大规模机器学习和个性化推荐技术,推出颇具竞争力的智能推荐服务。火山引擎基于异构存储设备构建计算与存储分离的推荐系统架构,其中的存储型服务可为数百亿规模的数据特征,以及千亿规模的排序模型参数提供存储和实时更新能力。
计算与存储分离的推荐系统架构
随着业务的不断扩展,火山引擎这一推荐系统的数据存储和处理需求也与日俱增,加之互联网用户对时延和内容推荐相关度的要求日趋严苛,火山引擎开始将 IndexService 应用于其推荐业务中,以提供高级语法树 + 复杂归并树 + 倒排索引功能,并实现KV 查询能力。
然而,这些举措带来对数据的访问需求,又进一步提升对 IndexService 的性能要求,也对存储服务器的吞吐量、响应速度、稳定性和意外中断后的恢复能力都提出更高的要求。要满足这些要求,就必须采用内存来承载其内容信息数据,并且还要随相关数据的大幅扩展,同步扩充内存并将更多数据放入其中来强化时延和吞吐上的性能优势。
火山引擎就这样遭遇了“内存墙”的挑战。因为如果内存扩充使用的是DRAM,那么就会受其规格所限,能够扩展的内存容量始终有限,所以不得不增设更多服务器来满足存储量需求,而这又会造成服务器处于CPU 利用不充分的状态。此外,DRAM 内存高昂的价格以及更多机架位占用会大幅推高成本。
最终,火山引擎还是找到了更好的“破墙”利器——它拥抱了内存-存储架构领域的重大创新,引入英特尔® 傲腾™ 持久内存,并将之与英特尔® 至强® 可扩展处理器双剑合璧,对IndexService存储架构进行了深层次优化。
业界悉知,英特尔® 傲腾™ 持久内存就是为颠覆传统的内存-存储架构而生,不仅具备接近 DRAM 内存的性能,而且相对于 DRAM 内存,拥有明显的大容量、更优的单位容量成本优势,还提供易于使用的内存模式及可保障数据非易失的 App Direct 模式,并能根据不同应用场景灵活配置。
傲腾™ 持久内存在存储层级中的位置及作用
火山引擎充分利用了傲腾™ 持久内存的上述综合优势,与英特尔携手推出存储架构优化方案,进而在突破原有存储介质和架构的局限性,满足容量和性能要求的同时,还兼收了成本上的收益。
落地实践步步为营,实现性能与成本双丰收
火山引擎的具体实战是如何推进的呢?对于其他面临类似问题的用户又有什么启发呢?让我们来看看它的实操步骤吧:
高性能、低时延是存储升级的头等大事。为满足推荐系统 IndexService支持大规模访问所需的存储容量,如其承载的某项服务在晚高峰时期的总 TPS 可达到读 7000 万、写 3000 万,并提升其数据访问和处理能力,火山引擎在使用英特尔® 傲腾™ 持久内存时将其配置为App Direct模式,实现应用程序从用户空间直接访问持久内存上的数据,摆脱额外开销,很好地满足用户对数据访问速度的高要求。此外,英特尔® 傲腾™ 持久内存在App Direct模式下所具备的数据持久性,也进一步帮助其推荐系统提升可靠性和安全性。
大容量、低成本促进增效节支。傲腾™ 持久内存容量比DRAM更大(目前提供128/256/512GB三种容量规格),且配置灵活,单位容量的成本也更低,可帮助火山引擎实现存储高密度和低成本的双重收益。更值一提的是,使用 DRAM 内存 + 持久内存方式,还使其单机并发业务从一个提升到两个,改善了CPU利用率,释放了服务器的潜能。
深度优化,挖掘持久内存潜力。针对IndexService 业务底层存储是基于 RocksDB PlainTable,数据在内存文件系统或共享内存/dev/shm 中以 SST (Sorted String Table) 文件存储,以及SST又分为多层、RocksDB 中 L0 和 L1 是性能的关键等状态,火山引擎与英特尔携手,针对分层混合介质存储进行深入优化,降低了L0层,让DRAM和傲腾™ 持久内存能够发挥各自优势。在此基础上,还通过优化 RocksDB PlainTable的二分结构和Bloom Filter参数,降低IO访问次数;通过优化LSM树结构,提高了数据吞吐量,使其更加贴合推荐业务场景。
分层混合介质存储示意图
实践是检验方案成效的金标准。为了测试引入英特尔® 傲腾™ 持久内存优化后其推荐系统异构存储的性能表现,火山引擎携手英特尔,使用真实线上请求数据,进行了一系列模拟测试。测试显示,无论系统时延、吞吐,还是TPS/$ 和存储密度等性能都获得显著提升,为以采用傲腾™ 持久内存的服务器替代配备纯DRAM内存的服务器树立了典范。
此外,经火山引擎对优化后存储系统的业务线实测表明,在达到相同TPS性能指标的情况下,采用傲腾™ 持久内存可以让服务器总成本降低16%,即在成本不变的情况下性能提升20%;存储密度也从原硬件架构最大支持1 TB存储,提升到最大可支持4.5 TB。而且,分层存储架构也为后续加入NVMe、SSD、HDD、磁带等层级,面对存储密度要求较高的用户提供更多“套餐”,从而为释放处理器和持久内存的潜能拓展了空间。
总的来说,火山引擎用实践中真实的数据证明引入傲腾™ 持久内存,优化其异构存储架构,并搭配至强® 可扩展处理器,不仅能大幅提升其IndexService 推荐系统的存储性能,还实现了可观的投资收益。
看到这里,你是不是也有一种想把傲腾™ 持久内存用作攻城槌,去怼内存墙的冲动了?莫急,你还是要先分析一下自己面对的内存墙具体是出现在什么样的应用场景里。因为目前AI领域里很多细分应用都或多或少有 “内存墙”的困扰,而且现在也并不存在“一招鲜吃遍天”的完美方案。基于傲腾™ 持久内存+至强® 可扩展处理器的方案,目前还是更适用于决策或推荐类的AI应用,且主要是推理。
或许在不久的将来,随着英特尔的异构架构,即XPU走向成熟和完善,再加上英特尔如能打通异构芯片对于主内存的调配和利用通路的话,那么更具有普遍适用价值的突破“内存墙”方案,就有望出现了。相信届时傲腾持久内存如能进一步优化其性能,并持续突破其容量上限(下一代产品单条容量已有望达到1TB),它仍将是这些破墙方案的C位组件。