2026-10-23 10:45:48
Tair持久存储系列包含容量存储型和持久内存型两种产品,分别通过磁盘和傲腾持久内存实现大容量存储与高数据可靠性,解决了Redis在内存成本、海量数据存储及数据持久化方面的痛点。 以下是对Tair持久存储系列的技术解读:
容量存储型技术背景:
Redis作为主流内存数据库,数据全部存储在内存中,成本较高,且在海量数据存储方面存在痛点,如AOFREWRITE和生成RDB快照时会有较高的latency spike,大数据量下全量同步耗时较长、失败率较高,数据可靠性稍弱。
为解决这些问题,Tair推出了容量存储型产品,使用磁盘作为存储介质,降低成本并提供海量存储能力。
技术挑战与解决方案:
数据结构适配:Redis的数据结构基于内存实现,而磁盘是块设备。Tair基于RocksDB改造出高性能存储引擎TairDB,实现Redis数据结构向简单KV的编码映射,使Redis数据能够存储在磁盘上。
性能提升:原生Redis单线程架构无法满足磁盘访问的吞吐需求。Tair采用多线程架构,通过key级别的锁降低锁冲突,提高并发度。命令执行过程中,多个线程首先获取key锁,然后按命令逻辑执行,通过预先设计好的编码规则存取数据,最后以事务方式提交给底层存储引擎,确保每条命令持久化,提升数据可靠性。
数据编码与索引:Redis的五种基本数据类型中,string可直接映射到RocksDB的KV,其他复杂数据结构(hash、list、set、zset)需通过一定格式编码映射到RocksDB的KV。Tair将Redis数据结构拆分为meta和data两类,进行不同编码,通过meta找到对应的data,实现二级索引。例如,执行hset myhash myfield myvalue后,myhash在meta中生成一份KV,myfield和myvalue记录在data中,通过key+类型+field索引到hash表的所有内容。
主备复制:
全量复制:使用云盘快照提高效率。
增量复制:采用类似MySQL binlog的方式,事务提交后同时写入binlog,sender将binlog传输给备库,备库先保存为relaylog作为中继,再通过relaylog回放应用。这种方式支持semisync,只要relaylog落盘即可认为事务在备库提交完成,提升增量同步效率并提供更强的主备一致性保证;同时支持并发回放,在relaylog中记录并发度元信息,不同key可并发回放提高效率,相同key按序回放保证主备一致性。
性能表现:
测试命令为时间复杂度O(1)的GET/SET,综合性能中位数在开源版70%。
数据小于内存时,大部分数据缓存在操作系统的page cache中,整体性能优于数据大于内存的情况。
规格越高的实例线程越多,并发度越高,性能越好。
磁盘写入数据需read modify write过程,GET/SET写性能弱于读性能。
技术背景:
傲腾持久内存是Intel推出的非易失性内存产品,提供接近内存的延时能力并保持持久化特性,成本比内存更低,是Redis场景的理想选择。
Redis基于傲腾持久内存可实现高性能和高持久化能力,但工程实现面临挑战。
技术挑战与解决方案:
内存分配器:需使用持久化内存分配器代替原有内存分配器,分配器的元数据信息需持久化,否则恢复时会造成内存泄露或不一致。
数据结构与索引持久化:原本String、Set、Hash等数据结构和索引在异常时全部失效,恢复时需重建。持久化场景下,需设计持久化数据结构,这是工业界和理论界的主要研究方向之一。
数据一致性与完整性:确保索引和数据的一致性,以及数据的完整性。
冷热分离:持久内存延时仍高于内存,需做好冷热分离,提高系统性能。
持久化与性能平衡:在拥有高性能的同时兼备强大的持久化能力。
持久内存使用模式:持久内存分为Memory Mode和App Direct Mode。Memory Mode无需用户改造,但没有持久化能力;App Direct Mode对比传统SSD从block寻址转为字节寻址,接口从文件write/read转为内存的load和store。数据写入内存过程可能停留在CPU L1、L2 cache,需调用CLWB和CLFLUSHOPT等指令刷到内存系统。由于CPU只能保证8个字节的原子写入,16字节写可能出现partial writes问题,上层应用需额外实现保障数据持久。例如双向链表,传统内存crash后数据丢失,持久内存保留crash状态,可能出现B的next指针指向C而C的prev指针未指向B的异常情况,内存分配器管理结构也可能出现内存泄露等问题。
阿里云解决方案:阿里云Tair持久内存版基于傲腾持久内存的自研引擎,解决持久化编程挑战,搭配Aliyun Linux操作系统镜像和神龙裸金属服务器深度优化,为客户提供安全、稳定、高性能的体验。每条记录确保写入AEP并持久化才返回,极大提升数据可靠性;读取路径使用Dram缓存索引等热点数据结构和元数据信息,加速数据访问。
性能表现:
在神龙裸金属机器上,相同配置下Tair持久内存版整体吞吐为社区内存版本的90%。
延时上,由于没有AofRewrite的干扰,P95的延时更加稳定。