我们这次说一下,这几年新型非易失存储器件发展的非常快,NVM器件具有容量大,性能快,持久化保存数据的特性,这些也是Redis追求的目标,那么Redis的接下来发展也是考虑和NVM内存结合起来使用,实现大容量实例或者持久化数据,我们本章也是围绕NVM如何实现 大容量实例 / 持久化数据进行的了解

再说具体的实现之前,我们了解一下NVM的特点

(1).NVM内存的最大优势是可以持久化保存数据,无论是宕机还是掉电,数据都还在NVM内存上

(2)访问速度稍逊DRAM,NVM读写速度比起常见的内存DRAM内存略低,读延迟在200-300ns,写延迟在100ns,写带宽为1-2GB/S,读带宽为5-6GB/S

(3)容量大,NVM器件的密度大,单个存储条能达到128GB的容量,最大可以达到512GB,这样我们可以利用NVM构建TB级别的内存

说完了NVM的特点之后,我们看下业界中Intel在2019年4月推出的AEP内存存储,并且提供了容量大和持久化保存两种特性

并且提供了两种不同的使用模式

第一种是Memory模式

将NVM内存作为大容量内存来使用的,只使用容量大和性能高的特性,没有启用数据持久化的功能

这个可以 大容量的Redis的使用,其使用过程中也需要配合DRAM使用,不过DRAM只是作为CPU的缓存,并不作用于应用软件

第二种是App Direct模式

启用了NVM持久化数据的功能,应用软件吧数据写到了AEP上,也就直接持久化保存下来了,也被称为持久化内存 Persistent Memory PM

那么我们回到一开始的方向,说一下如何在Redis中结合使用NVM

首先是大容量,那么直接使用Memory模式,就可以使用其解决到大容量的问题,Redis也就可以直接给上层应用提供大容量的实例了,在Memory模式下,Redis可以像在DRAM内存上运行,在AEP内存上运行,不用修改代码

然后是关于持久化需求的解决,在AEP内存用作PM的时候,Redis如何利用PM快速持久化数据呢?原本的Redis在持久化方面,提供了RDB和AOF两种机制,将数据持久化保存在硬盘上

无论是RDB还是AOF,都需要写入磁盘,而且无论哪种持久化,都有着一定的缺陷

如果使用PM快速持久化的特性,可以避免使用RDB或者AOF,PM本身就支持内存访问,Redis直接运行在PM上,数据就可以在PM上持久化保存了,就不需要额外的RDB或者AOF日志机制了

最后我们说一下,PM的使用方式

服务器部署了PM之后,可以在操作系统的/dev目录下看到一个PM设备

/dev/pmem0

然后使用ext4-dax文件系统来格式化这个设备

mkfs. ext4 /dev/pmem0

然后直接挂在到一个服务器目录下

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

这样就在这个目录下创建文件就行了,创建好了之后,再将这些文件通过内存映射mmap方式映射到Redis的进程空间,这样就把Redis接收到的数据直接保存到映射的内存空间上了,这块内存空间是PM直接提供的,方便持久化

如果要修改和删除数据,PM本身就支持字节粒度进行数据访问,所以Redis可以在PM上修改或者删除数据

并且支持重启后,直接读取PM本地数据,方便快速的故障恢复

这样总结一下,我们说了NVM的极大特性,包含性能高,容量大,数据可以持久化

并且说了Intel推出的AEP的两种使用模式,分别是Memory模式和APP Direct模式

并且根据不同的模式,给出了Redis大容量和持久化的解决方案

那么还有一个问题,有了持久化内存后,还需要Redis主从集群吗?

单机版的Redis必然存在着实例服务器宕机的问题,那么Redis主从集群必然有存在的需求

不过有了NVM,使用K8S直接管理也是可以的,毕竟绑定了固定的volume,也可以保证持久化和自动重启

发表评论

邮箱地址不会被公开。 必填项已用*标注