阿里云Redis——读写分离

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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
相关文章
|
6月前
|
NoSQL Redis Docker
在docker中安装redis,并且阿里云服务器配置
在docker中安装redis,并且阿里云服务器配置
289 1
|
6月前
|
弹性计算 NoSQL Redis
阿里云ECS使用docke搭建redis服务
阿里云ECS使用docke搭建redis服务
222 1
|
23天前
|
监控 NoSQL Redis
开发者如何使用阿里云Redis
【10月更文挑战第2天】开发者如何使用阿里云Redis
135 0
|
2月前
|
NoSQL 安全 容灾
阿里云DTS踩坑经验分享系列|Redis迁移、同步
阿里云数据传输服务DTS在帮助用户迁移Redis数据、同步数据时,在某些复杂场景下会出现报错,或者源库与目标库数据不一致的问题,给用户带来困扰。本文介绍了DTS Redis到Redis迁移、同步过程中的典型问题,以帮助用户更好地使用DTS。
146 2
|
4月前
|
NoSQL Cloud Native Redis
|
6月前
|
NoSQL Cloud Native Redis
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
阿里云瑶池数据库团队后续将持续参与Valkey社区,如过往在Redis社区一样耕耘,为开源社区作出持续贡献。
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
|
5月前
|
NoSQL 安全 Redis
阿里云redis安装
阿里云redis安装
128 0
|
6月前
|
弹性计算 NoSQL 测试技术
倚天使用|Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
137592 5
|
6月前
|
NoSQL Java 微服务
前后端分离项目知识汇总(阿里云Oss,EasyExcel,视频点播,SpringCloud,Redis,Nuxt)-3
前后端分离项目知识汇总(阿里云Oss,EasyExcel,视频点播,SpringCloud,Redis,Nuxt)
201 1
|
6月前
|
NoSQL 关系型数据库 Linux
阿里云RDS购买Linux——安装redis服务
阿里云RDS购买Linux——安装redis服务
150 0