欢迎光临散文网 会员登陆 & 注册

SpringCloud微服务Hystrix:如何解决灾难性雪崩效应?

2021-05-12 17:10 作者:编程大战  | 我要投稿

一、什么是灾难性的雪崩效应

     在微服务架构的项目中,尤其是中大型项目,肯定会出现一个服务调用其他的服务,其他服务又调用别的服务,服务和服务之间形成了一种链式的调用关系。

      导致服务U和服务T的负载过高。运行性能下降。会导致其他调用服务U和服务T的链条出现问题。从而所有的项目可能都出现的问题。

      当其中某一个服务突然遇到大量请求时。整个链条上所有服务负载骤增。

 这种情况就称为灾难性的雪崩效应。

二、雪崩效应原因:

  1. 服务提供者Application Service不可用。

    (1)硬件故障、

    (2)程序BUG

    (3)缓存击穿

    (4)并发请求量过大等。

  2. 重试加大流量。

    (1)用户重试

    (2)代码重试逻辑等。

  3. 服务调用者Application Client不可用。

    (1)同步请求阻塞造成的资源耗尽等。

    雪崩效应最终的结果就是 服务链条中的某一个服务不可用,导致一系列的服务不可用,最终造成服务逻辑崩溃。这种问题造成的后果,往往是无法预料的。

三、如何防止灾难性雪崩效应

1、降级

      降级是指,当请求超时、资源不足等情况发生时进行服务降级处理,不调用真实服务逻辑,而是使用快速失败(fallback)方式直接返回一个托底数据,保证服务链条的完整,避免服务雪崩。

2、熔断

      当一定时间内,异常请求比例(请求超时、网络故障、服务异常等)达到阀值时,启动熔断器,熔断器一旦启动,则会停止调用具体服务逻辑,通过fallback快速返回托底数据,保证服务链的完整。

3、请求缓存

      Hystrix为了降低访问服务的频率,支持将一个请求与返回结果做缓存处理。如果再次请求的URL没有变化,那么Hystrix不会请求服务,而是直接从缓存中将结果返回。这样可以大大降低访问服务的压力。

4、请求合并

  1. 没有请求合并

    Application Service 负载是Application Client发送请求的总数量

  2. 请求合并

    把一段时间范围内的所有请求合并为一个请求。大大的降低了Application Service 负载。

5、隔离

  1. 线程池隔离

  2. 信号量隔离

  3. 线程池隔离和信号量隔离

  4. 限流说明

四、Hystrix简介

    在Spring Cloud中解决灾难性雪崩效应就是通过Spring Cloud Netflix Hystrix实现的。

    Hystrix [hɪst'rɪks],中文含义是豪猪,因其背上长满棘刺,从而拥有了自我保护的能力。本文所说的Hystrix(中文:断路器)是Netflix开源的一款容错框架,同样具有自我保护能力。

    通俗解释:Hystrix就是保证在高并发下即使出现问题也可以保证程序继续运行的一系列方案。作用包含两点:容错和限流。

    在Spring cloud中处理服务雪崩效应,都需要依赖hystrix组件。在Application Client应用的pom文件中都需要引入下述依赖:

<dependency>

           <groupId>org.springframework.cloud</groupId>

           <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>

</dependency>

通过使用Hystrix,我们能方便的防止雪崩效应, 同时使系统具有自动降级和自动恢复服务的效果.

详细解决方法可以观看上方视频,免费领取源代码资料哦~

SpringCloud微服务Hystrix:如何解决灾难性雪崩效应?的评论 (共 条)

分享到微博请遵守国家法律