简介: 阿里云数据库重磅发布自研Tair持久存储系列的产品打破了传统Redis中的数据只能在易失性存储上进行读写的刻板印象,针对客户不同业务阶段的数据存储要求与服务成本考量,全新实现了持久性更强、成本更低的KV数据库。

Redis做为当今主流的内存数据库支持许多丰富的数据结构,比如哈希表、集合,还有lua脚本、事务、消息订阅等等高级特性,同时使用内存做为主要的存储介质,支持高速访问。

但是由于其数据全部存储在内存,成本较高,而且对于海量数据存储的支持也存在一些痛点,比如在AOFREWRITE和生成RDB快照时会有较高的latency spike,大数据量下全量同步耗时较长、失败率较高。并且数据可靠性稍弱,RDB和AOF不能保证数据不丢失。

为了解决上述问题,拓宽Redis的应用场景,我们结合新技术新硬件推出了Tair持久存储系列产品:容量存储型和持久内存型,支持大容量存储和更高的数据可靠性。

>>发布会传送门

点击了解产品详情

容量存储型

使用磁盘存储就是其中的解决方案之一,利用磁盘可以降低成本并且提供海量存储。但是在磁盘上实现redis也会有一些挑战:

1.首先redis的数据结构都是基于内存实现,内存可以直接寻址,而磁盘是个块设备,需要在磁盘上构建存储引擎来支持redis数据结构访问。

2.另外磁盘和内存有较大的性能差距,原生redis单线程的架构无法满足吞吐需求,需要从架构设计上提升访问性能。

应对这些挑战,我们基于rocksdb进行了改造,提供了高性能的存储引擎TairDB,并实现了redis数据结构向简单kv的编码映射,使redis数据能够存储在磁盘上;采用多线程的架构来提升访问磁盘的性能;同时使用阿里云ESSD高效云盘为存储底座,利用云盘快照进行备份和全量同步,避免fork带来的问题并提高全量同步效率。

redis有五种基本数据类型,其中string可以直接映射到rocksdb的kv,但是其他一些复杂的数据结构hash、list、set、zset需要通过一定格式的编码把redis的数据结构映射到rocksd的kv上。

我们把redis数据结构拆分为meta和data两类,进行不同的编码,通过meta可以去找到其对应的data,也即二级索引。

以hash为例,执行hset myhash myfield myvalue之后,hash表的名字myhash就会在meta中生成一份kv,其中key就是myhash,value会标志它的属性为hash表;myfield和myvalue会记录在data中,再以key+类型+filed就可以索引到hash表的所有内容。

为了实现多线程架构,首先需要解决key冲突的问题,这里我们实现了key级别的锁,这样可以大大降低锁冲突,提高并发度。命令执行过程中多个线程首先获取key锁,然后按命令的逻辑执行,通过预先设计好的编码规则存取数据。最后再把结果以事务的方式提交给底层存储引擎。每个命令的执行都是要在事务提交之后才会返回结果,这样每一条命令都是持久化的,大大提升了数据可靠性。

关于主备复制,全量复制使用云盘快照提高效率。增量复制采用类似MySQL binlog的方式,事务提交之后同时也会写入binlog,然后会有sender把binlog传输给备库,binlog传输到备库上时会首先保存为relaylog作为中继,然后通过relaylog再回放应用,这样有两点好处:

1.支持semisync,只要relaylog落盘就可以认为事务在备库也提交完成,不用等待relaylog应用,这样既可以提升增量同步的效率,同时提供了更强的主备一致性保证。

2.支持并发回放,在relaylog中记录并发度的元信息,不同的key就可以进行并发回放提高效率,同时相同的key仍然按序回放,保证主备一致性,不会造成数据错乱。

上图为不同类型场景和实例规格下的性能测试结果,测试命令为时间复杂度O(1)的GET/SET,综合性能中位数在开源版70%。

在数据小于内存的情况下大部分数据都会缓存在操作系统的page cache中,整体性能会优于数据大于内存的情况。规格越高的实例线程越多并发度也就越高,性能也相对越好。另外不同于内存中的GET/SET,磁盘上写入数据需要有read modify write的过程,也即需要先读取元数据才能进行修改,所以对于GET/SET写性能要弱于读性能。

持久内存型

傲腾持久内存是Intel推出的一款非易失性内存产品,在提供接近内存延时能力的同时保持持久化的能力, 理想情况下对于Redis场景来说是非常好的,因为数据写入到持久内存中已经持久化,那么就不需要额外的日志和Checkpoint用来保证持久化的特性,同时傲腾持久内存在延迟上也比较接近内存优于传统SSD,成本上对比内存也更加的便宜。

Redis基于傲腾持久内存能达到高性能的同时拥有较高的持久化能力,但是实际在工程实现会碰到非常大的挑战,包括:

1.需要使用持久化内存的分配器来代替原有的内存分配器,分配器的元数据信息需要持久化,否则在恢复的时候会造成内存的泄露或者不一致。
2.原本String,Set,Hash这些数据结构和索引在异常的时候全部失效在恢复的时候重建,而现在这些数据都是持久化的,如何支持设计持久化的数据结构是目前工业界和理论界主要的研究方向之一
3.索引和数据的一致性,数据的完整性,这些都会在下一张NVM的挑战中做更详细的阐释
4.持久内存在延时还是比内存更高,如何做好冷热分离,让系统拥有更高的性能。
5.如何拥有高性能的同时兼备强大的持久化能力。

持久内存的使用分为两大类Memory Mode和 AppDirecrt Mode, memory mode无需用户改造但是没有持久化内里, 使用App Direct mode之后对比传统SSD从block寻址转为字节寻址,同时接口也从文件write/read转为内存的load和store。

数据写入内存的过程可能会停留在CPU L1,L2cache,需要调用类似CLWB和CLFLUSHOPT这样的指令来刷到内存系统中,由于CPU只能保证8个字节的原子写入,那么对于一个16字节的写很有可能在写完第一个8字节的时候crash,后半部分没有写入成功这个就是所谓的partial writes, 上层应用在使用持久内存的时候需要额外的实现来保障数据持久问题。

下面的例子是一个双向链表,传统内存crash之后所有的数据丢失,而持久内存则保留了crash的状态,因此会出现B的Next指针指向了C而C的Prev指针缺没有指向B,这个时候的双向链表是出于异常的状态。 从链表衍生开来内存分配器中的管理结构也存在这个问题,会出现内存泄露等情况。

由于持久化的挑战,目前主流使用持久内存的方式都是当做Memory或者使用AppDirect但是不支持持久化,阿里云Tair持久内存版的是基于傲腾持久内存的自研引擎,解决了持久化编程中遇到的各种挑战,撘配阿里云官方提供的Linux操作系统镜像Aliyun Linux,Aliyun弹性计算服务首次(全球首家)在神龙裸金属服务器上引入傲腾持久内存,深度优化完善支持,为客户提供安全、稳定、高性能的体验。

阿里云持久内存版Tair的每一条记录都确保写入AEP并且持久化才返回,极大的提升数据的可靠性, 同时在读取路径上使用Dram缓存如索引等热点数据结构和元数信息,来加速数据访问的存取。

在神龙裸金属机器上,我们使用相同配置进行了Tair持久内存版和Redis6.0的性能对比, 整体上吞吐为社区内存版本的90%, 延时上由于没有AofRewrite的干扰,P95的延时更加的稳定。

原文链接
本文为阿里云原创内容,未经允许不得转载。

Tair持久存储系列技术解读相关推荐

  1. 【ESSD技术解读】 云原生时代,阿里云块存储 ESSD 快照服务如何被企业级数据保护所集成?

    简介:本文描述了阿里云块存储快照服务基于高性能 ESSD 云盘提升快照服务性能,提供轻量.实时的用户体验及揭秘背后的技术原理.依据行业发展及云上数据保护场景,为企业用户及备份厂商提供基于快照高级特性的 ...

  2. 华为云大数据存储的冗余方式是三副本_华为TaurusDB技术解读(转载)

    近日,华为云自研关系型数据库 Taurus 公开亮相.作为华为云自研的最新一代云原生分布式数据库,Taurus 完全兼容 MySQL 8.0,采用计算与存储分离.日志即数据的架构设计,支持 1 写 1 ...

  3. mysql引擎层存储层_MySQL存储底层技术:InnoDB底层原理解读

    原标题:MySQL存储底层技术:InnoDB底层原理解读 存储引擎 很多文章都是直接开始介绍有哪些存储引擎,并没有去介绍存储引擎本身.那么究竟什么是存储引擎?不知道大家有没有想过,MySQL是如何存储 ...

  4. 技术解读|云上企业级存储——打开存储新维度,促进用户核心业务创新

    简介:将企业级存储和云的特点进行完美的融合是云上企业级存储的目标,它打开存储更多新的维度,在保障用户业务永续的同时,帮助用户更好的进行业务创新.本文属ESSD技术解读的总篇,总体介绍ESSD 云盘创新 ...

  5. 阿里云全球首次互联网8K直播背后的技术解读

    摘要: 3月28日,云栖大会·深圳峰会现场,阿里云发布并现场演示了阿里视频云最新8K互联网直播解决方案.这是全球发布的首个8K视频云解决方案,也是全球首次8K互联网视频直播. 视频地址:https:/ ...

  6. Gartner ABI报告技术解读:2021 BI 与数据分析魔力象限

    Gartner ABI报告技术解读:2021 BI 与数据分析魔力象限 导读 Gartner 是全球权威的 IT 研究与顾问咨询公司,20 年以来,Gartner 的研究与咨询服务一直被认为是客观技术 ...

  7. MIT Technology Review 2020年“十大突破性技术”解读 【中国科学基金】2020年第3期发布...

    来源:国家自然科学基金委员会 MIT Technology Review  2020年"十大突破性技术"解读 [编者按]  2020年2月26日,MIT Technology Re ...

  8. 红帽扩展存储系列产品市场分销路线

    世界领先的开源解决方案供应商红帽公司日前宣布,旗下开放的软件定义型红帽存储解决方案组合已通过多渠道推出.作为红帽连接业务合作伙伴.嵌入软件方案.以及认证云服务提供商等三个项目计划的一部分,红帽Ceph ...

  9. 海量存储系列下--转载,值得一读

    海量存储系列之八 http://qing.blog.sina.com.cn/1765738567/693f0847330008ii.html 首先来回答一个问题:为什么在磁盘中要使用b+树来进行文件存 ...

最新文章

  1. 2021年春季学期-信号与系统-第二次作业参考答案-第二小题
  2. Tensorflow加载预训练模型和保存模型(ckpt文件)以及迁移学习finetuning
  3. python 发送邮件正文字体设置_python 文字 坐标python smtplib模块发送SSL/TLS安全邮件实例...
  4. [洛谷P2124] 奶牛美容
  5. Delphi开发的服务在Windows2003 64位注册方式。
  6. Codeforces Round #277 (Div. 2) A. Calculating Function 水题
  7. luogu2577/bzoj1899 午餐 (贪心+dp)
  8. Spring Boot 返回XML
  9. 网络地址转换协议NAT详解
  10. Bzoj2535 [Noi2010]Plane 航空管制2
  11. java读取手机崩溃日志_Android抓取崩溃日志
  12. jdbc获取数据库连接的四种方式
  13. 利用Python在统计局网站爬取统计年鉴
  14. 关于软考,人事考试照片格式要求如何修改,且通过照片审核处理系统。要求295px*413px像素
  15. cast 和convert和concat详解以及mysql和sqlserver兼容问题
  16. 罗技M590优联无法使用的问题解决
  17. Mac笔记本常用软件
  18. DFPlayer Mini资料 随手记
  19. matlab汽车驱动力与行驶阻力,用matlab绘制汽车驱动力-行驶阻力平衡图
  20. Admiral UVA - 1658

热门文章

  1. 单调有界定理适用于函数吗_《实变函数》——论有界变差函数
  2. 偷用计算机作文,偷玩电脑作文5篇
  3. 实用必备xp框架模块_Xposed框架安装、使用以及插件开发
  4. python云计算服务_python 云计算平台
  5. 【学习笔记】第三章——内存 IV(虚拟内存、请求分页、页面置换、缺页中断、抖动现象)
  6. 【LeetCode笔记】263. 丑数(Java、迭代)
  7. java velocity是什么意思_基于 Java 的模板引擎Velocity快速入门
  8. mysql scws_apache+mysql+php+scws+myft_scws编译安装全程记录
  9. python现在时间减去过去时间等于20分钟怎么写_获取当前时间减去10分钟的话SQL语句怎么写...
  10. 为啥我的页面模板的from提交不了数据_4-9【微信小程序全栈开发课程】意见反馈(四)--提交反馈信息