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

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

背景

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

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

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

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

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

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

70fdc29cd1d6ad40e799ae06201bb4fc220a900c 

图1:NVM产品的存储层次结构

目前已有的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上(比如EXTDAX模式),通过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
图3:Redis写入性能对比

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重建完成才能提供写服务等。后续会继续跟进这些问题,结合技术和产品来一起合理改进。

原文链接

本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rgss加密文件解包器_Unity AssetBundle高效加密案例分享

这是侑虎科技第585篇文章,感谢作者江鱼供稿。欢迎转发分享,未经作者授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群:793972859)作者主页:https://www.zhihu.com/…

阿里云DTS大幅降价,低至400元即可获得实现秒级延迟的数据传输服务

为了释放更多技术红利,进一步普惠广大客户和开发者,阿里云7月上旬宣布数据传输服务(Data Transmission Service,简称DTS) 数据同步功能降价,最高降价幅度高达40%。中国大陆,最低单价低至400元/月,跨境专线同步&#xf…

【又是一波重点】深度解析服务器科普知识 | CSDN博文精选

戳蓝字“CSDN云计算”关注我们哦!作者 | Hardy晗狄转自 | CSDN博客责编 | 阿秃服务器是网络数据的节点和枢纽,是一种高性能计算机,存储、处理网络上80%的数据、信息,负责为网络中的多个客户端用户同时提供信…

Linux下启动/关闭Oracle服务和 oracle监听启动/关闭/查看状态

文章目录一、Linux下启动Oracle 二步曲1)启动监听2)启动数据库实例二、Linux下启动Oracle 实战操作2.1. 登录服务器,切换到oracle用户,或者以oracle用户登录2.2. 打开监听服务2.3. 以SYS用户身份登录Oracle2.4. 通过startup命令启…

【公测中】阿里云发布国内首个大数据双活容灾服务,满足高要求大数据灾备场景

在6月上旬举行的云栖大会上海峰会上,阿里云发布了国内首个大数据集群双活容灾产品-混合云容灾服务下的混合云大数据容灾服务(HDR for Big Data, 简称 HDR-BD),并已经在7月份开始邀测。HDR-BD采用业界领先的数据双向实时复制技术&a…

linux CentOS7 最小化安装环境静默安装Oracle11GR2数据库(安装操作系统环境_01)

文章目录最小化安装 linux CentOS7我使用的镜像包:CentOS-7-x86_64-DVD-1810.iso虚拟机就创建好了 通过方向键选择:install centos 7 回车 直接点击:continue 这里采用自动分区,手动自定义分区请参考 网络设置方式有2种 第一种…

阿里云发布vSphere虚拟机备份服务 ,网络带宽有限条件下依然能有效保护数据

在6月上旬举行的云栖大会上海峰会上,阿里云发布了vSphere虚拟机备份上云服务(HBR for vSphere),并已经在7月份开始邀测。利用混合云备份服务可以将虚拟机镜像备份上云,避免了传统备份方案复杂的软件部署,存…

行!人工智能玩大了!程序员:太扯,阴谋!你怎么看?

人工智能真的玩大了吗?人工智能行业的人才真的“爆发了?”AI程序员究竟怎么样?A与B 薪酬与前景程序员与远方2017年~2018年,是人工智能大火的时候。你会发现,跟朋友聊天不谈人工智能,聊天的bigger都上不去。…

spss 22 0统计分析从入门到精通_「转需」20+统计分析软件使用工具包,一次全搞定...

数据越来越多,使用统计软件对数据进行处理不失为一个减少工作量的好办法。在学习统计时,又怎么能少的了各种分析数据的助手呢?情报站为大家准备了常用统计软件使用工具包,各项常用统计软件课程一次全到手!(领取方式见评…

Pandas/networkx图分析简单入门

摘要: 本文是一篇pandas/networkx图分析入门,对所举的欺诈检测用例进行了简单的图论分析,便于可视化及操作。 对于图论而言,大家或多或少有些了解,数学专业或计算机相关专业的读者可能对其更加清楚。图论中的图像是由若…

linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(安装常用工具_02)

接上一篇:linux CentOS7 最小化安装环境静默安装Oracle11GR2数据库(安装操作系统环境_01) 安装wget yum install -y wget安装vim yum install -y vim-enhanced或者 yum -y install vim安装unzip yum install zip unzip安装 lrzsz yum -y…

如何在学习机器学习时学习数学?

摘要: 机器学习到底需要怎么样的数学基础?高段位机器学习如何练成?来瞧瞧。 到目前为止,我们都还不完全清楚开始机器学习需要什么样的数学水平,特别是那些没有在学校学习数学或统计学的人。 在这篇文章中&#xff0c…

RPA机器人来了, 你的饭碗还好吗?

摘要: RPA正在席卷全球各行各业,从金融到医疗再到零售。多种重复有规律的工作流程正在被代替。从上世纪90年代到现在,RPA经历了怎样的发展历程,目前又是怎么样的现状呢? RPA,正在席卷全球 这是一个平常的星…

linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(安装依赖包_03)

接上一篇:linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(安装常用工具_02) 安装Oracle11GR2所需要的依赖包 有高手写成了这样: yum -y install gcc gcc-c make binutils compat-libstdc-33 elfutils-libelf elfutils-libelf-devel …

机器学习算法概述:随机森林逻辑回归

摘要: 机器学习算法入门介绍:随机森林与逻辑回归! 随机森林是用于分类和回归的监督式集成学习模型。为了使整体性能更好,集成学习模型聚合了多个机器学习模型。因为每个模型单独使用时性能表现的不是很好,但如果放在一…

【终于等到你】7种策略解除云风险警报

戳蓝字“CSDN云计算”关注我们哦!作者 | Bruce Harpham转自 | INSIDER责编 | 阿秃云服务时代已经来临,且企业也正在积极的拥抱云技术。之前的云服务仅限于简单的存储或者联系人管理,而现在,像ERP这样的企业核心服务也开…

linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(oracle基础配置_04)

接上一篇:linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(安装依赖包_03) 创建用户 组 及文件夹 创建用户组:groupadd oinstall 创建用户组:groupadd dba 创建用户并添加到用户组:useradd -g oinst…

HTTPS时代已来,你做好准备了吗?

摘要: 全站HTTPS时代的到来,这也是最近越来越多的网站上HTTPS和更换证书的原因。那么究竟什么是HTTPS?它为什么会提升安全系数?CDN HTTPS又将如何做到安全性与性能同时提升?作为用户,又如何快速便捷的进行部…

专访阿里视频云叔度:一场技术人的自我修行

摘要: 千年之后的2018年,“玄奘之路”BC连14位同伴在这段自我修行的路程中沿着大师昔日的足迹徒步前行,对极致的追求促使他们努力挑战生命的每个不可能。其中,最让人感动的是一个打着点滴行进的身影,他在遭遇右腿受伤、…

spring cloud gateway 网关_微服务网关Spring Cloud Gateway全搞定

一、微服务网关Spring Cloud Gateway1.1 导引文中内容包含:微服务网关限流10万QPS、跨域、过滤器、令牌桶算法。在构建微服务系统中,必不可少的技术就是网关了,从早期的Zuul,到现在的Spring Cloud Gateway,网关我们用的…