阿里云Redis——读写分离

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 摘要:在2018数据库直播大讲堂峰会-Redis专场上,阿里云的Redis开发者午光对Redis读写分离进行了介绍。对Redis读写分离可以解决哪些问题,可以应用在哪些场景中,满足业务的哪种需求分别进行了讲解。

摘要:在2018数据库直播大讲堂峰会-Redis专场上,阿里云的Redis开发者午光对Redis读写分离进行了介绍。对Redis读写分离可以解决哪些问题,可以应用在哪些场景中,满足业务的哪种需求分别进行了讲解。

直播视频:https://yq.aliyun.com/video/play/1312

PDF下载:https://yq.aliyun.com/download/2448

以下为精彩视频整理:


Redis读写分离——解决的问题

对于Redis读写分离主要解决了哪些问题,我们今天主要从接下来的四个方面来进行解读。

第一个是业务流量的读多写少,对这种读多写少或读容量比较大的,读容量从主库倒到从库上去,这个时候主库压力就可以小一点,承担更大的写的压力。读容量越多,读写比越大,加更多的节点。

第二个是慢查多,对Redis来说是有一些比较耗时的命令,用读写分离的话,就可以把慢查的读的流量放到从库里,然后在从库里随便做。主库可以继续承担写的压力。这时候就可以非常轻松的慢查了。

第三个是Big key问题,Redis丰富的数据结构用起来非常的方便非常灵活。我们做数据库开发经常接触的客户有非常多的案例,用的太爽太方便以后就会Big key问题。读写分离可以解决某种场景下的Big key问题。

第四个就是热点读的问题,把数据再一步往上移,客户端把数据返回到业务端,就可以热点读。这只是一方面,但是这种实现的时候就会比较复杂,实验起来会比较麻烦。在读写分离上怎么解决热点读的,我们加上仓库,分散的去读就可以了。

阿里云Redis读写分离——架构

9eb51a17671fd2a220babed50a1939cf1e480095

对阿里云Redis读写分离底层的一些架构,很多用户用过读写分离后感觉非常方便,阿里云Redis读写分离和架构相关的东西就是Redis的master节点和主读从库节点之间的复制关系该怎么复制,上图是一个星型的复制,主库需要挂几个从库然后提供读服务。它有一下几点优点:

(1)主读从库各个从库之间,它们各自之间都是相互独立的,各个主读从库之间是没有关系的。

(2)它的复制链很短各个主读从库和主库是直接相连的只需要复制一节,这个延迟取决于网络时延和主库从库的CPU压力有关。所以说它是复制链比较短,同步延迟也比较小的。

(3)故障恢复相对来说也简单一点,如果主读从库挂了是没有关系的,直接摘掉就好了。如果说主库挂了,只要选一个最新数据的主读从库去提升为主库,在和它进行连接就好了。

它的缺点有如下两点:

(1)master同步压力大。

(2)CPU&带宽放大效应限制扩展能力。

05e6e1cb7fa6a30a5fdc1c9a54cebfaa0f9c4ff1

链式复制就是一个主库挂一个主读从库,主读从库下面在挂一个主读从库一直挂过去。它的优点是可以无限的扩展,master的同步压力也比较小。

它的缺点有如下两点:

(1)复制链越长同步延迟越大,从主从到复制链末端的一个主读从库的同步延迟我们是有监控的,可以观测是什么导致的故障。

(2)另一个缺点就是恢复比较麻烦,比如说复制链中间的某个只读节点挂了,那我们就要它下面的一个好的节点接到它上游,让复制链保持畅通。

综合上面的考虑,最终我们选用的是链式复制的架构,框架图如下:

fd993fde3b457632f05d9e4f5572b60c512185dc

现在在我们网站上购买一个读写分离的实例,这个读写分离实例上面用的通过给的地址访问的所有的架构就是这样的。购买一个实例后肯定是有一个域名的,上面有一层负载均衡,负载均衡下面是接着proxy,proxy是做流量转发的,机群上面是有一层代理做流量转发,对读写分离也是有一层代理的,这个代理最主要的功能就是消息转发,消息转发把写的流量都转移到master上。

f4fec29bb5874bffd28d06a77edd217d169236e4

HA模块是做高可用,就是一个主读从库挂了该怎么处理,这是高可用模块主要负责的事情,要监控各节点健康状态。发起主从切换,主从切换就是master挂了,要把slave切换成master,复制链也重新建好。然后是发起ro-slave重搭,如果说业务中第二个主读从库挂了,这个图里是一个主库带了三个节点,这个时候proxy就会自动的把流量转发到其他的节点上去,其他节点的压力就会上升,这时就要把故障节点摘掉,摘掉后立马新建一个主读从库,新建的主读从库复制链的末端第三个节点去同步数据。

Proxy模块对读写分离有非常重要的作用,要去感知Redis的状态,比如说某一个主读从库挂了,如果一直等待HA感知节点,因为感知是需要时间的,这个时间的业务流量就会全部失败,所以Proxy是要感知Redis的状态的。Proxy可以动态调整权重,主读从库做Proxy流量转发是有一个加权,权重就决定了每个主读从库抗多少的比例的流量。大多数情况下主读从库都是默认的权重都是一样的,当Proxy感受到异常就会进行调整。还有一种情况是节点彻底的挂了,Proxy也是直接就会感知到,这个时候是可以暂时的屏蔽一段时间,过一段时间后放一个流量过去,感知一下是不是好的,是好的在逐渐把权重恢复起来,如果还是不行就继续屏蔽一段时间。

Proxy有如下四个的优点:

1)只有一个访问地址,都是通过一个地址来访问

2)100%命令兼容

3)负载均衡

4)高可用,是根据业务的流量去感知各个节点的状态,智能的去调整它。

阿里云Redis读写分离——一致性

讲了很多读写分离的缺点现在来说说它的缺点,读写分离的缺点就是一致性,要有读写分离就要容忍业务是不一致的,也就是一致性没有那么高,不要求有强一致性。

ec4eeb28cf8e285a639cefe8b8508343b015d9d0

左边这个图相对来说会比较简单一点,假设去主库里面写了一条数据正常返回了,比如先前写的数据是value1,过了一会再写一条把数据改了,改后立马去读,这时读流量重复上面去执行,这时返回的数据是旧的,这个结果是否可以接受,能接受就完全没问题。

右边这个图稍微复杂一点,优点类似于不可重复读。假设写一条数据value1,写完之后到各个从库里面最后value就是value1。接下来客户端又写了一条新数据,立马就进行读,这个时候假设有连续三个读流量,第一个获得最新的。第二个读请求读的是旧的是value1,。第三个读请求获得了最新的数据。

阿里云Redis读写分离——售卖与使用

阿里的Redis读写分离的规格应该是在2017年的下半年开始正式上线的。目前我们的读写分离接入是0成本,命令也是100%兼容的,主从到读写分离是自动升级的,可以提供60Wqps和192MB/s的服务能力,目前提供1master + 1/3/5 readonly slave。

读写分离现在可以购买的一些规格中最小的是1GB的读写分离版本,带一个只读节点。最高的是32GB读写分离版本,带有五个只读节点,这个已经可以满足大部分客户的需求了。以后我们会推出更丰富的读写分离版本,我们的目标是让用户用的更加方便更加灵活。


本文由云栖志愿小组陈欢整理,百见编辑。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
NoSQL Redis Docker
在docker中安装redis,并且阿里云服务器配置
在docker中安装redis,并且阿里云服务器配置
181 1
|
1月前
|
弹性计算 NoSQL Redis
阿里云ECS使用docke搭建redis服务
阿里云ECS使用docke搭建redis服务
150 1
|
1月前
|
弹性计算 NoSQL 测试技术
倚天使用|Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
137500 3
|
2月前
|
NoSQL 关系型数据库 Linux
阿里云RDS购买Linux——安装redis服务
阿里云RDS购买Linux——安装redis服务
90 0
|
3月前
|
NoSQL Java 微服务
前后端分离项目知识汇总(阿里云Oss,EasyExcel,视频点播,SpringCloud,Redis,Nuxt)-3
前后端分离项目知识汇总(阿里云Oss,EasyExcel,视频点播,SpringCloud,Redis,Nuxt)
121 1
|
24天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
28天前
|
存储 分布式计算 网络协议
阿里云服务器内存型r7、r8a、r8y实例区别参考
在阿里云目前的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y这几个实例规格,相比于活动内的经济型e、通用算力型u1实例来说,这些实例规格等性能更强,与计算型和通用型相比,它的内存更大,因此这些内存型实例规格主要适用于数据库、中间件和数据分析与挖掘,Hadoop、Spark集群等场景,本文为大家介绍内存型r7、r8a、r8y实例区别及最新活动价格,以供参考。
阿里云服务器内存型r7、r8a、r8y实例区别参考
|
29天前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
30天前
|
弹性计算
阿里云3M带宽云服务器并发多大?阿里云3M带宽云服务器测评参考
在探讨云服务器3M带宽能支持多大并发这一问题时,我们首先要明白一个关键点:并发量并非仅由带宽决定,还与网站本身的大小密切相关。一般来说,一个优化良好的普通网站页面大小可能只有几K,为便于计算,我们可以暂且假定每个页面大小为50K。
797 1
|
1天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。

热门文章

最新文章