Redis核心技术与实战【学习笔记】 - 29.Redis的未来猜想,基于 NVM内存

前言

这几年,新型非易失存储(Non-Volatile Memory,NVM)器件发展得非常快。NVM 器件具有容量大、性能快、能持久报错数据的特性,这些刚刚就是 Redis 追求的目标。同时 NVM 器件像 DRAM 一样,可以让软件以字节粒度进行寻址访问,所以,在实际应用中,NVM 可以作为内存来使用,称为 NVM 内存。

Redis 作为内存键值数据库,如果能和 NVM 内存结合起来使用,可以充分享受到这些特性。大胆猜测,Redis 发展的下一步,可能就是基于 NVM 内存来实现大容量实例,或者是实现快速持久化数据和恢复。


1.NVM 内存的特性与使用模式

Redis 是基于 DRAM 内存的键值数据库,而和传统的 DRAM 内存相比,NVM 有三个显著特点。

  • 首先,NVM 内存最大的优势是可以直接持久化保存数据。也就是说,数据保存在 NVM 内存后,及时发生了宕机或掉电,数据仍然在 NVM 内存上。但如果数据是报错在 DRAM 上,那么掉电后数据就会丢失。
  • 其次,NVM 内存的访问速度接近于 DRAM 的速度。有人测试过 NVM 内存的访问速度,结果显示,它的度延迟大约是 200~300 ns,而写延迟大约是 100ns。在读写带宽方面,单根 NVM 内存条的写带宽大约是 1 ~ 2GB/S,而读带宽约 5 ~ 6GB/S。当软件系统把数据报错在 NVM 内存上时,系统仍然可以快速地存取数据。
  • 最后,NVM 内存的容量很大。这是因为,NVM 器件的密度大,单个 NVM 的存储单元可以保存更多数据。例如,单根 NVM 内存条就能达到 128 GB 的容量,最大可以达到 512 GB,而单根 DRAM 内存条通常是 16GB 或 32 GB。所以,我们可以很轻松地用 NVM 构建 TB 级别的内存。

总的来说,NVM 内存的特点可以用三句话概括:

  • 能持久化报错数据
  • 读写速度和 DRAM 接近
  • 容量大

现在,业界已经哟了实际的 NVM 产品,就是 Intel 在 2019 年推出的 Optane AEP 内存条(简称 AEP 内存)。我们在应用 AEP 内存时,需要注意的是,AEP 内存给软件提供了两种模式,分别对应着 NVM 的容量大和持久化保存数据两个特性。

  • 第一种是 Memory 模式。这种模式把 NVM 内存作为大容量内存来使用,只是有 NVM 容量大和性能高的特性,没有启用数据持久化的功能。

    例如,我们可以在一台服务器上安装 6 根 NVM 内存条,每根 512GB,这样我们就可以在单台服务器上获得 3TB 的内存容量了

    在 Memory 模式下,服务器上仍然需要配置 DRAM,但是 DRAM 内存是被 CPU 用来做 AEP 内存的缓存,DRAM 的空间对应用软件不可见。换句话说,软件系统能使用的内存空间,就是 AEP 内存条的空间容量

  • 第二种是 APP Direct 模式。这种模式启用了 NVM 持久化数据的功能。在这种模式下,应用软件数据写到 AEP 内存上市,数据就直接持久化保存下来了。所以,使用了 APP Direct 模式的 AEP 内存,也叫做持久化内存(Persistent Memory,PM)。

2. 基于 NVM 内存的分析

当 AEP 内存使用 Memory 模式时,应用软件就可以利用它的大容量特性来保持大量数据,Redis 也就可以给上层业务应用提供大容量的实例了。而且,在 Memory 模式下,Redis 可以像在 DRAM 内存上运行一样,直接在 AEP 内存上运行,不用修改代码。

不过,需要注意下:在 Memory 下,AEP 内存的访问延迟会比 DRAM 高一点。所以,AEP 在 Memory 模式下运行 Redis 实例,实例读性能会有所下降,我们需要在保存大量数据和读性能较慢两者之间做个取舍。

那么,当我们使用 APP Direct 模式,把 AEP 内存用作 PM,Redis 又该如何利用 PM 快速持久化数据的特性呢?这就和 Redis 的数据可靠性保证和现有机制有关了。

为保证数据可靠性,Redis 设计了 RDB 和 AOF 两种机制,把数据持久化保存到硬盘上。

但是,无论是 RDB 还是 AOF,都需要把数据或命令操作以文件的形式写到硬盘上。对于 RDB 来说,虽然 Redis 实例可以通过子进程生成 RDB 文件,但是,实例主线程 fork 子进程时,仍然会阻塞主线程。而且,RDB 文件的生产需要经过系统文件,文件本身会有一定的操作开销。

对于 AOF 日志来说,虽然 Redis 提了 always、everysec 和 no 三个选项,其中 always 选项以 fsync 的方式落盘保存数据,虽然保证了数据的可靠性,但是面临性能损失的风险。everysec 选项避免了每个操作都要实时落盘,改为后台每秒定期落盘。在这种情况下,Redis 的写性能得到了改善,但是,应用会面临秒级数据丢失的风险。

所以,当我们使用 RDB 和 AOF 文件对 Redis 进行恢复时,需要把 RDB 加载到内存中,或者是回放 AOF 中的日志操作。这个恢复过程的效率受到 RDB 文件大小和 AOF 文件中的日志操作多少的影响。

所以,在前面的章节中,会反复提醒不要让单个 Redis 的实例过大,否则会导致 RDB 文件过大。在主从集群应用中,过大的 RDB 文件就会导致低效的主从同步。

现在 Redis 在涉及持久化操作时的问题:

  • RDB 文件创建时,fork 操作会阻塞主线程。
  • AOF 文件记录日志时,需要在数据可靠性和写性能之间取得平衡。
  • 使用 RDB 和 AOF 恢复数据时,恢复效率受 RDB 和 AOF 大小的限制。

但是,如果我们使用持久还内存,就可以充分利用 PM 快速持久化的特点,来避免 RDB 和 AOF 的操作。因为 PM 支持内存访问,而 Redis 的操作都是内存操作,那么,我们就可以把 Redis 直接运行在 PM 上。同时,数据本身就可以在 PM 上持久化保存了,我们就不再需要额外的 RDB 和 AOF 日志机制来保证数据可靠性了。

先介绍下 PM 的使用方法。
当服务中部署了 PM 后,我们可以在操作系统的 /dev 目录下看到一个 PM 设备,如下所示:

/dev/pmem0

接着,我们把这个格式化好的设备,挂载到服务器上的一个目录下:

mount -o dax /dev/pmem0 /mnt/pmem0

此时,我们就可以在这个目录下创建文件了。创建好了以后,再把这些文件通过内存映射(mmap)的方式映射到 Redis 的进程空间。这样一来,我们就可以把 Redis 接收到的数据直接保存到映射的内存空间上了,而这块内存空间是由 PM 提供的。所以,数据写入这块空间时,就可以直接被持久化保存了。

而且,如果要修改或删除数据,PM 本身也支持以字节粒度进行数据访问,所以,Redis 可以直接在 PM 上修改或删除数据。

如果实例发生了故障,Redis 宕机了,因为数据本身以及持久化保存到 PM 上了,所以我们可以直接使用 PM 上的数据进行实例恢复,而不用再像现在的 Redis 那样,通过加载 RDB 文件或是重放 AOF 日志操作来恢复了,可以实现快速恢复。

当然,因为 PM 的读写速度比 DRAM 慢,所以,如果使用 PM 来运行 Redis,需要评估下 PM 提供的访问延迟和访问带宽,是否满足业务层的需求

我给你举个例子,带你看下如何评估 PM 带宽对 Redis 业务的支撑。

假设业务层需要需要支持 1 百万 QPS ,平均每个请求的大小是 2KB,那么,就需要机器支持 2GB/S 的带宽(1 百万请求操作每秒 * 2KB 每请求 = 2GB/S)。如果,这些请求正好是写操作的话,那么单根 PM 的写带宽可能不太够用。

这个时候,就可以在一台及其上使用多根 PM 内存条,来支撑高带宽的需求。当然,也可以使用切片集群,把数据分散保存到多个实例,分担访问压力。

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

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

相关文章

几个经典金融理论

完整EA:Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 一、预期效用理论 预期效用理论是描述人们在做出决策时如何考虑风险和不确定性的一种理论。该理论最初由经济学家冯诺伊曼(John von Neumann)和奥斯卡摩根斯坦恩(Oskar…

全栈笔记_工具篇(nvm免安装版配置)

免安装版配置 下载nvm包:选择免安装压缩包nvm-noinstall.zip 解压zip包:将压缩包解压到指定目录,如:C:\nvm 新增环境变量: NVM_HOME:nvm解压之后的文件路径,对应配置文件里的root值NVM_SYMLINK:nvm 文件夹里新建 nodejs文件夹,对应配置文件里的path值 修改环境变量Pat…

跨域问题浅析

什么是源(域) 在W3C的定义中,源是由协议、主机(IP 地址或者域名)和端口三者确定。如果两个 URL 的协议、主机(IP 地址或者域名)和端口都一样的话,那么这两个 URL 就是同源的。 同源策略 由于源与源之间是未知且默认的,所以非本源中的资源(即URL对应的资源)是不可控的…

数解 transformer 之 self attention transformer 公式整理

千万不要从任何角度轻看 transformer,重要的话说四遍: 千万不要从任何角度轻看 transformer 千万不要从任何角度轻看 transformer 千万不要从任何角度轻看 transformer Attention is all you need 整个项目是鬼斧神工之作,巧夺天工之作&a…

Spring 用法学习总结(三)之 AOP

Spring学习 7 bean的生命周期8 AOP面向切面编程8.1 AOP相关术语8.2 AOP使用 7 bean的生命周期 bean的生命周期主要为bean实例化、bean属性赋值、bean初始化、销毁bean,其中在实例化和初始化前后都使用后置处理器方法,而InstantiationAwareBeanPostProce…

2024大健康展,山东省大健康产业博览会,济南营养健康展会

立足济南,面向世界,2024第六届中国国际大健康产业博览会,定档2024年5月27-29日,在济南黄河国际会展中心举办; 2024第6届中国(济南)国际大健康产业博览会(China-DJK山东健博会&#…

控制论与科学方法论

《控制论与科学方法论》,真心不错。 书籍原文电子版PDF:https://pan.quark.cn/s/00aa929e4433(分类在学习目录下) 备用链接:https://pan.xunlei.com/s/VNgj2vjW-Hf_543R2K8kbaifA1?pwd2sap# 控制论是一种让系统按照我…

CTF-web 之 burp suite 使用

burp suite 使用 一般其是作为一个辅助工具,直接使用来解题的部分是少数,我们可以使用它来观察请 求和响应,并且可以反复的提交,关键的是他还带有很多其他的功能,在我们做题的过程中, 使用的关键点包括&…

MyBatis篇----第六篇

系列文章目录 文章目录 系列文章目录前言一、什么是 MyBatis 的接口绑定?有哪些实现方式?二、使用 MyBatis 的 mapper 接口调用时有哪些要求?三、Mapper 编写有哪几种方式?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳…

OpenGL-ES 学习(1)---- AlphaBlend

AlphaBlend OpenGL-ES 混合本质上是将 2 个片元的颜色进行调和(一般是求和操作),产生一个新的颜色 OpenGL ES 混合发生在片元通过各项测试之后,准备进入帧缓冲区的片元和原有的片元按照特定比例加权计算出最终片元的颜色值,不再是新&#xf…

面试官:介绍一下MVC框架

前言 大家好,我是chowley,MVC相信大家都听说过,今天我就记录一下我心中的MVC框架 MVC(Model-View-Controller)是一种软件设计模式,用于将应用程序分为三个核心部分:模型(Model&…

书生浦语大模型实战营-课程笔记(2)

介绍了一下InternLm的总体情况。 InternLm是训练框架,Lagent是智能体框架。 这个预训练需要这么多算力,大模型确实花钱。 Lagent是智能体框架,相当于LLM的应用。 pip设置 开发机的配置 pip install transformers4.33.1 timm0.4.12 sente…

计算机二级数据库之数据模型

数据模型 模型的概念 模型的介绍模型是对现实世界特征的模拟和抽象, 数据模型的概念: 数据模型是对现实世界中数据特征的抽象,描述的是数据的共性。 数据模型是用来在数据库中抽象、表示和处理现实世界中的数据和信凹。 其相关的共同特…

vue项目搭建测试

5&#xff0c;项目测试 导入elementplus以及样式 import ElementPlus from element-plus import element-plus/dist/index.csscreateApp(App).use(store).use(router).use(ElementPlus).mount(#app)<template><el-row class"mb-4"><el-button>De…

MATLAB|基于改进二进制粒子群算法的含需求响应机组组合问题研究(含文献和源码)

目录 主要内容 模型研究 1.改进二进制粒子群算法&#xff08;BPSO&#xff09; 2.模型分析 结果一览 下载链接 主要内容 该程序复现《A Modified Binary PSO to solve the Thermal Unit Commitment Problem》&#xff0c;主要做的是一个考虑需求响应的机组组合…

投资银行在网络安全生态中的作用

文章目录 一、投资银行的含义(一)并购买方。(二)并购卖方。(三)IPO辅助。(四)投资银行业务的另一方面是帮助这些交易融资。二、从投资银行角度看网络安全产业(一)行业的短期前景三、复杂的网络安全并购(一)行业知识对投资银行业务很重要(二)在网络安全领域,技术…

HDFS的超级用户

一. 解释原因 HDFS(Hadoop Distributed File System)和linux文件系统管理一样&#xff0c;也是存在权限控制的。 但是很不一样的是&#xff0c; 在Linux文件系统中&#xff0c;超级用户Superuser是root而在HDFS中&#xff0c;超级用户Superuser是启动了namenode的用户&#x…

neo4j下载安装最新教程 2024.02

文章目录 neo4j简介下载地址配置环境变量命令行启动验证安装结果 neo4j简介 Neo4j 是一个高性能的 NoSQL 图形数据库&#xff0c;它将结构化数据存储在网络&#xff08;从数学角度叫做图&#xff09;上而不是表中。Neo4j 也可以被看作是一个高性能的图引擎&#xff0c;该引擎具…

python 字典

字典是一种可变容器模型&#xff0c;且可存储任意类型对象。 字典中的键必须是可哈希的&#xff0c;即不可变的数据类型&#xff0c;如字符串、数字、元组等。列表、字典等可变数据类型不能作为字典的键。 ​#创建字典-----使用{}&#xff0c;每个键值对用冒号分隔&#xff0…

mathtype公式

Mathtype 手写板 Win11手写板按钮灰色问题解决&#xff1a;在C:\Program Files\Common Files\microsoft shared\ink目录下粘贴mip.exe&#xff0c;C:\Program Files\Common Files\microsoft shared\ink\en-US目录下添加mip.exe.mui提取码y04v 公式识别 配合免费图片公式识别…