SpringCloud第六章(服务保护CircuitBreaker) -2024

目录

1:什么是CircuitBreaker

2:CircuitBreaker的实现Resilience4J

3:Resilience4J的主要模块和架构

3.1:主要模块

3.2:Resilience4J的状态

4:服务熔断(CircuitBreaker) 请求判断成功率

4.1:基于计数器的滑动窗口

4.1.1:导包resilience4j的依赖包

4.1.2:yml文件添加配置

4.1.3:测试目标

 4.1.4:代码验证 

4.1.5:结果验证

4.2:基于时间的滑动窗口 

4.2.1:导包resilience4j的依赖包

4.2.2:yml文件添加配置

4.2.3:测试目标

4.2.3:代码测试

4.2.5:结果验证

5:服务隔离(Bulkhead)单位时间限量不限速

5.1:信号量Bulkhead舱壁实现服务隔离

5.2:线程池Bulkhead舱壁实现服务隔离

6:服务限流(RateLimiter) 单位时间限制速度

6.1:导包限流依赖包

6.2:yml文件添加配置

6.3:代码实现

6.4:结果验证


1:什么是CircuitBreaker

CircuitBreaker是断路器的意思,由于原来的SpringCoud的hystrix停更,所以springcloud社区推出了的新断路器,用来进行springcloud的服务降级、限流、熔断

Spring Cloud Circuit BreakerCircuitBreaker官网:Spring Cloud Circuit Breaker

由于Spring Cloud断路器(CircuitBreaker)提供了不同断路器实现的抽象,

支持的实现有两种Resilience4J和Spring Retry的实现

在Spring Cloud CircuitBreaker中实现的API位于Spring Cloud Commons中。这些API的使用文档位于Spring Cloud Commons文档中。

2:CircuitBreaker的实现Resilience4J

我们主要学习Resilience4J,Resilience4J的官网

GitHub - resilience4j/resilience4j: Resilience4j is a fault tolerance library designed for Java8 and functional programming

Resilience4j是受到Netflix Hystrix的启发,为Java8和函数式编程所设计的轻量级容错框架。整个框架只是使用了Varr的库,不需要引入其他的外部依赖。与此相比,Netflix Hystrix对Archaius具有编译依赖,而Archaius需要更多的外部依赖,例如Guava和Apache Commons Configuration。

Resilience4j提供了提供了一组高阶函数(装饰器),包括断路器,限流器,重试机制,隔离机制。你可以使用其中的一个或多个装饰器对函数式接口,lambda表达式或方法引用进行装饰。这么做的优点是你可以选择所需要的装饰器进行装饰。

在使用Resilience4j的过程中,不需要引入所有的依赖,只引入需要的依赖即可。

以上来自官网,这里不粘贴太多了,详情GitHub官网。

3:Resilience4J的主要模块和架构

3.1:主要模块

主要模块的作用是方便我们根据模块,了解不同的功能实现

resilience4j-circuitbreaker: 熔断

resilience4j-ratelimiter: 限流

resilience4j-bulkhead: 隔离

resilience4j-retry: 自动重试(同步,异步)

resilience4j-cache: 结果缓存

resilience4j-timelimiter: 超时处理

3.2:Resilience4J的状态

Resilience4J的状态装换,便于我们理解限流、降级、熔断的功能实现

断路器有三个普通状态

1:关闭(CLOSED):

服务可以正常访问,所有请求都能接受

2:开启(OPEN):

服务不能访问,当我们设置一些请求按照我们的规则,比如10个请求在滑动窗口下成功率小于50%,也就是大于5个失败,服务进入关闭状态,不能访问。新的请求走fallbackMethod,提示服务繁忙

3:半开(HALFOPEN)

按照我们设置的规则,比如由于10个请求成功率低的原因服务进入open状态,不能访问。

但是过了N秒(我们自己设置)进入半开状态,可以允许指定的请求再次打进来比如只进来2个,不是所有请求,重新计算成功率,这个状态就是半开。

在半开状态下重新计算成功率,成功率达标,则说明服务健康了,服务进入关闭状态,可以大量访问。否则进入open状态,不能访问。再次开启这个循环往复

还有两个特殊状态:禁用(DISABLED)、强制开启(FORCED OPEN)。

4:服务熔断(CircuitBreaker) 请求判断成功率

为什么需要对服务进行熔断降级:

当下游的服务因为某种原因突然变得不可⽤或响应过慢,上游服务会一直占用线程资源,服务变得不可用。上游服务为了保证⾃⼰整体服务的可⽤性,不再继续调⽤⽬标服务,直接返回,快速释放资源。如果⽬标服务情况好转则恢复调⽤。熔断器模型,如图所示

4.1:基于计数器的滑动窗口

4.1.1:导包resilience4j的依赖包

  <properties>
        <java.version>17</java.version>
        <spring-cloud.version>2023.0.3</spring-cloud.version>
    </properties>
  
<!--circuitbreaker 断路器的resilience4j 实现	依赖aop	-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>


 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

4.1.2:yml文件添加配置


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值