Redis高可用架构设计以及常见问题分析

本文通过运维与开发的对话,揭示了Redis在高并发和大数据量场景下的问题,如Zset插入排序导致内存溢出,以及主从复制策略可能导致的频繁切换和性能下降。作者强调了完善监控、定制Redis客户端和优化持久化方案的重要性,同时提供了一些建议和Java开发者的学习资源。
摘要由CSDN通过智能技术生成

运维:大哥,不要在Zset里面放几万条数据,插入排序的后果很严重啊!

开发:写进去的key呢,为什么不见了?

运维:你的Redis内存超过最大大小了,不常用的key都丢了呀!

开发:刚刚为啥读取全部失败了?

运维:刚刚网络临时中断了一下,slave全同步了,在全同步完成之前,slave的读取全部失败。

开发:我刚刚想到一个好方案,我需要800GB的Redis,什么时候能准备好呢?

运维:大哥,我们线上的服务器最大也就256GB,别玩这么大好吗?

一些常见策略以及其弊端:

1.单机不是不安全吗?那么就开启主从+Keepalived,用虚IP地址在master和 slave两边漂移,master挂了直接切换到slave。

主从+Keepalived 的方案,本来是个很好的方案,但是忽略了主数据节点挂掉的情况。Redis的单进程、单线程设计是其简单和稳定的基石,只要不是服务器发生了故障,在一般情况下是不会挂的。但同时,单进程、单线程的设计会导致Redis接收到复杂指令时会忙于计算而停止响应,可能就因为一个Zset或者keys之类的指令,Redis计算时间稍长,Keepalived就认为其停止了响应,直接更改虚IP的指向,然后做一次主从切换。过不了多久,Zset和 keys之类的指令又会从客户端发送过来,于是从机上又开始堵塞,Keepalived就一直在主从机之间不断地切换IP。终于主节点和从节点都堵了,Keepalived发现后,居然直接将虚IP释放了,然后所有的客户端都无法连接Redis了,只能等运维到线上手工绑定才行。

2.数据放内存不是不安全吗?可以开启数据落盘,根据业务需要决定落盘规则,有AOF的,也有RDB的。

数据落盘也引起了很大的问题,RDB属于非阻塞式的持久化,它会创建一个子进程来专门把内存中的数据写入RDB文件里,同时主进程可以处理来自客户端的命令请求。但子进程内的数据相当于是父进程的一个拷贝,这相当于两个相同大小的Redis进程在系统上运行,会造成内存使用率的大幅增加。如果在服务器内存本身就比较紧张的情况下再进行RDB配置,内存占用率就会很容易达到100%,继而开启虚拟内存和进行磁盘交换,然后整个Redis的服务性能就直线下降了。

另外,Zset、发布订阅、消息队列、Redis的各种功能不断被介绍,开发者们也在利用这些特性,开发各种应用,但从来没想过这么一个小小的Redis 有这么多新奇的功能,它的缺点在什么地方,什么样的场景是不合适用的?这时Redis在大部分的开发者手上就是像是一把锤子,看什么都是钉子,随时都一锤了事。同时也会渐渐地淡忘了开发的一些细节点和规范,因为用它解决性能的问题是那么轻松简单,于是一些基于Redis的新奇功能就接连不断地出现了:基于Redis的分布式锁、日志系统、消息队列、数据清洗,等等,各种各样的功能不断上线使用,从而引发了各种各样的问题。这时候原来那个救火神器就会变成四处点火的神器,Redis堵塞、网卡打爆、连接数爆表等问题层出不穷,经过这么多折腾,Redis终于也变成了大家的噩梦了。

总结以下几点需要解决:

  1. 必须搭建完善的监控系统,在这之前要先预警,不能等到发生了,我们才发现问题。

  2. 控制和引导Redis 的使用,我们需要有自己研发的Redis客户端,在使用时就开始控制和引导。

  3. Redis的部分角色要改,将Redis 由 storage角色降低为cache角色

  4. Redis的持久化方案要重新做,需要自己研发一个基于Redis协议的持久化方案,让使用者可以把 Redis当DB用。

  5. Redis 的高可用要按照场景分开,根据不同的场景决定采用不同的高可用方案。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
618164986)

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值