海量Redis数据库优化,vivo如何实现成本与性能的平衡

海量Redis数据库优化,vivo如何实现成本与性能的平衡
2022年11月29日 08:47 袁大善人

随着数字化技术的创新以及时延敏感型应用的持续落地,越来越多的数据需要实现实时或近实时的处理,这推动了 Redis 等内存数据库的广泛应用。此类数据库对于内存容量有着较高的要求,在数据快速增长的背景下,大内存池构建意味着较高的总体拥有成本 (TCO)压力,需要企业通过内存介质创新、存储架构优化等方式,实现成本与容量的平衡。

作为中国知名的智能终端和智慧服务品牌,vivo 部署了规模庞大的 Redis 系统,以支持 AI 推荐、兴趣图谱分析、互联网交易等应用的高效运行,为用户提供稳定、快速响应的服务。为了更好地实现 Redis 系统性能与成本的平衡,vivo 与英特尔合作,在 Redis 系统中采用了英特尔® 傲腾™ 持久内存(PMem),借助其高性能、大容量、高经济性等特点,帮助 vivo 实现了既定的业务目标。

挑战:Redis系统带来巨大的内存扩展压力

vivo 已经成为全球具备重要影响力的移动互联网服务提供商之一。面向新时期的市场发展需求,vivo 发布了其全新的 AI 智慧服务生态战略,即打造一个 “全场景、全联结、全交互” 的智慧引擎,构建满足消费者期待的智慧手机,以实现与更多开发者合作共赢。vivo 正在聚焦于运动、健康、工作、休闲等移动互联网业务生态中最具活跃度和显性价值区域的应用场景,为用户提供更加智慧的服务。

在 vivo 的智慧服务生态战略中,基于 AI 的个性化信息推荐、兴趣图谱分析以及互联网交易等时延敏感型应用得到了快速发展。为了支持这些应用的高效运行,vivo 部署了规模庞大的 Redis 系统。Redis 是一个可基于内存亦可持久化的日志型 Key-Value 数据库,通过在内存中读写数据,Redis 大大提高了读写速度,是实现网站高并发不可或缺的一部分。

在原生 Redis 系统的基础上,vivo 根据其业务需求进行了相应的优化,包括优化日志同步机制、优化 Cluster slots 指令、AOF 支持异步写入等。这些优化措施有效提升了 Redis 系统在性能、扩展性等方面的表现。

由于 vivo 互联网用户规模巨大,应用众多,因此需要通过 Redis 系统进行处理的数据堪称海量,这给后端的 IT 基础设施带来了巨大的挑战。其中突出体现在 Redis 所带来的巨大内存需求上:Redis 内存消耗通常包括自身内存、键值对象占用、缓冲区内存占用及内存碎片占用。如果数据量超过了集群内存能容纳的限制,部分数据就会落在相对低速的磁盘上,导致 Redis 性能显著降低,甚至可能停止响应。因此,为 Redis 数据库提供足够大的内存成为保障其性能正常发挥的重要因素。

传统 Redis 系统通常采用高性能 DRAM 内存作为缓冲区内存, 这种方式能够满足 Redis 系统对于性能的要求,但却在成本上带来巨大的挑战:

  • DRAM 内存单位容量成本仍居高不下:在相当长的时间内, 用户对于内存的巨大需求与可供应的内存总量之间仍有着巨大的缺口,再加上 DRAM 内存介质的工艺特点,导致 DRAM 内存的价格长期在高位运行。对于 Redis 系统而言,集群需要的内存容量动辄在数百 TB,导致较高的成本压力。
  • DRAM 内存单条容量相对较低:目前,市场上普遍应用的 DRAM 内存通常在 128 GB 以下,这意味着即使将服务器的内存插槽插满,单个服务器节点所能提供的内存容量依然相对不足。为了满足业务需求,扩展集群规模显然就成为最具可行性的方式,这会进一步加大成本压力。
  • 高复杂性:Redis 庞大的集群规模也会带来复杂的运维问题, 加重运维人员的负担。因此,vivo 希望找到创新的内存扩展方案,以解决成本与运维的难题。

解决方案:基于傲腾持久内存的Redis方案

在对 Redis 内存方案进行考察时,vivo 考虑到,英特尔® 傲腾™ 持久内存在成本上具备显著优势,而且在硬件亲和度较大的前提下,基于英特尔® 傲腾™ 持久内存的服务器可以近乎无缝地在 Redis 生产环境下投入使用。因此,vivo 决定采用英特尔® 傲腾™ 持久内存来作为 Redis 系统的缓存介质。

英特尔® 傲腾™ 持久内存性能介于 DRAM 内存与固态硬盘之间, 但在成本上比 DRAM 内存更具优势。英特尔® 傲腾™ 持久内存提供了融合高速、高性价比、大容量、持久数据保护、高级加密等优势于一体的内存选项,可分别支持内存模式(Memory Mode)和 App Direct 模式。在内存模式中,它提供有 128 GB、256 GB 和 512 GB 容量,与普通的易失性系统存储器完全一样,但成本更低,能在稳定的系统预算中实现更高容量。

在内存模式下,英特尔® 傲腾™ 持久内存可作为经济高效的 DRAM 替代品。对应用程序而言,英特尔® 傲腾™ 持久内存可用作易失性内存,由 DRAM 充当最常访问的数据的高速缓存, 同时由英特尔® 傲腾™ 持久内存提供大容量的存储容量。与仅使用 DRAM 的系统相比,配备英特尔® 傲腾™ 持久内存的系统允许使用更大容量的内存,并且更具成本效益。但是,在这种模式下,数据无法持久保存,这意味着在系统电源关闭时数据会丢失。

图 1. 英特尔® 傲腾™ 技术创新—两级内存/存储

在 App Direct 模式下,应用程序和操作系统会有两种可用的内存。系统将决定是从 DRAM 还是英特尔® 傲腾™ 持久内存中写入或读取数据。要求低时延且不需要永久数据存储的操作可以在 DRAM 上执行,必须长期保留的数据将由英特尔® 傲腾™ 持久内存进行存储。

与传统 DRAM 内存相比,英特尔® 傲腾™ 持久内存能够提供更高的容量与更低的 TCO,非常适合于内存容量敏感型应用。

为了验证基于英特尔® 傲腾™ 持久内存的 Redis 系统表现,vivo 通过测试进行了验证。首先,vivo 测试了两种配置在内存模式下的性能差别,测试服务器配置如表 1 所示。

测试数据显示,在内存模式下的测试中,英特尔® 傲腾™ 持久内存的性能要高于 DRAM 内存,这一方面是由于英特尔® 傲腾™ 持久内存具备较高的性能,另一方面是由于英特尔® 至强® 金牌 6230 处理器相较于英特尔® 至强® E5-2620 V4 处理器实现了较高的代际性能提升。其中,set 10B 下的测试结果如图 2 所示。

图 2. 内存模式下DRAM/PMEM测试数据

随后,vivo 在应用直接访问模式下测试了英特尔® 傲腾™ 持久内存的性能表现,测试配置如表 2 所示。

测试数据显示,当长度超过 64B 后,相较于 redis-server 完全使用 DRAM 存储数据的情况,英特尔® 傲腾™ 持久内存在写性能上有 10%-15%2 的劣化;在数据读取的测试中,英特尔® 傲腾™ 持久内存的性能与 redis-server 相当,有些情况还优于 redis-server。例如,在 memtier-benchmark list 类型中 lpushs_1024(b)的测试中,英特尔® 傲腾™ 持久内存配置即体现了一定的性能优势。

图 3. 应用直接访问模式下PMEM/DRAM测试数据

打造高性价比、易运维的 Redis 系统

通过在 Redis 系统中引入英特尔® 傲腾™ 持久内存,vivo 找到了一条扩展 Redis 系统规模的经济可行之道。具体而言,其发挥了如下价值:

  • 高性价比:虽然基于英特尔® 傲腾™ 持久内存的 Redis 系统在性能上稍弱于基于 DRAM 内存的 Redis 系统,但是在成本上却有着较大的优势,考虑到该系统的性能已经能够满足业务所需,因此成本的节约无疑显得至关重要。
  • 简化运维:英特尔® 傲腾™ 持久内存支持更高的单条内存容量,能够有效提升单服务器节点的内存密度,单机提供的内存容量远大于传统方案。这有助于减少服务器节点的部署规模,从而简化运维。
  • 节能减排:基于英特尔® 傲腾™ 持久内存的 Redis 系统支持更小的服务器规模,有助于降低相应的服务器采购、运维、能耗、空间占用等成本,同时实现节能减排。

展望

目前,英特尔® 傲腾™ 持久内存已经在内存数据库等需要大容量集的应用中得到了广泛验证,并证明其在经济性、扩展性、可用性、部署与运维等方面具备突出的优势,这有助于弥补内存供给与需求之间的巨大缺口,帮助企业加速获取洞察,为制定关键业务决策、节约成本和新增收入奠定基础。

在现阶段的合作基础上,vivo 与英特尔将进一步完善当前的合作成果,充分发挥英特尔® 傲腾™ 持久内存的潜能。同时,双方也将在更多的领域进行探索,协同推进内存与存储创新,为上层业务的智慧化转型奠定坚实的基础,为用户提供更优质的产品与服务体验。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部