重构内存数据库,优化体验和成本

重构内存数据库,优化体验和成本

【文章概述】

百度将Feed-Cube的核心工作场景迁移至由傲腾数据中心可持久内存构建的全新内存平台上。使得在高并发Feed流业务场景下依然可以保持性能优势,同时显著降低成本;

腾讯云Redis云数据库搭载傲腾™数据中心级持久内存的平台,所能提供的单实例内存容量,可扩展至只配置有DRAM内存的平台的1.34倍,单实例内存容量/TCO也达到1.36倍,实现了扩充容量、降低成本的目标。

我们早已进入大数据时代,但是大众更多关心的是数据有多大,而不是这些数据存放在哪里,虽然后者关系到存储和访问数据的性能与成本。

为了承载国民的社交、娱乐需求和企业的数字化基础设施,腾讯所拥有的服务器总量已超过100万台,大部分运行在国内的数十个大规模数据中心里。2018数字中国万里行的第一站就选在腾讯天津滨海数据中心,这是腾讯第一个自建的超大规模数据中心,也是国内最早达成服务器保有量十万台的数据中心园区之一。

除了北上广三大数据中心必布之地,腾讯还很早就布局了西南市场,在重庆已形成多个数据中心组成的集群,据第三方估算,重庆地区半数以上的机柜资源掌握在腾讯手里。2019数字中国万里行探访的重庆腾讯云计算数据中心是其中的核心,总占地面积约为250亩,总建筑面积20万平方米,总投资约100亿元人民币,建成后将具备20万台服务器的运算存储能力。现已建成2栋机房楼,建筑面积各25000平方米。已交付的2号楼约能容纳2000个8KW机柜,每个机柜部署22~23台服务器,总服务器数量可接近5万台。

百度则在华北地区加大了投入力度,从2019年10月底相继开工的百度徐水智能云计算中心和百度定兴智能云计算中心,到11月21日举行奠基仪式的百度阳泉智能云计算中心二期工程,一个月内三座超大型云计算数据中心相继动工,百度正在京畿腹地快速推进产业智能化升级。

作为百度自建的第一个大型数据中心项目,百度阳泉智能云计算中心(一期)项目可承载16万台服务器,拥有超过300万颗CPU核、6EB级存储容量,可存储的信息量相当于30多万个中国国家图书馆的藏书总量。

6EB的存储容量,即使不考虑数据冗余,用单个容量12TB的硬盘来承载,也需要50万个之多。不过,大数据的要义不仅是“大”,还意味着“快”,否则只有存储而没有利用的价值。如果在访问数据的时候,都要到大而缓慢的硬盘里去找,注定无法满足AI时代的应用需求。

以Redis为代表的内存数据库可以解决访问访问速度的问题,最大的阻碍是内存的容量和价格实在太高。SSD的性能和成本都介于内存与硬盘之间,但是常见的SATA和NVMe SSD不能直接用于内存数据库。

今年3月,英特尔推出了一款基于3D XPoint存储技术的傲腾数据中心可持久内存(Optane DCPersistent Memory,简称DCPMM),化解了百度和腾讯在海量数据访问上的难题。

百度:优化信息流,查询更高效

Feed 流是一种聚合内容并持续呈现给用户的互联网服务方式,可以通过时间流、页面权重或特定的人工智能算法来实施,可为用户提供更为个性化的信息。伴随着入驻账号数量增加,后端的数据压力越来越大,数据库调用的节奏也开始变得缓慢,亟需一款全新的解决方案实现数据库查询优化。

数以亿计的用户规模意味着千万量级的并发服务和更低延迟的数据处理性能,百度的应对之策是先进的核心内存数据库 Feed-Cube,为Feed流服务的数据存储和信息查询提供支撑。

Feed-Cube基于内存构建,采用KV存储结构,数据都存放在内存里,以获得出色的读写性能及超低的延迟。随着百度Feed流服务规模的不断扩大,DRAM容量小、价格高的劣势也愈发明显起来。

百度尝试使用NVMe SSD存储数据、DRAM作为Cache的解决方案,幸运的是,他们很快发现英特尔新推出的傲腾数据中心级可持久内存比NVMe SSD更适合作为DRAM的搭档。在经过慎重考虑之后,百度将Feed-Cube的核心工作场景迁移至由傲腾数据中心级可持久内存构建的全新内存平台上,这个过程可以概括为以下四个步骤:

第一步,升级硬件平台。将Feed-Cube部署在基于第二代英特尔®至强®可扩展处理器的平台上,以获得更为强劲的计算性能和对英特尔®傲腾™数据中心级持久内存的支持;

第二步,新硬件平台需要进行软件适配。英特尔根据Feed-Cube应用场景的需求,在服务器BIOS中加入对英特尔®傲腾™数据中心级持久内存的支持驱动,并在百度自研4系 Linux内核的基础上,增添相关的补丁;

第三步,调整软件架构。百度首先采用DRAM+DCPMM的混合配置作为过渡方案,将访问更为频繁、容量偏小的Key 值及 Value 值所在数据文件的存储偏移值存放在DRAM内存中,存放Value值的数据文件存放于傲腾数据中心级持久内存中。在模拟实际场景的2000万大并发访问压力下,采用混合配置的Feed-Cube平均访问耗时仅上升约24%,处理器消耗整机占比上升7%,性能波动均在百度可接受的范围内,而单服务器的DRAM内存使用量下降过半,考虑到PB级的Feed-Cube存储规模,成本的降低幅度非常显著。

第四步,全面迁移。混合配置模式的成功,为Feed-Cube全面部署在英特尔®傲腾™数据中心级持久内存打下了基础。为达成这一目标,百度使用了基于libmemkind库的自研空间分配库,将malloc/free等内存空间分配命令用新的命令替代,在提供空间分配操作能力的同时,也改善了空间利用率。

全部采用英特尔®傲腾™数据中心级持久内存构建的Feed-Cube,在每秒50万次查询(QPS)的访问压力下,与最初只配置DRAM内存的方案相比,平均时延仅上升不到10%,性能波动仍在百度可接受的范围内,成本则得到了进一步的降低。

腾讯:更强的Redis云数据库

Redis是一种典型的内存数据库,具有高性能、高灵活、低响应时延及丰富的数据结构类型等优点,适用于业务缓存、会话存储、消息队列和信息发布等应用场景。今年7月,腾讯云对外重磅发布云数据库Redis 4.0,其中标准版的核心性能进一步突破性能极限,达到业内顶级的50万QPS,集群版支持千万级QPS,也让达到了业内领先。

不仅如此,这一次发布的云数据库Redis 4.0产品包括Redis监控2.0、DTS For Redis集群版,通过监控和数据传输层面的优化,让Redis 4.0版本速度更快、运行更稳,功能更全面。该版本数据库的推出,将有效降低游戏、电商、直播等行业的用云成本。

据腾讯云数据库产品负责人王义成介绍:“Redis在缓存应用场景中拥有不可取代的地位,被广泛应用于数据缓存、游戏存储、分布式会话存储、实时分析和机器学习等场景。腾讯云在Redis数据库领域的不断突破,将为用户提供极致易用、易维护、高可靠、低成本的云上数据库服务。”

如今,腾讯Redis云数据库已能提供10万级的每秒查询量(Query Per Second,QPS),但DRAM内存高价格、低容量的缺点,抬高了Redis云数据库的成本,限制了用户的使用规模。腾讯云通过与英特尔合作,引入第二代英特尔®至强®可扩展处理器和英特尔®傲腾™数据中心级持久内存这对“黄金搭档”,破解了罩在腾讯Redis云数据库服务上的成本和容量枷锁,并获得更高的性价比。

腾讯云基于双路英特尔®至强®铂金8260处理器的对比测试数据显示,在同一SLA等级上,搭载傲腾™数据中心级持久内存的平台所能提供的单实例内存容量,可扩展至只配置有DRAM内存的平台的1.34倍,单实例内存容量/TCO也达到1.36倍,实现了扩充容量、降低成本的目标。