Tair持久存储系列技术解读

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

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

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

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

>>发布会传送门

点击了解产品详情

容量存储型
9989c5b90f96dedb20d3e717592eeed2c54bdb86.jpeg

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

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

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

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

9989c5b90f96dedb20d3e717592eeed2c54bdb86.jpeg

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表的所有内容。

9989c5b90f96dedb20d3e717592eeed2c54bdb86.jpeg

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

9989c5b90f96dedb20d3e717592eeed2c54bdb86.jpeg

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

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

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

9989c5b90f96dedb20d3e717592eeed2c54bdb86.jpeg

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

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

持久内存型

9989c5b90f96dedb20d3e717592eeed2c54bdb86.jpeg

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

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

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

9989c5b90f96dedb20d3e717592eeed2c54bdb86.jpeg

持久内存的使用分为两大类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,这个时候的双向链表是出于异常的状态。 从链表衍生开来内存分配器中的管理结构也存在这个问题,会出现内存泄露等情况。

9989c5b90f96dedb20d3e717592eeed2c54bdb86.jpeg

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

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

9989c5b90f96dedb20d3e717592eeed2c54bdb86.jpeg

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

 

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Serverless X OpenKruise 部署效率优化之道

简介: 相信在不久的将来,SAE 的极致弹性,无论在弹性效率,弹性规模,还是智能精准等方面都会大放异彩。 作者 | 许成铭(竞霄) Serverless 作为云计算的最佳实践、云原生发展的方向和未来演进趋势…

重磅来袭 | 移动云城市峰会分论坛暨移动云TeaTalk青岛站 即将开启

随着大数据技术不断演进和应用持续深化,以数据为核心的大数据产业生态正在加速构建。6月10日,移动云城市峰会将在青岛举办。届时,“云数融通,驱动未来”分论坛暨移动云TeaTalk青岛站 也将同步重磅开启。分论坛将围绕移动云核心数据…

2020阿里云双11--0.73折起,爆款提前抢大促全攻略

2020阿里云双11大促活动于10月24日正式开启,此次双11阿里云将有哪些亮点活动,此篇文章将一网打尽。大家一定要关注,此文会一直更新到活动结束。 从活动页面来看,阿里云双11上云狂欢节活动分为三个阶段: 10月24日-10月…

linux共享软件_为什么 linux 要用 tar.gz,很少用 7z 或 zip?

因为 7z 和 zip 压缩格式都不能保留 unix 风格的文件权限,比如解压出个可执行文件要重新 chmod chown 才能恢复正常。而 tar 格式可以。而 tar 本身不提供压缩,无非就是把包括所有文件的內容和权限拼成一个文件而己,所以用另外如 gzip 格式压…

端应用研发进入云原生时代

简介: 随着技术的发展和各种用户端场景的涌现,业务前台形式变得更加多样,“面向多样化的端场景提供无缝的、一致的数字用户旅程”已经成为了新时代企业应用架构的关键目标,同时它也是当下大前端技术发展背后的核心业务牵引。基于阿…

关于卫星定位,你想知道的一切

简介: 本文将简要介绍卫星定位的原理和应用情况,方便大家对北斗、卫星定位有更多的了解。 5G和北斗,是国之重器。北斗作为卫星定位系统,目前在国际上已处于领先地位,而且已经渗透到我们工作和生活的方方面面。本文将简…

拯救运维工程师,数据链 DNA 来袭!

在《凤凰项目——一个IT运维的传奇故事》一书中讲述运维工程师的常态: A工程师:“是的,我们复制了你给的那个文件……是的,就是1.0.13版……你说那个版本是错的,这话是什么意思……什么?你什么时候把它改了…

jre for mac 删除_在 Mac 的 Docker Desktop 中运行 K8s

Docker Desktop for Mac 从 Docker Community Edition 18.06.0-ce-mac70 2018-07-25 版本起,添加了对 Kubernetes 的支持,可以方便的在 Mac 上运行一个单节点的 K8s 集群。在 Docker Desktop 的 Preferences 中的 Kubernetes 页面里,提供了一…

阳振坤:OceanBase 数据库七亿 tpmC 的关键技术

OB君:2020年9月25日,OceanBase在外滩大会举办的“数据库,新标杆,新征途”分论坛正式落幕,内容涵盖数据库的趋势探讨、分布式数据库的技术创新与行业应用,及国内数据库的发展与生态。欢迎持续关注本系列内容…

数百万台车联网设备同时在线0故障,中瑞集团的云原生探索之路 | 云原生Talk

简介: 在保持对业界趋势调度关注的同时,始终选用最适合自身的技术,这可能是中瑞能在车联网领域引领行业的重要原因之一,正如中瑞CTO所说“阿里云云原生产品体系带给我们的,不是单纯的IT工具,而是整个团队战…

终止中台乱象 《2021年中国中台市场研究报告》隆重发布

2015年,阿里提出“大中台,小前台”的战略,帮助一线业务更敏捷地适应市场变化。随后,多家互联网巨头纷纷布局中台战略,中台概念由此全面打响。 通过中台,可以打通数据孤岛,实现快速响应、智能预…

Dubbo-go 源码笔记(一)Server 端开启服务过程

简介: 随着微服务架构的流行,许多高性能 rpc 框架应运而生,由阿里开源的 dubbo 框架 go 语言版本的 dubbo-go 也成为了众多开发者不错的选择。本文将介绍 dubbo-go 框架的基本使用方法,以及从 export 调用链的角度进行 server 端源…

华为在中国建立其全球最大的网络安全透明中心

2021年6月9日,华为最大的网络安全透明中心今天在中国东莞正式启用,来自GSMA、阿联酋、印尼的监管机构及英国标准协会、SUSE等机构代表出席并在活动上发言。借此机会,华为发布了《华为产品安全基线》白皮书,首次将产品安全需求基线…

浅析云控平台画面传输的视频流方案

简介: 本文将小结本次云控平台画面传输的视频流方案。 背景 ARC(高德车机云控平台)是一个基于车载设备业务深度定制的云控平台,通过该平台我们能够实现远程使用不同类型的车载设备。为了让远程使用者像在本地一样使用车载设备&am…

解读云原生基础设施

简介: 云原生是云计算领域的热点之一。就像 “一千个人眼里有一千个哈姆雷特”,大家对"云原生"的定义也见仁见智。本文将介绍云原生应用架构和生命周期管理的进化方向。 作者 | 易立 阿里云资深技术专家 导读:云原生是云计算领域的…

mysql al32utf8_Oracle 11g更改字符集AL32UTF8为ZHS16GBK

Oracle 9i更改字符集AL32UTF8为ZHS16GBKSQLgt; conn /as sysdba SQLgt; shutdown immediate; SQLgt; startup mount SQLgt; A首页 → 数据库技术背景:阅读新闻Oracle 11g更改字符集AL32UTF8为ZHS16GBK[日期:2011-04-26]来源:Linux社区作者&am…

共筑全场景智慧生态,华为HMS全球应用创新大赛火热开启

6月10日,2021华为HMS全球应用创新大赛(Apps UP)正式启动。此次大赛以“HMS Innovate For All”为主题,激励全球开发者集成华为HMS Core开放能力开发创新应用,打造全场景数字创新体验,为全球消费者带来全场景…

2020-11-06

一、背景介绍 (一)流平台通用框架 目前流平台通用的架构一般来说包括消息队列、计算引擎和存储三部分,通用架构如下图所示。客户端或者 web 的 log 日志会被采集到消息队列;计算引擎实时计算消息队列的数据;实时计算…

移动端堆栈关键行定位的新思路

简介: 崩溃堆栈是我们日常应用问题排查中的重要辅助手段,在移动开发上也不例外,为了支持用户在堆栈上的快速定位,我们面临一个看似比较简单问题:高亮崩溃中的关键行, 辅助用户快速定位问题。 阿里云 云原生应用研发平台…

华云数据升级发布“信创云基座“ 用“全芯全栈”支持“信创强国”

2021年6月10日,北京——2021年是我国“十四五”规划的开局之年,也是我国“加快数字发展 建设数字中国”的关键之年。值此历史交汇的关键点,云计算、大数据、人工智能、物联网、工业互联网、区块链等重点产业将对国家数字经济发展起到巨大推动…