定义概念
当整服务整体超出预设的上限阙值或即将到来的流量预计会超过预设阙值时,为了保证重要或基本的服务能正常运行,拒绝部分请求或者将一些不重要或不紧急的服务或任务进行服务的延迟使用或暂停使用。
降级更多是作为限流。
目的
避免系统雪崩和服务宕机。
目标
保证核心服务可用,非核心服务弱可用,甚至不可用。
服务降级的手段
1.拒绝部分请求
这里有几个问题解释一下:
为什么丢弃的是老请求?
因为app对应请求响应一般是1秒左右,如果超过一秒钟了,这时候,即使处理完了,返回给前端,这时候前端已经超时了,没有用。
按照优先级请求方式怎么实现?
在header中一般会有uuid、sessionid、cid、body。。。 其中可以使用cid来控制是否核心请求或者优先级 优先级的数据一般会放在配置中心的。
何时启用丢弃策略,一般真正开始的时候,会使用人工控制策略的优先级,然后使用人工开启优先级策略,有一个按钮开关。
每一个请求进来会先进入一个请求队列,每一个请求,都包含一些数据:入请求队列的时间,出队列的时间,可以求出一个请求在队列的停留时间。
2.关闭部分服务
这个就是把部分服务关闭就可以了。
层次
服务层架构层次
集中式(在网关层统一做(nginx)) X
网关层 通过cmd
网关层做,会有一个越来越小的漏洞,比如网关层能做500个请求,到业务逻辑层会变成300多
个,到数据访问层会变成200个.还有如果用网关做降级,需要考虑业务逻辑层和数据访问层要
做什么样的降级,网关层会存在耦合。
所以推荐使用以下
自治式(每一个各自做自己的)
网关层
业务逻辑层
数据访问层
水平分层架构如下
数据层做降级(参考新浪做法)
服务降级的策略
建议自动打开,不依赖于人工。要保证线上生效,可以做线下压测,看关键时刻服务降级能否打开。