一、限流、熔断、降级概念
1.1 限流:
在高并发系统中一定要用,高并发的所有请求进来,不是让每个请求都打到后台集群的,后台集群有它的消费能力,我们应该在它消费能力之内,给它放行请求进来,这个就是限流
比如我们整个集群的处理能力就是每秒1w,那我们从网关处给你放过来的请求那就是1w,保证我们服务不会被超过它能力的流量压垮,只要超过它能力的流量,我们就直接丢弃,你也不用处理了
1.2 熔断
就跟电路里面的保险丝短路的保护一样,A服务调用B服务的某个方法,但是由于B服务的网络不稳定或者B服务方法本来执行慢,或者B服务连接的数据库卡慢,导致方法慢,导致我们整个调用链慢,或者B服务直接宕机了。
我们A服务要去调用的话,如果是以前,我们没有任何保护,直接用feign调用,feign总是给B服务发送请求试,试了一段时间以后,有个默认超时时间,比如3秒,3秒时间你不返回,我就认为你这个服务出问题了,feign接口就会报错。
但是我们现在等不了这么久,因为这样就会引起我们整个调用链的累积效应。那一个要等,大家都要等,等着等着全线卡死,资源不能得到及时释放,吞吐量下降,大量请求又在这里排队,这就形成了一个死循环,处理能力越不行,外面累积的越多,越多的请求又需要越多的资源来进行分配处理,那我们机器就会卡死宕机
1.3 降级
现在有超多的业务都在运行,一些核心的业务:购物车,订单等等,还有一些非核心的业务比如注册之类的,现在网站正在进行秒杀,是一个流量高峰时期。
大家资源不够用了,我们可以手工的将一些非核心业务,比如注册,我们将放注册服务的服务器上的注册服务直接停掉,因为这个服务器不止运行了注册业务,可能还有其他业务。这样停掉以后,就把大量的资源又腾给这个服务器的其他业务了,这就叫降级,停止服务就是降级运行
1.4 熔断和降级的关系
相同点:
- 为了保证集群大部分服务的可用性和可靠性,防止崩溃,牺牲小我
- 用户最终都是体验到某个功能不可用
不同点:
- 熔断是被调用方故障,触发的系统主动规则
- 降级是基于全局考虑,停止一些正常服务,释放资源