Redis 核心技术与实战
蒋德钧
中科院计算所副研究员
79224 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 53 讲
开篇词 (1讲)
实践篇 (28讲)
Redis 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

40 | Redis的下一步:基于NVM内存的实践

你好,我是蒋德钧。
今天这节课是咱们课程的最后一节课了,我们来聊聊 Redis 的下一步发展。
这几年呢,新型非易失存储(Non-Volatile Memory,NVM)器件发展得非常快。NVM 器件具有容量大、性能快、能持久化保存数据的特性,这些刚好就是 Redis 追求的目标。同时,NVM 器件像 DRAM 一样,可以让软件以字节粒度进行寻址访问,所以,在实际应用中,NVM 可以作为内存来使用,我们称为 NVM 内存。
你肯定会想到,Redis 作为内存键值数据库,如果能和 NVM 内存结合起来使用,就可以充分享受到这些特性。我认为,Redis 发展的下一步,就可以基于 NVM 内存来实现大容量实例,或者是实现快速持久化数据和恢复。这节课,我就带你了解下这个新趋势。
接下来,我们先来学习下 NVM 内存的特性,以及软件使用 NVM 内存的两种模式。在不同的使用模式下,软件能用到的 NVM 特性是不一样的,所以,掌握这部分知识,可以帮助我们更好地根据业务需求选择适合的模式。

NVM 内存的特性与使用模式

Redis 是基于 DRAM 内存的键值数据库,而跟传统的 DRAM 内存相比,NVM 有三个显著的特点。
首先,NVM 内存最大的优势是可以直接持久化保存数据。也就是说,数据保存在 NVM 内存上后,即使发生了宕机或是掉电,数据仍然存在 NVM 内存上。但如果数据是保存在 DRAM 上,那么,掉电后数据就会丢失。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Redis 核心技术与实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(27)

  • 最新
  • 精选
  • Mr.Brooks
    使用NVM,没有了RDB,主从复制对于新添加的机器,是怎么实现的呢

    作者回复: 这是个好问题。 增加从节点时,需要把全库数据拷贝到从节点上。我自己现在考虑的有两种方法:一种还是用写前日志,日志拷贝到从节点进行回放,但是这会带来双写的问题。另一种是,主节点在NVM上做快照,但是不写文件,从节点上直接从主节点的NVM上通过远程内存拷贝来实现复制,这个需要基于RDMA来做。

    3
    27
  • u
    老师,比较好奇应用程序是如何基于持久化内存来恢复自身的状态的,还是说应用程序本身也作为持久化的一部分,在重启后就存在于内存中?

    作者回复: 这个问题很好。目前,应用程序是把本来要保存到磁盘上的数据保存到持久化内存上了,但是应用程序运行时的堆和栈还是在DRAM上,进程重启这些运行时信息就丢了。 所以,如果想把应用程序本身的运行时状态,例如堆栈等,也保存到持久化内存上,这个需要对操作系统的内核做修改。目前还没有成熟的方案。

    19
  • Lemon
    肯定还是需要的,两者是互补的。 NVM 给了数据存储方面的新方案,但目前用作 PM 的读写速度比 DRAM 慢,不使用主从集群仍会有明显的访问瓶颈。【过大的实例在主从同步时会有影响(缓存、带宽)】 而集群是为了高可用,分散了数据的访问和存储,便于拓展与维护。对于单实例而言,即便单实例恢复的再快,挂了对业务仍会有影响。 感觉 NVM 内存用作 PM 有点像第 28 将的 Pika,如果把 SSD 换为 NVM ,岂不是都再内存中操作?是否可以解决 Pika 操作慢的缺点?

    作者回复: 回答的很好。 而且对NVM使用的思考非常赞。NVM的读写延迟(几百ns级别)还是要低于SSD的(几十到几百us级别),所以使用NVM替换SSD是可以解决Pika操作慢的问题。 不过,NVM的每GB成本还是要高于SSD的,这个在实际应用中要考虑。

    2
    8
  • 宙斯
    需要。主从集群 1读写分离,降低实例压力 2数据冗余,防止介质损坏数据丢失

    作者回复: 对主从集群的作用理解到位。

    7
  • 李梦嘉
    老师,请问有AEP方案redis的最佳实践么,最近在调研这方面

    作者回复: Intel有在推基于AEP的Redis,可以看下 https://www.intel.com/content/dam/www/public/us/en/documents/solution-briefs/redis-enterprise-brief.pdf 另外,github上有基于PMem的Redis实现,是基于Redis 4.0实现,有些旧了,不过可以作为一个参考。 https://github.com/pmem/pmem-redis 另外,阿里云上的Tair有基于AEP做扩展,参考 https://developer.aliyun.com/article/776609

    2
    7
  • yyl
    问题:有了持久化内存,是否还需要 Redis 主从集群? 解答:需要,主从集群解决的单点故障问题,而且还能起到一定的负载分担。而NVM解决的是数据丢失

    作者回复: 对主从集群作用的理解很到位 :)

    4
  • Mr.蜜
    由于PM的读写速度存在差异,使用读写分离的主从集群,还是有必要,这样可以分担单实例的处理压力,提升redis整体的性能,所以使用主从集群还是非常有必要的。

    作者回复: 大流量情况下,单个实例的压力太大,从节点是可以用来分担读压力的。

    2
    1
  • Kaito
    有了持久化内存,是否还需要 Redis 主从集群? 肯定还是需要主从集群的。持久化内存只能解决存储容量和数据恢复问题,关注点在于单个实例。 而 Redis 主从集群,既可以提升集群的访问性能,还能提高集群的可靠性。 例如部署多个从节点,采用读写分离的方式,可以分担单个实例的请求压力,提升集群的访问性能。而且当主节点故障时,可以提升从节点为新的主节点,降低故障对应用的影响。 两者属于不同维度的东西,互不影响。
    5
    111
  • 好好学习
    终于学完了。 我真棒!
    1
    17
  • 写点啥呢
    请问蒋老师,Redis将PM用作内存模式的话,是否需要修改Redis代码。我理解内存模式是对程序透明的,虽然PM可以把数据持久化保存,但是如果Redis进程把它看做内存,如果希望进程启动能够自动回复,就会涉及到进程内存空间的恢复,OS里是没有这个功能的,是不是应该需要Redis来做个事情,才可以直接从PM保存的上一次数据中作为新进程的内存空间,而不再需要通过RDB或者AOF来做数据持久化?
    4
收起评论
显示
设置
留言
27
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部