服务雪崩、服务熔断、服务降级

195 阅读5分钟

服务雪崩、服务熔断、服务降级

服务雪崩

现象:在一个时刻微服务系统中所有微服务均不可用的这种现象称之为服务雪崩
引发:在微服务之间进行服务调用是由于某一个服务故障,导致级联服务故障的现象,称为雪崩效应。雪期效应描述的是提供方不可用,导致消费方不可用并将不可用逐渐放大的过程
根本原因: 在调用链路中链路中某一服务因为执行业务时间过长或者是大规模出现异常导致自身服务不可用,并把这种不可用发大情况

如何解决微服务系统服务雪崩问题?

服务熔断 ===> Hystrix
作用: 就是用来在微服务系统中防止服务雪现象出现的
熔断机制: 所有微服务中必须引入hystrix组件,一旦引入hystrix这个组件这个组件就具有服务熔断功能。
熔断类似于保险丝。

image.png

服务雪崩

  • 在微服务之间进行服务调用是由于某一个服务故障,导致级联服务故障的现象,称为雪崩效应。雪崩效应描述的是提供方不可用,导致消费方不可用并将不可用逐渐放大的过程。

图解雪崩效应

  • 如存在如下调用链路:

image.png

而此时,Service A的流量波动很大,流量经常会突然性增加!那么在这种情况下,就算Service A能扛得住请求,Service B和Service C未必能扛得住这突发的请求。此时,如果Service C因为抗不住请求,变得不可用。那么Service B的请求也会阻塞,慢慢耗尽Service B的线程资源,Service B就会变得不可用。紧接着,Service A也会不可用,这一过程如下图所示

image.png

服务熔断

服务熔断

“熔断器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器(hystrix)的故障监控,某个异常条件被触发,直接熔断整个服务。
向调用方法返回一个符合预期的、可处理的备选响应(FallBack), 而不是长时间的等待或者抛出调用方法无法处理的异常,就保证了服务调用方的线程不会被长时间占用,避免故障在分布式系统中蔓延,乃至雪崩。
如果目标服务情况好转则恢复调用。服务熔断是解决服务雪崩的重要手段。

服务熔断图示

image.png

断路器打开条件

如果触发一定条件断路器会自动打开, 过了一点时间正常之后又会关闭。那么断路器打开条件是什么呢?

官网: cloud.spring.io/spring-clou…

A service failure in the lower level of services can cause cascading failure all the way up to the user. When calls to a particular service exceed circuitBreaker.requestVolumeThreshold (default: 20 requests) and the failure percentage is greater than circuitBreaker.errorThresholdPercentage (default: >50%) in a rolling window defined by metrics.rollingStats.timeInMilliseconds (default: 10 seconds), the circuit opens and the call is not made. In cases of error and an open circuit, a fallback can be provided by the developer. --摘自官方

image.png

原文翻译之后,总结打开关闭的条件:

  • 1、 当满足一定的阀值的时候(默认10秒内超过20个请求次数)
  • 2、 当失败率达到一定的时候(默认10秒内超过50%的请求失败)
  • 3、 到达以上阀值,断路器将会开启
  • 4、 当开启的时候,所有请求都不会进行转发
  • 5、 一段时间之后(默认是5秒),这个时候断路器是半开状态,会让其中一个请求进行转发。如果成功,断路器会关闭,若失败,继续开启。重复4和5。

image.png

服务降级

服务降级是站在系统架构的业务考虑,而服务熔断是某一个调用链路考虑

服务降级说明

  • 服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此缓解服务器的压力,以保证核心任务的进行。同时保证部分甚至大部分任务客户能得到正确的响应。也就是当前的请求处理不了了或者出错了,给一个默认的返回。

  • 服务降级: 关闭微服务系统中某些边缘服务 保证系统核心服务正常运行

  • 12 淘宝 京东

  • 删除订单 --- 关闭订单 确认收货 ----> 服务繁忙,!!!

通俗定义: 当网站1服务流量突然增加时,为了保证系统核心服务正常运行, 有策略关闭系统中边缴服务, 以保证核心服务正常运行

服务降级图示

image.png

降级和熔断总结

  1. 共同点
  • 目的很一致,都是从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃,采用的技术手段;
  • 最终表现类似,对于两者来说,最终让用户体验到的是某些功能暂时不可达或不可用;
  • 粒度一般都是服务级别,当然,业界也有不少更细粒度的做法,比如做到数据持久层(允许查询,不允许增删改);
  • 自治性要求很高,熔断模式一般都是服务基于策略的自动触发,降级虽说可人工干预,但在微服务架构下,完全靠人显然不可能,开关预置、配置中心都是必要手段;sentinel
  1. 异同点
  • 触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;
  • 管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务边缘服务开始)
  1. 总结
  • 熔断必会触发降级,所以熔断也是降级一种,区别在于熔断是对调用链路的保护,而降级是对系统过载的一种保护处理

引用 编程不良人