redis缓存_redis缓存架构进化论

思考:redis本质是要解决什么问题?


看一个场景:系统查询用户的接口中sql执行需要两秒怎么优化?


第一种优化架构:解决接口性能问题,在浏览器端加缓存

fb772d5868cae167aaf7a97bc33f2d0b.png

问题是:浏览器2..N都要自己建立缓存后才能使用,同时有1000新用户打开浏览器系统瘫痪(假设数据库能抗住的qps极限是1000)。


第二种架构优化 :解决缓存不能重复利用问题,使用JVM缓存

da2cf6b59fc67c542bbaea6705a19263.png

问题是:JVM需要的内存增加了,增加GC频率,不久后内存不够了。


第三种架构优化:解决内存不足GC频繁问题,用一个内存大的服务器部署单体redis(假设有500的qps命中缓存)

aaa95183f3a323565f5c9c8da39dfdf0.png

问题是:

1、一旦redis罢工导致内存中的数据全部丢失,所有的请求都到了数据库上DB被打死((假设数据库能抗住的qps极限是1000)。

cd9be22d8ca476296e9a41e2f2ddf799.png

2、单台redis扛不住太高的并发,qps增加到5000假设4000都命中缓存缓存挂掉(假设单机的redis抗住的qps极限是4000)

2efb3f405be378879cb2ee5e7ac3379d.png


第四种架构优化:解决redis不能抗更高的并发、缓存服务故障没有热备份,使用一主多从架构

c410bcd4fccf7c269e34ac24c64ec845.png

故障检测和故障转移过程:redis主挂了人工发现,手动把redis从提升为主从启挂掉的redis并设置为新主的从节点

ed1d595425114fe0a41c4788a3030ed0.png

392fb891fcf6c316923cd20545210b99.png

问题:故障检测只能靠人发现,故障转移需要人工操作

人工切换的问题:假设主redis在晚上23点挂了,10分钟之后你接到电话,老板让你赶紧修复,于是你从被窝爬起来整,岂不是很头疼。假如你关机了,其他人又不知道服务器密码,那系统岂不是要停机一晚上?停机一晚上如果你的业务是全球业务或者是在晚上有高峰期的业务那岂不是损失惨重!


第五种架构优化:解决依靠人工检测和转移故障,使用哨兵监控状态并自动转移故障

d6a881310d8a5b991b01283e95f4677b.png

故障检测和故障转移过程:

45b8dff6f5ec5a610d761e3a88f0f190.png

da9d0b84d7c5ea099cc6363e76c687ca.png

问题:哨兵本省就是单点他的高可用怎么保证呢?生产环境一定是用的sentinel集群

1b0fd71fa1b3972fbc4d1f1280fbac50.png

上述第五种架构解决了缓存的高可用、高并发问题。应对80%的业务完全够用。


看第二个场景:我有两台4G内存的机器但是我有5G的东西要缓存怎么解决?


第六种架构优化:解决大数据量问题,使用数据分片(sharding)、数据复制(replication)、故障转移(failover)


501fbc5b9e99356ced6168c87473b3aa.png

数据分片的通用逻辑如下图:

942f2662d718cc508f33560025a1768d.png

rediscluster总共有16384个slot(槽)分布在所有主接点中,每个槽存储一部分数据,根据下图的规则计算出数据所在槽

d65fef66b7285ee8771e114a5fbcec74.png

计算出数据所在槽是在客户端(JedisCluster)中完成

5425a0b0a3472b126f9beaa2d3651dd0.png

故障检测和故障转移过程:

1、当redis主3挂了,会自动提升redis从3作为主节点

456d5e7c4be041bdeb46c6f5d576cf7b.png

1a1cc5bf1dbd66bc40bb94645f33c100.png

2、如果redis主4、5和redis从4、5都挂了,数据需要重新分布

分布之前的情况:

d819241be6ffc49927dc160e6f26591c.png

分布之后的情况:

5425a0b0a3472b126f9beaa2d3651dd0.png

最终的架构:

19b033a00b1c9ff6b77d4a4a48bd083a.png


其实第六种架构就是亿级流量下的高并发高可用大数据的解决方案!!


这次分享就到这里!留个思考题:对比六种架构我们的系统合适用那种?为什么?

后续会对架构演进中的具体知识点进行探讨涉及的如下:

 redis的主从复制原理是什么?

数据复制技术的及时性和一致性如何保证?

redis的持久化技术的原理是什么?

哨兵实现高可用的原理是什么?

集群模式key的寻址过程是什么?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值