Appearance
五、熔断-Circuitbreaker
1、模块简介
故障实例熔断是常见的一种容错保护机制。故障实例熔断能实现主调方迅速自动屏蔽错误率高或故障的服务实例,并启动定时任务对熔断实例进行探活。在达到恢复条件后对其进行半开恢复。在半开恢复后,释放少量请求去进行真实业务探测。并根据真实业务探测结果去判断是否完全恢复正常。
如下图所示当被调端 Instance3 出现异常时,主调端会自动的把请求只打到 Instance1,Instance2,通过这种方式保证主调端能够正常的调用服务。
1、熔断策略
- 故障比例熔断:当服务实例在上一个时间窗(默认1分钟)内,通过的请求量达到或超过最小请求阈值(默认10个),且错误率达到或超过故障比率阈值(默认50%),实例会进入隔离状态。故障比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
- 连续故障熔断:当实例在上一个时间窗(默认1分钟)内,连续失败的请求数达到或者超过连续故障阈值(默认10个),实例会进入隔离状态。
- 熔断隔离时间:默认隔离30s,支持可配置。
Spring Cloud Tencent CircuitBreaker 结合 Polaris 的熔断能力提供了标准的熔断实现。
2、快速入门
1、引入 Spring Cloud Tencent Discovery 和 Spring Cloud Tencent Circuitbreaker 依赖
1、主调方和被调方都引入 Spring Cloud Tencent Discovery 依赖
因为熔断能力依赖服务发现能力,所以需要主调方和被调方都引入 Spring Cloud Tencent Discovery 依赖。
1、 引入 Spring Cloud Tencent Discovery Starter
xml
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
</dependency>
2、主调方引入 Spring Cloud Tencent Circuitbreaker 依赖
xml
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-circuitbreaker</artifactId>
</dependency>
2、增加 Spring Cloud Tencent Discovery Starter 的配置文件
- 在您的 bootstrap.yml 配置文件中加入以下配置内容
yaml
spring:
application:
name: ${application.name}
cloud:
polaris:
address: grpc://${修改为第一步部署的 Polaris 服务地址}:8091
namespace: default
loadbalancer:
configurations: polaris # 2020.0.x SDK需要添加这个配置
3、启动应用
应用成功启动后,到 Polaris 控制台查看服务注册信息。如下图所示:
4、验证
为了验证熔断能力,被调端至少启动两个实例。提供的 polaris-circuitbreaker-example 中 example-b
模拟正常的服务,example-b2
模拟异常的服务。
测试主调方向被调方发起服务调用,前几个请求会出现往有问题的服务发起调用,这时候会触发熔断,后面的请求都只会往正常的服务发起调用。
到此接入 Spring Cloud Tencent Circuitbreaker 即已完成。
3、调整熔断参数配置
Polaris 控制台提供了动态下发熔断配置的能力,如下图所示可以根据自身业务的实际场景调整参数。
注意:熔断规则需要配置在被调方的服务
4、配置列表
配置项Key | 默认值 | 是否必填 | 配置项说明 |
---|---|---|---|
spring.cloud.polaris.circuitbreaker.enabled | true | 否 | 是否开启故障熔断 |