服务熔断和服务降级是微服务中系统自我保护的一种机制,虽然都是为了进行服务系统的自我保护但二者却又许多不同,下面我们就来说说二者的不同。
概念不同熔断其实最早是来源于股市,所谓的熔断机制,其实就是指股票自动停止机制,也就是说当股票波动幅度较大的时候,交易所为了控制交易发生风险而停止交易的一种机制。而熔断一词用在微服务中则是表示断开服务的意义。例如当某个应用服务出现了问题之后,为了避免其他业务系统服务受到影响,就会主动的断开出问题的服务。这样可以保证系统整体的高可用性。
有了熔断机制的话,就可以保证服务系统不会出现联机故障或者是服务雪崩的情况出现。
服务降级其实就是降低服务的响应级别,是一种在服务出现异常的情况下可以保证其核心功能可用的一种机制。
例如在双十一、618这种场景中,如果将系统的所有功能都开放的话,势必会导致一些系统功能不可用。所以这个时候我们就需要有选择性的开启系统服务,例如优先保证下单服务、商品服务、库存服务、支付服务等等。而所谓的留言、评论等等的一些功能就可以暂时的进行减流或者是关闭。我们将这种操作就可以称为是服务降级。
从本质上看服务降级是弃车保帅的操作,而熔断则是直接是停机保护的措施。
触发机制不同根据上面的描述,可以知道,在不同框架、不同的使用场景中熔断和降级的触发机制是不同的。以Hystrix为例。
在默认情况当出现10秒内请求失败率超过了50%,就会触发服务熔断机制。之后在每隔五秒去请求一次服务,如果服务不能响应则继续熔断,如果服务能正常的进行响应了,则就会退出熔断机制。
在默认情况下如果达到了如下的四个条件,Hystrix就会触发服务降级操作。
- 当某个调用方法抛出了HystrixBadRequestException异常的时候;
- 当执行方法调用超时的时候
- 当熔断器开始工作阻拦调用的时候
- 当线程池、或者是线程队列请求满了的时候。
基本上所有的服务熔断,服务降级相关的操作都是依托于这样的概念来实现的。
归属范围不同根据上面的描述我们可以知道如果出现了服务熔断,那么这个服务可能就出现了服务降级的情况,但是当服务降级之后,并不意味着当前服务就处于熔断状态。
上面也提到了,服务熔断是为了保护后续的服务调用防止发生服务雪崩的情况。是为了保证整体系统的稳定性,而服务降级则是在服务正常的情况下能够保证核心业务能够正常执行的一种机制。也就是说服务熔断之后就可能导致整个系统都不可用了,但是服务降级之后,可以保证服务的核心功能是可用的。
总结根据上面的描述,我们可以知道,熔断是基于全局的自我保护机制,而降级更像是对模块功能的保护,一种是横向的保护,一种是纵向的深入。