“百变”Redis带你见识不同场景下的产品技术架构

2018飞天技术汇24期-云数据库Redis产品发布会,由阿里云数据库技术组技术专家王欢、怀听、梁盼分别带来以“Redis全球多活产品”、“Redis混合存储产品”、“Redis多线程性能增强版”为题的演讲。本文对Redis进行了简单的介绍,进而针对不同的应用场景研制出不同的产品,并对不同产品分别进行了详细地介绍。
以下内容根据精彩视频分享整理而成。

 

Redis简介

Redis 是一个高性能的key-value数据库,Redis的优势有很多,例如,它的性能极高 ,Redis能读的速度是110000次/s,写的速度是81000次/s ;它具有丰富的数据类型,可支持二进制案例的 Strings、Lists、Hashes、Sets 及 Ordered Sets 数据类型操作;它的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行;它还具有丰富的特性, 即支持 publish/subscribe、通知、key过期等等特性。
Redis 与其他key - value 缓存产品有三个共同特点:一是Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;二是Redis不仅仅支持简单的key-value类型的数据,同时还提供list、set、zset、hash等数据结构的存储;三是Redis支持数据的备份,即master-slave模式的数据备份。
Redis与其他key-value存储的不同点在于Redis有着更为复杂的数据结构并且提供对它们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员是透明的,无需进行额外的抽象。另外的一个不同点在于Redis在内存中运行时可以持久化到磁盘中,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。因此,与磁盘上相同的复杂数据结构相比,在内存中操作起来更为简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面它们是紧凑以追加的方式产生的,因为他们并不需要进行随机访问。

 

Redis全球多活产品

Redis全球多活产品是指多个Redis实例分布在全球不同的区域,它是阿里云自研、基于云数据库Redis版(ApsaraDB for Redis)、100%兼容 Redis 协议的多活数据库系统。通过数据同步通道,把多个Redis实例组网成1个逻辑上的 Redis 多活实例,多活实例内的所有实例均可读写并保持实时数据同步。数据同步通道通过内网打通,具有高可靠、高安全、低延迟的特性。子实例间通过CRDT(Conflict-free Replicated Data Type)机制检测并解决数据冲突,保障数据最终一致性。Redis全球多活产品轻松支持异地多个站点同时对外提供服务的业务场景,助力企业快速复制阿里巴巴异地多活架构。

 

高可用架构演练之路

程序在运行过程中总会遇到各种各样的问题,例如程序bug、机器故障、机房断电起火故障等,业务上要求发生这些故障时要保证数据一致性和业务可用性,所以就有了架构演练之路,即单可用区-同城容灾-两地三中心-异地多活。
由于单可用区架构无法应对机房出现故障,就有了同城容灾的架构。同城容灾架构由于无法应对地域级别的问题,接着就有了两地三中心架构。由于许多金融业务要求数据存储在不同的地域中,同时对故障恢复时间有要求,因此两地三中心架构就在同城容灾基础上加了一个standby中心,但依旧存在几个缺陷,即冷备中心不工作,关键时刻不敢切的缺陷;冷备中心不工作,成本浪费的缺陷;本质上数据仍然单点写,数据库瓶颈无法解的缺陷;资源、容灾、扩展无法解决的缺陷。 
后来有了异地多活架构,它是指所有的中心都提供业务服务,底层的数据能够相互同步,因此存在着许多优点,例如,所有中心工作,切换有保障;所有中心工作,成本低;弹性伸缩,增加/减少中心个数;故障独立性导致中心不可用时,只影响部分用户。

 

产品架构

 

image001


异地多活产品架构图如上图所示,它是由云数据库Redis版实例、同步通道和通道管理器三部分组成。由于异地多活是由多个Redis实例组成,因此可以实现每个子实例之间实时数据同步、每个子实例数据最终一致、每个子实例均可读写等功能。
在异地多活构架中,对Redis进行了aof binlog增加oplog和CRDT策略merge key的改造,其中aof binlog增加oplog中包含gtid和逻辑时钟信息,解决了循环同步、Exactly-once Apply的问题;CRDT策略merge key中解决了一致性的问题。
异地多活产品具有高可用、高性能、数据最终一致以及功能丰富的特性,具体介绍如下:

  • 高可用
    高可用是指同步通道支持断点续传,它最高可容忍天级别的隔断,且隔断之后数据还可以在断点处继续同步;同时,同步通道还可以自适应处理子实例异常,例如主备切换、备库重搭等。
  • 高性能
    高性能是指它具有异步复制同步不影响Redis自身读写性能,因为它本身定位就具有高性能、高吞吐、低延迟的性能,高吞吐是指它具有标准版Redis使得单向同步链路高达10万TPS以及随Redis节点数线性扩展的集群版Redis。低延迟是指洲际内地域仅需百毫秒,更厉害的是跨洲际地域仅需 1秒级。
  • 最终一致性
    为了解决过去的架构由于异步同步的逻辑产生的一致性问题,最终引进了CRDT(Conflict-Free Replicated Data Types)策略,它可支持最终一致性的数据类型有 String/Counter、Hash、Set、Zset、Geo、hyperloglog等。
  • 功能丰富
    异地多活产品增加了支持 Redis 实例类型、同步中的子实例支持变配规格、新增与删除子实例等新功能,其中支持的 Redis 实例类型包括标准版、集群版以及读写分离版。

 

业务设计

 

image002


异地多活业务具有不同的业务有不同的业务设计要求,它必须允许多个地域具有同时修改同一份数据的功能,例如全局session、全局PV、用户收藏夹、购物车、地理位置信息、收藏夹、历史搜索记录、弹幕、评论等。同时,它还需要做数据切分,要求一份数据只允许有1个写入点。
多活业务设计的要点有自包含性、松耦合性和路由规则一致性,即多活业务设计的所有计算与数据必须在1个中心内完成;跨单元之间只能进行服务调用,不能直接访问数据库或其他存储;路由必须是入口路由或者微服务调用路由。

 

Redis混合存储产品

Redis混合存储实例是阿里云自主研发的完全兼容Redis协议和特性的混合存储产品。通过将部分冷数据存储到磁盘,在保证绝大部分访问性能不下降的基础上,大大降低了用户成本,并突破了内存对Redis单实例数据量的限制。

 

技术架构

 

image003


它的数据类型是将热数据存储在内存里,将冷数据存储在磁盘里面,顾名思义,热数据就是指频繁访问到的数据。因为所有的Redis都会访问到Keys,相对来说Keys的访问天生就比Values大许多,因此Redis混合存储产品是将所有的Keys、常访问的Values放到内存里存储,而不经常访问的Values放到磁盘里存储。在业务场景里面,Keys只占十几个字节,但Values却占几百甚至几千个字节,所以将所有的Keys放到内存里对整体性能能够提高很多。

 

image004


Redis混合存储架构如上图所示,从业务模型来看,我们把Redis混合存储架构分为三层,第一层是计算层,它包含所有Redis的网络连接、协议解析、定时任务、命令处理、过期、淘汰、同步等业务逻辑;第二层是数据层,它包含热数据表示、冷热数据交换、冷数据编解码;第三层是存储层,它包含存储引擎、文件系统以及硬件管理。
其中,数据层进行冷热交换是为了保证兼容性,因为所有Redis的业务逻辑是采用主线程来处理的,所有实际的IO是由后台来运行的,进而也不会阻挡主线程的运行。在热数据转换成冷数据的过程中,数据量小于内存时,Redis混合存储会把所有的Keys和Values放到内存里面,这样可以达到性能最高。当数据量越来越大时,内存里会出现存不下的现象,这时会按照最近的访问频率筛选出一些很少被访问到的Values,然后由主线程生成IO任务,接着后台的IO线程拿到这些任务存储到磁盘中,最后主线会将这些Values释放掉。在冷数据转换成热数据的过程中,收到用户请求后,首先判断任务请求会访问到哪些Values,然后看这些Values是否都在内存里面,如果部分Values不在,会对这些Values生成IO任务,然后主线程将客户端挂起,接着继续处理其它客户端的请求,当此线程拿到这些任务后,会把数据从磁盘里面加载到内存里面,同时通知给主线程,主线程收到这些通知之后会将挂起的客户端唤醒继续处理其他用户请求。
对于存储层而言,磁盘上的存储是跟阿里巴巴的服务器研发团队共建的一个用户态的存储引擎,称为FusionEngine。它是由业务定制一个RocksDB,然后通过底层的一个用户固态的文件系统来缩短用户的IO路径,进而避免了内核的开销。在业务场景里面,FusionEngine的性能比过去的文件系统性能提升了约80%左右,因此整体的Redis混合存储性能也得到了有效的提升。

 

产品特性

Redis混合存储产品的底层实线是支持冷热数据任意配比的,即可以任意的匹配内存占用多少和磁盘占用多少,进而在性能和成本上达到一个平衡。在应用中,所有的数据量不能超过内存加磁盘的容量。此产品适用于Values比较大的场景,因为Values对性能的影响不是很大,所以也比较适合数据访问冷热不均的场景。目前混合存储开通的区域有华北2(北京)的可用区D、华东1(杭州)的可用区E、华南1(深圳)的可用区C。

 

应用场景

Redis混合存储产品应用的场景包含电商类应用、直播类应用、互联网类应用,对于电商类应用而言,它的活跃商品数据存放到内存中,冷门商品数据存放到磁盘中;对于直播类应用而言,它的活跃直播间和热门直播间的数据存放到内存中,下线直播间和冷门直播间的数据存放到磁盘中;对于互联网类应用而言,它的首页和热门贴数据存放到内存中,冷门帖子存放到磁盘中。

 

Redis多线程性能增强版

Redis多线程性能增强版突破了Redis单线程的性能瓶颈,且100%兼容原生Redis,业务无需修改任何代码。通过将命令解析,读写,响应等事件分发给多个IO线程并发处理,实现处理性能质的飞跃。

 

技术架构

原生的Redis是进行串行处理的,当它接收到一个请求时,会尝试连接读取到一部分数据,并对这部分数据进行解析,如果解析到一个完整的数据,就会对这个数据进行处理。当这个数据处理完之后,会生成对数据的一个响应,针对这个响应在发送给客户端。原生的Redis存在一个缺陷,就是不能做到并发。相对而言,Redis多线程做的一个Master-Slave架构就能够做到并发,它是将Master数据处理完之后,将数据同步到Slave上。

 

image005


如上图所示,Redis多线程性能增强版是由主线程、多个IO线程和WORKER线程组成,主线程主要负责接受连接,创建client,将连接转发给IO线程。IO线程负责处理连接的读写事件,解析命令,将解析的完整命令转发给WORKER线程处理,发送response包,负责删除连接等;WORKER线程负责命令的处理,生成客户端回包,定时器事件的执行等。
在线程间数据在进行交换的过程中,一个IO线程在获取到连接之后,就开始尝试在这个连接上读取请求,然后对请求做一个解析,若解析到是一个完整的请求,就会将请求放到队列里面。接着,IO线程通知WORKER线程有新的命令需要处理,这个通知是通过管道来进行的。最后,WORKER线程接受到命令后就会对其进行处理,处理完之后会形成对命令的响应,并将响应放到队列里面,同样,WORKER线程也会通知IO线程。

 

产品特性

 

image006


IO线程越多,Redis多线程的性能越好,但是IO线程与Redis多线程的性能并不是线性的,当IO线程达到一定的数量时,WORKER就会达到一个瓶颈。因此,IO线程最多支持多达6个,默认情况下只有一个IO线程。另外需要注意的是,线程数个数跟规格是绑定的,一旦选定实例创建完毕后无法动态修改,如需修改,就需要通过升级规格的方式完成。
Redis多线程并不是在所有的场景中都适用,Redis多线程只适用于主从版无法满足性能需求时、集群版shard节点成为性能瓶颈时、读写分离版本有热写瓶时以及同步延迟等问题时。

 

应用场景

Redis多线程性能增强版主要应用在电商类应用、直播类应用中,对于电商类应用而言,适用于秒杀场景和库存计数;对于直播类应用而言,主要适用于热点直播间和明星大V的直播。


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

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

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

相关文章

阿里云PyODPS 0.7.18发布,针对聚合函数进行优化同时新增对Python 3.7支持

近日,阿里云发布PyODPS 0.7.18,主要是针对聚合函数进行优化同时新增对Python 3.7支持。 PyODPS是MaxCompute的Python版本的SDK,SDK的意思非常广泛,辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。 PyODPS在这…

centos安装rabbitmq_【SpringBoot MQ系列教程】RabbitMq 初体验

SpringBoot 系列教程之 RabbitMq 初体验​mp.weixin.qq.commq 在异步解耦削峰的优势非常突出,现在很多的项目都会用到,掌握 mq 的知识点,了解如何顺畅的使用 mq,可以说是一个必备的职业技能点了接下来我们进入 rabbitmq 的学习过程…

java rpc与webservice_RPC体系,RPC和WebService的区别详解

RPC和WebService的关系RPC(Remote Procedure Call)— 远程过程调用,是一个很大的概念, 它是一种通过网络从远程计算机程序上跨语言跨平台的请求服务,rpc能省略部分接口代码的开发,可以跨机器之间访问对象(java rmi),可以有更方便的…

免费公测中-GPU数据库SQream DB正式上线云市场

业内领先的GPU 数据库服务SQream DB在阿里云云市场正式开启免费公测!SQream DB是一款由阿里战略投资的以色列SQream公司提供,能够支撑海量数据高速分析的业内领先的GPU数据库。通过将计算密集型操作卸载到GPU上,与业界的解决方案相比&#xf…

唏嘘!2019榜单出炉:铁打的Python连续3年第一,它居然跌出前十?

IEEE Spectrum2019年度编程语言排行榜最近刚刚出炉,Python不出意外的又拿了个第一,但是意料之外的是,曾经大火的PHP,居然跌出了前十!PHP曾被大家称为“世界上最好的编程语言”,去年排名第六,前年…

阿里云ECS家族再添新成员,推出密集计算型实例规格族ic5

去年,阿里云正式发布云服务器ECS企业级产品家族,推出面向173种企业应用场景的19款实例。适合在复杂的企业计算环境下,满足对于高性能、高可靠的计算需求。 时隔近一年,回看ECS企业级产品家族已经发展到30款实例,近日再…

findbugs插件_Intellij静态代码扫描插件SpotBugs

最近要做Java静态扫描的部分工作,之前是在Jenkins上使用findbugs插件完成的,但是由于现在Jenkins权限收回和Java代码权限的放开(我也搞不懂这两者的关联性),目前打算在本地完成静态代码扫描工作。选来选取还是选择在Intellij中用插件来完成&a…

一张图看懂智联车管理云平台

智联车管理云平台(IoV Command Center,简称IoV CC)是阿里云面向智联车领域,专门推出的车辆全生命周期云端管理平台,旨在赋能车厂转型出行服务商,提高运营效率、降低自建成本。 传统模式下,车辆…

刨根问底 | 红遍全网的SD-WAN,到底是个啥?

戳蓝字“CSDN云计算”关注我们哦!作者 | 小枣君责编 | 阿秃作为一个热门概念,SD-WAN近年以来频繁地出现在我们的视野当中。很多人说,它是未来最具发展潜力的通信技术之一,极具商业价值。行业里的老牌通信设备商和运营商对它一致看…

centos7安装rabbitmq简单方式

安装rabbitmq前要准备的基础环境 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz tcp_wrappers需下载的安装文件如下 ## erlang wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.…

车联网上云最佳实践(一)

一、车联网行业特性讲解 最近两年车联网发展受到政府部门、科研院以及各大互联网巨头的广泛关注和积极推动。从应用来看,主要包括两种模式:一是前装模式(即车辆出厂前安装),是乘用车厂主导或者与有相关能力的公司合作&…

python3 网站状态监控_基于python3监控服务器状态进行邮件报警

在正式的生产环境中,我们常常会需要监控服务器的状态,以保证公司整个业务的正常运转,常常我们会用到像nagios、zabbix这类工具进行实时监控,那么用python我们怎么进行监控呢?这里我们利用了python3调用psutil和yagmail…

车联网上云最佳实践(二)

云上对标架构及技术详解 我们对传统IDC应用架构进行分析之后,我们发现之前的系统架构存在一些不合理的地方导致了很多的痛点,为了解决这些痛点我们最终考虑上云。开始思考怎样利用云上产品来解决目前遇到的痛点。例如 为了解决我们自建IDC底层基础设施可…

java list 字段去重_java list 根据对象一个字段去重

1.主要思路就是根据从写equals 以及 hashCode 方法。代码如下:package com.bfd.unibase.modules.dataview.entity;import org.hibernate.validator.constraints.Length;import java.util.ArrayList;import java.util.Date;import java.util.HashSet;import java.uti…

Dubbo Mesh | 阿里巴巴中间件团队在 Service Mesh 的实践和探索(附PPT)

精彩观点导读: 我们去探索一项技术,并不会仅仅因为其先进性,而是因为我们目前遇到了一些无法解决的问题,而这项技术正好能解决这个问题。 所有软件最重要的使命不是满足功能要求,而是演进,从而持续成长。…

flutter 自定义键盘_掘金 AMA:听闲鱼客户端架构师邬吉风聊 Flutter 和移动端开发那些事...

第二十一期 AMA 掘金团队请来了闲鱼客户端架构师,《Fish-Redux》作者-- 邬吉风做了为期三天的 Ask Me Anything (AMA) 活动(活动已结束)。我们在此精选了一些来自用户的提问及邬吉风的回答。关于 邬吉风阿里花名吉丰, 《Fish-Redux》作者。现任闲鱼客户端…

网站常见问题1分钟定位(三)| 如何使用阿里云ARMS轻松重现用户浏览器问题

这是阿里中间件 ARMS 团队推出的 “网站常见问题1分钟定位”系列文章的第三篇,作者慕扉。 第一篇传送门 第二篇传送门 一、客户投诉不断,本地却无法重现? 页面加载较慢是用户经常会反馈的问题,也是前端非常关注的问题之一。…

国内首家!平头哥宣布开源RISC-V内核MCU芯片设计平台;IBM驳斥谷歌量子霸权主张;Facebook将赔偿350亿美元……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周两次,打卡即read更快、更全了解泛云圈精彩newsgo go go 小米 MIX4 概念图&#xff0…

把百度网站设为首页_大仙SEO:如何解决网站首页百度收录后被删除?【SEO案例】...

前天(5/20)看数据的时候,发现5118数据直线下降,跌的有些厉害,猜测网站应该出问题了。这个时候不要慌(内心实则慌的一批),在等等看,会不会是百度自身的一些调整。算了分析分析网站吧!site看网站数据&#xf…

技术选型:Sentinel vs Hystrix

这是围绕 Sentinel 的使用场景、技术对比和实现、开发者实践等维度推出的系列文章的第三篇。 第一篇回顾: Dubbo 的流量防卫兵 | Sentinel如何通过限流实现服务的高可用性 - 传送门 第二篇回顾: RocketMQ 的保险丝| Sentinel 如何通过匀速请求和冷…