当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。
缓存降级的最终目的是保证核心服务可用,即使是有损的。而且有些服务是无法降级的(如加入购物车、结算)。
在进行降级之前要对系统进行梳理,看看系统是不是可以丢卒保帅;从而梳理出哪些必须誓死保护,哪些可降级;比如可以参考日志级别设置预案:
a,一般:比如有些服务偶尔因为网络抖动或者服务正在上线而超时,可以自动降级;
b,警告:有些服务在一段时间内成功率有波动(如在95~100%之间),可以自动降级或人工降级,并发送告警;
c.错误:比如可用率低于90%,或者数据库连接池被打爆了,或者访问量突然猛增到系统能承受的最大阀值,此时可以根据情况自动降级或者人工降级;
d.严重错误:比如因为特殊原因数据错误了,此时需要紧急人工降级。
实施Redis 缓存降级的一般方法包括:
1.临时关闭缓存:将Redis缓存暂时关闭,直接访问后端数据库或其他数据源,确保系统的基本功能能够继续运行。
2.降低缓存优先级:降低 Redis 缓存的优先级,让部分请求直接绕过缓存访问数据源,减轻Redis的负担。
3.使用备用缓存:切换到备用的缓存服务器或其他缓存方案,以应对当前Redis 缓存无法正常工作的情况。
4.限流控制:对访问缓存的请求进行限流,避免缓存过载,保护系统的稳定性。
5.错误降级:当Redis 缓存出现故障或异常时,返回默认值或友好提示,而不是抛出错误,确保对用户透明且不影响系统的整体功能。
服务降级的目的,是为了防止Redis服务故障,导致数据库跟着一起发生雪崩问题。因此,对于不重要的缓存数据,可以采取服务降级策略,例如一个比较常见的做法就是,Redis出现问题,不去数据库查询,而是直接返回默认值给用户。