40 | Redis的下一步:基于NVM内存的实践
40 | Redis的下一步:基于NVM内存的实践
讲述:蒋德钧
时长12:00大小10.96M
NVM 内存的特性与使用模式
基于 NVM 内存的 Redis 实践
小结
每课一问
赞 36
提建议
精选留言(25)
- Kaito2020-11-25有了持久化内存,是否还需要 Redis 主从集群? 肯定还是需要主从集群的。持久化内存只能解决存储容量和数据恢复问题,关注点在于单个实例。 而 Redis 主从集群,既可以提升集群的访问性能,还能提高集群的可靠性。 例如部署多个从节点,采用读写分离的方式,可以分担单个实例的请求压力,提升集群的访问性能。而且当主节点故障时,可以提升从节点为新的主节点,降低故障对应用的影响。 两者属于不同维度的东西,互不影响。展开共 5 条评论106
- Mr.Brooks2020-12-04使用NVM,没有了RDB,主从复制对于新添加的机器,是怎么实现的呢
作者回复: 这是个好问题。 增加从节点时,需要把全库数据拷贝到从节点上。我自己现在考虑的有两种方法:一种还是用写前日志,日志拷贝到从节点进行回放,但是这会带来双写的问题。另一种是,主节点在NVM上做快照,但是不写文件,从节点上直接从主节点的NVM上通过远程内存拷贝来实现复制,这个需要基于RDMA来做。
共 2 条评论26 - u2020-11-27老师,比较好奇应用程序是如何基于持久化内存来恢复自身的状态的,还是说应用程序本身也作为持久化的一部分,在重启后就存在于内存中?
作者回复: 这个问题很好。目前,应用程序是把本来要保存到磁盘上的数据保存到持久化内存上了,但是应用程序运行时的堆和栈还是在DRAM上,进程重启这些运行时信息就丢了。 所以,如果想把应用程序本身的运行时状态,例如堆栈等,也保存到持久化内存上,这个需要对操作系统的内核做修改。目前还没有成熟的方案。
17 - 好好学习2021-01-15终于学完了。 我真棒!共 1 条评论15
- Lemon2020-11-25肯定还是需要的,两者是互补的。 NVM 给了数据存储方面的新方案,但目前用作 PM 的读写速度比 DRAM 慢,不使用主从集群仍会有明显的访问瓶颈。【过大的实例在主从同步时会有影响(缓存、带宽)】 而集群是为了高可用,分散了数据的访问和存储,便于拓展与维护。对于单实例而言,即便单实例恢复的再快,挂了对业务仍会有影响。 感觉 NVM 内存用作 PM 有点像第 28 将的 Pika,如果把 SSD 换为 NVM ,岂不是都再内存中操作?是否可以解决 Pika 操作慢的缺点?展开
作者回复: 回答的很好。 而且对NVM使用的思考非常赞。NVM的读写延迟(几百ns级别)还是要低于SSD的(几十到几百us级别),所以使用NVM替换SSD是可以解决Pika操作慢的问题。 不过,NVM的每GB成本还是要高于SSD的,这个在实际应用中要考虑。
共 2 条评论8 - 宙斯2021-01-30需要。主从集群 1读写分离,降低实例压力 2数据冗余,防止介质损坏数据丢失
作者回复: 对主从集群的作用理解到位。
7 - 李梦嘉2020-12-04老师,请问有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 - yyl2020-11-25问题:有了持久化内存,是否还需要 Redis 主从集群? 解答:需要,主从集群解决的单点故障问题,而且还能起到一定的负载分担。而NVM解决的是数据丢失
作者回复: 对主从集群作用的理解很到位 :)
4 - 写点啥呢2020-11-25请问蒋老师,Redis将PM用作内存模式的话,是否需要修改Redis代码。我理解内存模式是对程序透明的,虽然PM可以把数据持久化保存,但是如果Redis进程把它看做内存,如果希望进程启动能够自动回复,就会涉及到进程内存空间的恢复,OS里是没有这个功能的,是不是应该需要Redis来做个事情,才可以直接从PM保存的上一次数据中作为新进程的内存空间,而不再需要通过RDB或者AOF来做数据持久化?4
- neohope2021-02-25老师好,关于mmap映射的问题,没看明白,有几点不清楚,还望帮忙解答: 1、将redis内存空间,用mmap映射到PM的ext系统文件后,保持的就是内存信息吧?那进程信息、线程信息、寄存器状态什么的,需要额外保持吗? 2、redis挂掉后,重新启动要如何做呢? 3、操作系统重启动后,再启动redis时,还能用这个持久化后的文件吗?要如何做呢? 4、用集群的时候,节点间复制要如何做呢? 感谢!展开2
- Mr.蜜2020-12-21由于PM的读写速度存在差异,使用读写分离的主从集群,还是有必要,这样可以分担单实例的处理压力,提升redis整体的性能,所以使用主从集群还是非常有必要的。
作者回复: 大流量情况下,单个实例的压力太大,从节点是可以用来分担读压力的。
共 2 条评论1 - 范闲2020-12-03主从集群仍旧需要。 单机失踪了持久化内存只能解决单机的存储容量和数据恢复问题。 主从集群可以提高访问速度,提高可靠性,做到HA。1
- NULL2022-09-10 来自山东关于dram, nvm, ssd的区别, 可以看下Intel Optane AEP的介绍, 在1:18秒处 https://www.intel.cn/content/www/cn/zh/architecture-and-technology/optane-dc-persistent-memory.html
- piboye2022-02-19gpu 内存可以加速redis性能吗?
- piboye2022-02-14nvm后还要记内存日志更好,一些操作执行到中间步骤的时候失败了,重启之后要有办法回滚。
- piboye2022-02-12解决主从一致性的问题,redis就可以当个分布式db了
- 彭文达2021-10-12完结撒花
- 花儿少年2021-10-09NVM 也是有些缺陷的,也可能会导致数据不一致。例如,在redis的新增一个数据节点,那么会有两步操作,1、分配内存,写入数据;2、将此内存地址的指针指向redis管理;而这两步我们知道在很多情况下都可能是乱序执行的,如果第二步先执行,此时机器crash了,redis就指向了一个无效地址。
- Heaven2021-09-08单机版的Redis必然存在着实例服务器宕机的问题,那么Redis主从集群必然有存在的需求 不过有了NVM,使用K8S直接管理也是可以的,毕竟绑定了固定的volume,也可以保证持久化和自动重启
- BertGeek2021-06-07从高可用角度考虑,主从集群还是非常必要, NVM只是解决读写性能,可持久存储,只要是硬件也需要考虑坏的可能。 Redis数据需要备份,还是要做足工作的