开发者学堂课程【Redis 入门到精通(进阶篇):企业级解决方案-缓存穿透】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/765/detail/13474
企业级解决方案-缓存穿透
内容介绍:
一、数据库服务器崩溃(3)
二、问题排查
三、问题分析
四、解决方案(术)
五、总结
一、数据库服务器崩溃(3)
1.系统平稳运行过程中
2.应用服务器流量随时间增量较大
3.Redis 服务器命中率随时间逐步降低
4.Redis 内存平稳,内存无压力
5.Redis 服务器 CPU占用激增
6.数据库服务器压力激增
7.数据库崩溃
二、问题排查
1.Redis 中大面积出现未命中
2.出现非正常 URL 访问
三、问题分析
获取的数据在数据库中也不存在,数据库查询未得到对应数据
Redis 获取到 null 数据未进行持久化,直接返回
下次此类数据到达重复上述过程
出现黑客攻击服务器
四、解决方案(术)
1.缓存 null
对查询结果为 null 的数据进行缓存(长期使用,定期清理),设定短时限,例如30-60秒,最高5分钟
2.白名单策略
提前预热各种分类数据 id 对应的 bitmaps,id作为 bitmaps 的 offset,相当于设置了数据白名单。当加载正常数据时,放行,加载异常数据时直接拦截(效率偏低)
使用布隆过滤器(有关布隆过滤器的命中问题对当前状况可以忽略)
3.实施监控
实时监控 redis 命中率(业务正常范围时,通常会有一个波动值)与nul数据的占比
非活动时段波动:通常检测3-5倍,超过5倍纳入重点排查对象
活动时段波动:通常检测10-50倍,超过50倍纳入重点排查对象根据倍数不同,启动不同的排查流程。然后使用黑名单进行防控(运营)
4.key 加密
问题出现后,临时启动防灾业多务 key,对 key 进行业务层传输加密服务,设定校验程序,过来的 key 校验
例如每天随机分配60个加密串,挑选2到3个,混淆到页面数据 id 中,发现访问 key 不满足规则,驳回数据访问
五、总结
缓存击穿访问了不存在的数据,跳过了合法数据的 redis 数据缓存阶段,每次访问数据库,导致对数据库服务器造成压力。通常此类数据的出现量是一个较低的值,当出现此类情况以毒攻毒,并及时报警。应对策略应该在临时预案防范方面多做文章。
无论是黑名单还是白名单,都是对整体系统的压力,警报解除后尽快移除。