**[快手推荐系统及 Redis 升级存储
图一 计算与存储分离的快手推荐系统架构
众所周知,短视频的典型应用场景是碎片时间,当用户在快手 APP 上随意滑动浏览时,留给推荐系统的处理时长往往只有毫秒级。在计算模块提供高性能策略计算之余,如何让亿级规模的海量存储数据为推荐系统提供实时支持,无疑更富挑战。
因此,快手基于异构设备,针对不同应用场景,采用了多样化的技术实现方式。以分布式索引为例,要在大规模分布式存储集群中高速检索数据,离不开索引的力量。为提升高并发下的索引性能,快手采用了基于内存的键值
(Key Value,KV) 数据库来构建分布式索引系统。
而作为推荐系统的另一重要基石,快手 Redis 服务的性能表现也会对推荐效果产生显著影响。用户在短视频应用中的行为轨迹会被存储在 Redis 数据库中,并最终构成对用户的精准画像。而 Redis
实例能使用的内存容量越大,就意味着可被存储在内存之中、能实现高速读取的信息越多,用户画像也就更为具体,对用户的内容推荐也会更为准确。
不仅如此,Redis 服务还为快手短视频提供了强有力的社交服务能力的支撑,例如点赞、发表评论以及弹屏等功能。Redis 数据库基于内存的设计,保证了这些社交行为能流畅运作,以输出良好的用户体验。
然而,随着数据量的高速增长,快手基于内存的推荐系统存储服务和
Redis 服务,正在经受越来越大的挑战。一方面受限于物理服务器 DRAM 内存容量规格的限制,各服务实例的内存容量始终难以大规模扩展;而另一方面,DRAM 内存昂贵的价格,也造成快手 TCO 的急剧提升。同时,DRAM 内存易失性的特点,也使系统在故障恢复时需要耗费更多的时间。
为了破解上述挑战,向用户持续提供更优质的内容推荐服务,快手在利用异构混合计算方案有效提升计算型服务性能之余,也通过与英特尔开展的深入技术合作,引入英特尔 傲腾 数据中心级持久内存产品,对推荐存储系统和 Redis 数据库实施了优化改造。
软硬相济 实现更强存储能力
在传统存储架构中,大容量持久化存储主要由硬盘 (Hard Disk
Drive,HDD)或固态盘 (Solid State
Drive, SSD) 来承担,而随着1数据应用场景的日益多样化,以及对存储性能提出的更高要求,存储需求层次也变得越来越复杂。采用更多的 DRAM 内存,无疑可以获得更强的性能,但也会带来更高的成本。为此,快手选择全新的异构存储结构,以求在性能、容量和成本三个维度上实现优选。
在快手原本的设计中,高性能的 DRAM 内存将承担性能要求最高,但容量要求最小的那部分存储需求,而性能要求较低,容量要求高,且要求持久化的存储任务则交给固态盘和硬盘。但与此同时,快手仍需面对另一种可能的场景,即当存储系统对性能、容量和持久化均有着较高要求时,该如何应对?
DRAM 内存
图二 英特尔 傲腾 数据中心级持久内存是兼顾内存级性能和大容量持久化存储能力的好选择
如图二所示,基于 3D XPoint 存储介质打造的英特尔 傲腾 数据中心级持久内存,显然是快手补上这一环的理想之选。这一创新的内存产品类别,不仅拥有与 DRAM 内存相近的读写性能、访问时延和相比 SSD 更强的耐用性,可在高并发的推荐系统场景中,实现不亚于 DRAM 内存的性能表现;它还可凭借大容量的特性,帮助快手轻松构建起 TB 级的内存数据库。更难得的是,它拥有 DRAM 内存不具备的数据持久性 (或称非易失性,基于 AppDirect 模式),可为快手的推荐异构存储系统带来更高的可用性。
为了让由 DRAM 内存、傲腾 数据中心级持久内存、固态盘以及硬盘组成的异构存储系统发挥更大效能,快手与英特尔等合作伙伴一起,针对推荐系统中的不同场景进行了大量可行性分析和架构设计调研,并根据英特尔 傲腾 数据中心级持久内存的特性,针对分布式索引和参数服务器中的 KV 存储进行了重新设计。
图三 引入英特尔 傲腾 数据中心级持久内存构建的异构存储系统
新的设计如图三所示,架构中新增了 MemPool 组件。作为一种缓冲池,该组件能让系统针对不同的访问类型来决定是使用 DRAM 内存,还是使用英特尔 傲腾 数据中心级持久内存;例如,在使用参数服务器进行推荐模型预估时,由于模型中的神经网络大小与嵌入表
(Embedding Table) 相比较小,因此神经网络可被
MemPool 分配进入 DRAM 内存来提高预估的性能。而在分布式索引使用场景中,系统可根据所需索引数据的大小,为其在英特尔 傲腾 数据中心级持久内存中分配不同的 slab (一种内存分配机制),从而提升存取性能和效率。
在这些主要的设计之外,快手还针对英特尔 傲腾 数据中心级持久内存的特性,实施了多种调优方案。首先在数据读取场景中,通过采用非一致内存访问
(Non-Uniform Memory Access Architecture,NUMA) 节点绑定的方式,避免英特尔 傲腾 数据中心级持久内存在进行数据存取时,在不同的 NUMA 节点间切换,以实现更好的读写性能;同时,无锁和零拷贝 (Zero Copy)
技术的加入,也避免了临界区对英特尔 傲腾 数据中心级持久内存的频繁访问,以及降低数据访问对内存带宽的占用,从而提升存储系统的整体效能。与此同时,英特尔 傲腾 数据中心级持久内存的非易失性特性,也能让新设计的索引系统获得分钟级别的故障恢复速度,与之前小时级别的恢复速度相比,提升达百倍之多1。
而在 Redis 服务中,英特尔
傲腾 数据中心级持久内存大容量的特性,令快手单 Redis 服务器内存容量达到了 TB 级,使单 Redis 实例的内存容量从 4GB 扩展到 8GB,实例的内存容量得以翻番,为业务的进一步发展提供了更强的硬件基石。
满足性能需求的同时降低 TCO
为验证全新的快手异构存储结构在采用英特尔 傲腾 数据中心级持久内存,并实施了一系列软件调优后的实际性能表现,快手与英特尔一起,使用真实线上请求数据,对采用了英特尔 傲腾 数据中心级持久内存的各个相关系统,如推荐系统中所用到的索引系统,进行了一系列的模拟压力测试。
图四 基于英特尔 傲腾 数据中心级持久内存的索引系统压力测试结果
测试围绕着推荐系统中核心的请求量、网络带宽、平均处理时延以及 P99 处理时延四大核心性能指标展开。测试结果如图四所示,可以看出,在这四个核心指标上,英特尔 傲腾 数据中心级持久内存均获得了与 DRAM 内存相近的性能表现,尤其是在网络带宽指标上,双方差值仅为 0.16%2。
在实现相近性能的同时,傲腾 数据中心级持久内存大容量和非易失性的特性,以及相比
DRAM 内存更为实惠的价格,让快手的成本得到了有效控制。来自快手的估算显示,通过引入英特尔 傲腾 数据中心级持久内存,快手推荐系统以及 Redis 服务的 TCO 均获得了 30% 的降低12。
结语
作为国内率先将英特尔 傲腾 数据中心级持久内存引入推荐系统的互联网企业,快手以其卓越的技术创新能力,为异构存储结构在推荐系统中的构建和运用,以及大容量 Redis 服务在短视频服务中的运用,进行了有意义的探索,并获得了丰硕的成果。
着眼未来,快手正与英特尔探讨成立联合实验室,以借助英特尔各种创新产品和技术,来驱动自身业务的创新及其数据中心的升级和演进。上述英特尔 傲腾 数据中心级持久内存的应用,其实就是双方在这个联合实验室筹备过程中推进的第一个项目。今后快手还将继续携手英特尔,挖掘英特尔 傲腾 数据中心级持久内存在旗下其他业务场景或服务中的应用价值,推动对各类数据处理和存储系统实施优化和革新。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章