专栏首页工程师的自我修养之路由Redis的hGetAll函数所引发的一次服务宕机事件

由Redis的hGetAll函数所引发的一次服务宕机事件

昨晚通宵生产压测,终于算是将生产服务宕机的原因定位到了,心累。这篇文章,算作一个复盘和记录吧。。。先来看看Redis的缓存淘汰算法思维导图:

说明:当实际占用的内存超过Redis配置的maxmemory时,Redis就会根据用户选择淘汰策略清除被选中的key。

业务场景:用户通过微信入口来访问一个页面;

测试场景:通过多线程模拟定量的并发来访问页面服务;

涉及架构:springsession+Redis集群,容器部署;

问题描述:固定并发数压测10分钟,压测开始后半小时,Redis连接数激增,连接耗尽,服务重启;

处理逻辑:

①、用户通过入口页面访问服务时,springsession给每个用户创建一个session,将key存储在Redis中;

②、Redis默认配置每隔半小时,利用hGetAll函数遍历session-key所在的集合,将最近一分钟内要过期的key全部delete,释放内存;

宕机原因:

①、Redis是单线程处理,由于高并发压测,产生了百万级的key存储在set集合中,当hGetAll函数遍历集合删除过期session的key时,大量用户连接失效;

②、失效瞬间,Redis需要创建大量连接,如果TPS超过了设置的最大连接数,则Redis服务容器健康检查不通过;

③、通过选举,Redis集群主从切换时需要将master的数据复制到salve;

④、主从复制时,Redis定位区域buffer(软链接)超时,最终导致服务宕机重启。

优化方案:

①、选择Redis默认淘汰策略,每秒钟选择10次,每次不超过25个,即每秒钟淘汰≤250个key;

缺点:内存好用较高,需要通过横向扩展资源来应对该问题;

②、通过压测确定当前系统配置下的最大可处理阈值,通过网关限流、服务降级等措施来保障服务的稳定运行;

缺点:如果实际流量超过限流配置,则用户可能看到一些“友好界面”,用户体验不太好;

PS:在实际生产环境中,系统稳定性和可用性胜于一切!!!

以上就是此次问题复盘,虽然通宵带来的后遗症导致现在还有点迷糊,但从中学到了很多新的东西,值得思考与学习。。。

本文分享自微信公众号 - 工程师的自我修养之路(Engineer_Way),作者:老张

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 通信服务框架基础知识总结

    在软件系统组成越发复杂的今天,如何保证每个服务间的通信,是系统架构师必须考虑的重要一点。作为一名软件测试工程师,了解系统架构以及服务间的通信过程及原理,对我们开...

    写博客的老张
  • 浅谈容量测试与容量规划

    在性能测试中,需要根据具体的性能需求和系统架构等情况,采用不同的测试策略,其中最常见的策略就有容量测试。这篇文章,就来聊聊容量测试以及容量规划的一些内容。。。

    写博客的老张
  • 轻量级流量复制实践

    对于流量回放这个词,很多同学并不陌生,但绝大多数公司因种种原因并没有进行实践,最现实的原因是由于做全链路的流量回放有大量的写操作,必然要涉及到系统改造,数据加...

    写博客的老张
  • Redis应用场景

    Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数...

    张善友
  • Gavin老师:分布式缓存Redis高级应用实战(艾编程精品视频)

    【学完本节课你将掌握如下知识】 1、分布式缓存中间件选型 2、Redis作为单线程模式为什么效能还这么高? 3、Redis服务安装机常用命令解析 4、如...

    艾编程
  • 使用Redis走进误区,该怎么办?

    首先是一个产品线开发人员搭建起了一套庞大的价格存储系统,底层是关系型数据库,只用来处理一些事务性的操作和存放一些基础数据; 在关系型数据库的上面还有一套Mong...

    企鹅号小编
  • Redis未授权访问配合SSH key文件利用分析

    1.更新情况 ? 2.漏洞概述 Redis默认情况下,会绑定在0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导...

    FB客服
  • 那些年用过的Redis集群架构(含面试解析)

    他面试的时候,身份是某知名公司的小码农一枚,却因为不懂自己生产上Redis是如何部署的,导致面试失败!

    Java团长
  • 对话张冬洪 | 全面解读NoSQL数据库Redis的核心技术与应用实践

    互联网和Web的蓬勃发展正在改变着我们的世界,随着互联网的不断发展和壮大,企业数据规模越来越大,并发量越来越高,关系数据库无法应对新的负载压力,随着Hadoop...

    数据和云
  • MySQL百万级数据高效导入Redis

    随着系统的运行,数据量变得越来越大,单纯的将数据存储在MySQL中,已然不能满足查询要求了,此时我们引入Redis作为查询的缓存层,将业务中的热数据保存到Red...

    用户1148526

扫码关注云+社区

领取腾讯云代金券