阿里云基于NVM的持久化高性能Redis数据库

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 背景 Redis作为一款简洁、高效的开源K/V数据库,可以被用于内存缓存、持久化存储等不同场景,大量服务于各类互联网应用。同时也提供了丰富的功能配置,客户可以根据各自业务需求,在读写性能、缓存容量、数据可靠性等方面作出灵活的选择。

背景

Redis作为一款简洁、高效的开源K/V数据库,可以被用于内存缓存、持久化存储等不同场景,大量服务于各类互联网应用。同时也提供了丰富的功能配置,客户可以根据各自业务需求,在读写性能、缓存容量、数据可靠性等方面作出灵活的选择。

Redis提供了RDB和AOF两种持久化方式供选择,4.0中更是引入了RDB-AOF混合持久化的方式,整合RDB和AOF的优势,提供更实时的数据持久化保证、更快的恢复速度和更紧凑的空间使用。针对AOF的写入,Redis提供了两种选项供选择:

• alwaysaoflog实时写入落盘,保证写入数据的安全性,但写入性能下降严重。

• everysecbuffer写入aoflog,后台定期刷盘,可以很好的保证写入性能,但在failure场景下,需要承担秒级新写入数据丢失的风险。

这两种模式需要用户在性能和数据安全性之间做出取舍,鱼和熊掌无法兼得。对一些对数据安全性有更高要求的场景,需要应用层协同来保证数据安全,会给系统设计和实现带来一定的复杂度。另一方面,在Redis发生failover的时候,会有一个缓存预热重建的过程,期间对应用会有一个可感知的不可服务时间、以及访问延时抖动。

关于上述问题,很重要的一个原因在于目前DRAM和SSD(请忽略HDD)之间巨大的性能鸿沟。近几年,备受学术界和工业界关注的NVM(Non-volatile Memory 技术,给这类问题的解决带来了新的机遇。

70fdc29cd1d6ad40e799ae06201bb4fc220a900c 

1NVM产品的存储层次结构

目前已有的NVM产品,对上层应用提供DIMM形态的访问接口。作为一种NVM设备,相比于DRAM具备掉电不丢数据的特性,容量上也会比DRAM高出一个数量级,成本优势明显。相比于传统SSD,不但读写速度更快(百ns量级),而且具备字节寻址的能力。同时也要看到,NVM产品仍然存在读写不对称、顺序和随机访问不对称等特征。

从应用场景上来看,NVM产品可以定位于替代部分DRAM功能,支撑持久Memory或In-Memory应用。具体来说可被应用在如下场景:

• 持久化内存:作为数据持久层,对数据一致性要求高的持久化系统,同时兼顾数据可靠性和数据读写性能。

• 内存数据库:作为数据In Place空间,提供数据运行和持久化存储空间。

• 系统日志卷作为日志卷,例如,在HPC系统中通常采用Checkpointing实现对计算中间状态进行持久化保存,这是一个耗时、耗系统吞吐量的过程

 

基于NVM产品提供的字节寻址、持久化、高性能的能力,以及考虑到其读写、顺序和随机访问不对称等特性,对Redis作了细致的设计和深度的定制化改造,针对上面几个问题取得非常好的测试效果。

性能分析

前面提到Redis的always模式通过实时flush操作确保AOF文件的实时持久化,但这会导致性能大幅下降。Everysec模式通过大幅减少flush操作的频率,基于page cache缓冲对设备的读写访问大幅提升QPS性能,但是这会引入秒级的数据丢失风险。而基于NVM产品提供的持久化能力可以非常优雅地解决这个问题,兼顾性能和可靠性。整个的数据流图如下:

f0771e2f2f39e51282212b38bbe5c19ef8bc63ad 

2: 基于NVM产品的数据读写流程

首先将AOF文件直接放在基于NVM产品的PMEM-aware filesystem上(比如EXT4 DAX模式),通过mmap将AOF文件映射到用户态地址空间,之后对AOF的访问操作就变成了非常轻量的直接load/store方式,而且要确保数据持久化也仅需要在用户态执行persist操作(主要是cache flush)。可见,基于NVM产品的AOF持久化机制相比传统的IO栈要轻量的多:

B• Bypass整个传统IO栈(Block层->设备驱动等),实现直接load/store操作。

• 通过cache flush操作即可实现持久化,取代了flush系统调用。

AOF机制的另一个问题是AOF文件的持续增大会造成巨大的空间浪费,所以阿里云Redis团队通过后台线程的方式按照一定的策略(考虑吞吐和资源占用量等)对AOF文件进行replay操作。即根据AOF命令在NVM产品上构造持久化的KV数据结构,然后完成回放的AOF文件就可以删除,从而解决了AOF占用空间的问题。

之所以选择后台线程异步replay的方式在NVM上构建持久化数据结构,是因为该过程需要通过事务操作来保证写操作的原子性和数据结构的一致性,耗时较大,所以数据先写到DDR的方式可以保证客户端写操作的QPS不下降。考虑到NVM拥有出色的读性能,数据异步replay到NVM之后,会根据数据冷热和内存占用量释放部分value比较大的内存副本,转而直接基于NVM提供读服务。所以DRAM逐渐演变为NVM的写cache和热数据的读cache,以充分发挥NVM的读性能和成本优势,同时规避NVM写性能(相对)的短板问题。

在两台96核/384GB神龙服务器上,实测string数据结构的SET操作,从结果数据来看几乎与everysec模式的性能持平,同时兼顾了always模式的数据安全性和everysec模式的高性能。

82d13131f89c9c7a571f70ffa55d25b0540addaf
3Redis写入性能对比

Redis在重启时需要进行数据恢复操作。原生Redis重启后都需要从RDB和AOF中加载数据到内存,完成加载后才可以正常提供服务。经过实测,10GB左右数据的RDB加载时间大概为53秒左右,这段时间内Redis服务处于不可用状态。而在基于NVM的方案中,Redis重启后可以先基于NVM的持久化数据结构直接提供读服务,DRAM数据结构重建完成后即可提供完整的读写服务。同样针对10GB左右的数据集,系统shutdown save后重启,实测1秒内可以提供只读服务,35秒内可以提供完整读写服务,整个数据恢复时间大幅下降。如下图所示:

c8db599b0b65bec82683341970f4bb3c5a79076b 

4: Redis recovery时间对比

另外,原生Redis通过fork一个子进程来保存全量DB数据到RDB或AOF文件,即使相比上次保存的数据仅有一个key的变更,也依然会全量保存整个DB,显然这不是一种高效的实现方式。并且该过程会对Redis带来较大的性能抖动。而基于NVM的方案是一种持续增量持久化的方式,更加高效和平滑,这点对于在线服务来说至关重要。

NVM相比DRAM能提供更高的存储密度和更大容量的数据存储空间,因此可以有效降低单位数据存储成本。基于NVM的字节寻址能力和与DRAM的速度差异,我们设计了NVM非易失性内存和DRAM易失性内存间的数据换入与换出策略,能在不影响Redis基本性能的前提下,提高数据的存储容量并节约成本。

结束语

整个方案中,充分发挥了NVM的字节寻址、持久化等能力,借助DRAM做cache来弥补NVM读写不对称的问题,从而实现了高可靠、高性能、低成本的Redis数据库,从测试数据可以看出NVM对Redis在持久化以及其他性能方面提升效果非常显著。

除此之外,NVM相比DRAM能提供更高的存储密度和更大容量的数据存储空间,因此可以有效降低单位数据存储成本。在不影响Redis基本读写性能的前提下,基于NVM和DRAM的动态数据输入换出,是我们下一步工作的方向之一。

当然,目前方案仍存在一些待优化的点,比如:对于高写入场景,replay性能跟不上DRAM写入速度;failover时候,需要等DRAM重建完成才能提供写服务等。后续会继续跟进这些问题,结合技术和产品来一起合理改进。

 

 

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
19天前
|
SQL 存储 调度
从 Volcano 火山模型到 Pipeline 执行模型,阿里云数据库 SelectDB 内核 Apache Doris 执行模型的迭代
一个合适的执行模型对于提高查询效率和系统性能至关重要。本文全面剖析 Apache Doris Pipeline 执行模型的设计与改造历程,并在 2.1 版本对并发执行模式与调度模式进一步优化,解决了执行并发受限、执行及调度开销大等问题。
从 Volcano 火山模型到 Pipeline 执行模型,阿里云数据库 SelectDB 内核 Apache Doris 执行模型的迭代
|
20天前
|
存储 消息中间件 缓存
Redis的高性能使得它非常适合用于实时分析场景
【5月更文挑战第15天】Redis在Python Web开发中扮演关键角色,常用于缓存系统,提高数据读取速度;会话管理,存储用户信息;分布式锁,确保数据一致性;排行榜和计数,利用有序集合和哈希结构;消息队列,基于列表结构实现异步处理;实时分析,高效处理实时数据。其丰富的数据结构和高性能使其在多种场景下应用广泛。
296 3
|
20天前
|
监控 Cloud Native 大数据
即刻预约|阿里云数据库 SelectDB 版商业化发布会,5月21日14:00与您相约
2024年5月2日14:00,阿里云数据库 SelectDB 版商业化产品发布会将于线上重磅举行,即刻开启预约!👇 直播地址:https://developer.aliyun.com/special/selectdb?utm_content=g_1000393528
760 0
即刻预约|阿里云数据库 SelectDB 版商业化发布会,5月21日14:00与您相约
|
4天前
|
存储 运维 5G
基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案
数据是 5G 全连接工厂的核心要素,为支持全方位的数据收集、存储、分析等工作的高效进行,联通 5G 全连接工厂从典型的 Lambda 架构演进为 All in [Apache Doris](https://c.d4t.cn/vwDf8R) 的实时/离线一体化架构,并凭借 Doris 联邦查询能力打造统一查询网关,数据处理及查询链路大幅简化,为联通 5G 全连接工厂带来数据时效性、查询响应、存储成本、开发效率全方位的提升。
基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案
|
7天前
|
OLAP 数据处理 Apache
众安保险 CDP 平台:借助阿里云数据库 SelectDB 版内核 Apache Doris 打破数据孤岛,人群圈选提速4倍
众安保险在CDP(Customer Data Platform,客户数据平台)建设中,通过引入阿里云数据库SelectDB版内核Apache Doris,成功打破了数据孤岛,并显著提升了人群圈选的速度
168 1
|
8天前
|
弹性计算 运维 负载均衡
【阿里云弹性计算】阿里云ECS在金融科技中的应用案例:高性能交易系统的构建
【5月更文挑战第27天】阿里云ECS助力某证券公司构建高性能交易系统,满足高并发、高可用和弹性扩展需求。ECS凭借最新处理器技术、高速内存实现高性能计算;支持多地域、多可用区部署保证高可用性;弹性伸缩特性适应业务波动,降低运维成本。通过分布式架构和负载均衡技术,实现交易请求高效处理,确保系统稳定运行。案例证明,阿里云ECS是金融科技领域构建高性能交易系统的理想选择。
32 1
|
9天前
|
存储 缓存 监控
利用Redis构建高性能的缓存系统
在现代Web应用中,性能优化是提升用户体验和响应速度的关键。Redis作为一款开源的内存数据结构存储系统,因其出色的性能、丰富的数据结构和灵活的使用方式,成为了构建高性能缓存系统的首选工具。本文将探讨Redis在缓存系统中的应用,分析其优势,并通过实例展示如何结合Redis构建高效、可靠的缓存系统,以应对高并发、大数据量等挑战。
|
9天前
|
弹性计算 缓存 安全
【阿里云弹性计算】阿里云ECS与CDN结合:构建高性能全球内容分发网络
【5月更文挑战第26天】阿里云ECS与CDN结合打造高性能全球内容分发网络,通过ECS的弹性伸缩和安全可靠性,配合CDN的全球覆盖、高可用性及安全防护,提升访问速度,减轻服务器压力,优化数据传输。以WordPress为例,通过配置CDN域名和ECS,实现高效内容分发,提高系统扩展性和稳定性。此解决方案满足用户对访问速度和稳定性的高要求,为企业提供优质的云计算体验。
40 0
|
11天前
|
开发框架 算法 .NET
阿里云无影×贝锐向日葵:把你的电脑秒变高性能PC!
阿里云无影×贝锐向日葵:把你的电脑秒变高性能PC!
29 2
|
11天前
|
关系型数据库 分布式数据库 数据库
【阿里云云原生专栏】云原生时代的数据库选型:阿里云RDS与PolarDB对比分析
【5月更文挑战第24天】阿里云提供RDS和PolarDB两种数据库服务。RDS是高性能的在线关系型数据库,支持MySQL等引擎,适合中小规模需求;而PolarDB是分布式数据库,具备高扩展性和性能,适用于大规模数据和高并发场景。RDS与PolarDB在架构、性能、弹性伸缩、成本等方面存在差异,开发者应根据具体需求选择。示例代码展示了如何通过CLI创建RDS和PolarDB实例。
476 0

热门文章

最新文章