为什么要服务降级
- 假设一个服务器1秒最大只能并发处理5W条请求,如果用户并发请求6万,那么多的1万请求在1秒内多出1W个cpu时间切片,这些cpu时间切片占用了1秒的资源,导致前面5W请求不够资源,这个时候大家都要花费时间在等待资源的时间上,如果这个时候后续请求都是超过5W,那么前面的请求来不及处理,后面的请求不够资源,找出cop切片越来越多,没有请求获取的时间资源越来越少,最终前面的请求处理不完,后面的请求一直不断,数据库连接不释放,数据库崩了–》服务崩了,请求分配给其他服务器(服务集群)–》集群崩了。
一 服务降级
服务器压力过大的时候,限制访问过大的接口,返回数据提示服务器繁忙等信息,比如12306抢票
1返回数据类型
- 提示服务繁忙,跳转静态页面
- 会提示稍晚能看到结果, 用户的请求放到异步队列延迟处理。
2降级要做到使用配置中心做成可在线配置调整。
二 服务熔断
如果某个目标服务调用慢或者有大量超时,此时,停止该服务的调用,对于后续调用请求,不在处理,直接返回服务挂了,这样快速释放资源。如果目标服务情况好转则恢复调用。
1 . 好处是目标服务不可用的时候,不会对其他服务的功能造成影响,因为其他服务调用获取的信息是该服务不可用
1为什么要服务熔断
1 . 目标服务请求调用慢,其他服务调用目标服务的时候会卡在这里,当大量请求目标服务的时候会造成大量请求堵塞,后面请求不断,最后雪崩。
1熔断模块
- 熔断请求判断机制算法:使用无锁循环队列计数,每个熔断器默认维护10个bucket,每1秒一个bucket,每个blucket记录请求的成功、失败、超时、拒绝的状态,默认错误超过50%且10秒内超过20个请求进行中断拦截。
- 熔断恢复:对于被熔断的请求,每隔5s允许部分请求通过,若请求都是健康的(RT<250ms)则对请求健康恢复。
- 熔断报警:对于熔断的请求打日志,异常请求超过某些设定则报警
三降级与熔断对比
- 目的: 都是防止系统的整体缓慢甚至奔溃而采用的技术手段。
- 表现: 给用户一种当前服务不可用或者不可达的感觉
- 粒度: 降级一般作用到接口,熔断一般作用到模块。
- 自治: 基本都是靠系统达到某一临界条件时,实现自动的降级与熔断 、
- 触发原因: 服务器或者接口压力过大。