服务熔断

最近更新时间:2020-01-16 10:36:50

操作场景

TSF 摒弃了已经不再继续维护的 Hystrix 断路器,采用官方推荐的 Resilience4J 作为底层实现。相比较原有单一的接口级别熔断,我们在此之上扩展成为:实例、API、服务级别熔断。同时,除了错误比率,TSF 也支持超时比率熔断,允许用户根据业务自行选择熔断配置。请配合 TSF 其他功能一起使用。

前提条件

开始实践服务熔断功能前,请确保已完成了 SDK 下载,同时请确保 SDK 版本高于1.19

操作步骤

说明:

步骤1和步骤2与其他模块相同,已经使用过其他模块的可直接跳至步骤3。

  1. 向工程中添加依赖
    pom.xml 中添加以下代码:
    <dependency>
     <groupId>com.tencent.tsf</groupId>
     <artifactId>spring-cloud-tsf-starter</artifactId>
     <version><!-- 调整为 SDK 最新版本号 --></version> 
    </dependency>
  2. 向 Application 类中添加注解 @EnableTsf
    // 下面省略了无关的代码
    @SpringBootApplication
    @EnableTsf
    public class ProviderApplication {
     public static void main(String[] args) {
         SpringApplication.run(ProviderApplication.class, args);
     }
    }
  3. 关闭 Hystrix
    使用 TSF 熔断功能需要将 Hystrix 关闭(默认是关闭的,如果之前有打开还请关闭)。相关的容错功能请参考 服务容错
    feign:
    hystrix:
     enabled: false
  4. 进行熔断配置
    目前支持两种方式的熔断配置:
    • 方式一:在线动态配置下发。 具体配置方法请参考 服务熔断使用方法
    • 方式二:本地静态配置(适合本地联调使用,如果线上使用会被在线配置覆盖,请谨慎使用),配置在 yaml 配置文件中。各个字段详细含义请参考 服务熔断使用方法
      #此处为namespaceId,若为本地联调,则保持一致即可。
      #线上环境不需要此字段
      tsf_namespace_id: default_namespace
      
      tsf:
       circuit-breaker:
         # 可以配置多条规则 
         rules:
           # 需要熔断的目标微服务名
           - targetServiceName: provider-demo
             # 熔断级别 API/SERVICE/INSTANCE
             isolationLevel: API
             # 目标熔断服务的namespaceId,如果本地联调,需与tsf_namespace_id保持一致
             targetNamespaceId: "default_namespace"
             # SERVICE和INSTANCE级别,只允许配置一个策略
             # API级别可以针对不同的API配置多个策略,也可以多个API配置一个策略
             strategyList:
                 # 滑动窗口大小
               - slidingWindowSize: 10
                 # 最小熔断请求数
                 minimumNumberOfCalls: 10
                 # 熔断错误比例
                 failureRateThreshold: 60
                 # 打开到半开状态的时间
                 waitDurationInOpenState: 5
                 # 最大熔断实例个数百分比
                 # 只在INSTANCE级别生效
                 maxEjectionPercent: 51
                 # 慢请求阈值,单位为ms
                 slowCallDurationThreshold: 60000
                 # 慢请求熔断比例
                 slowCallRateThreshold: 50
                 # 该策略作用的API,可以同时作用于多个API
                 apiList:
                   - method: GET
                     path: "/echo/{param}"
                   - method: GET
                     path: "/echo2/{str}"