Skip to content

circuit breaker client

chengyouling edited this page Mar 12, 2024 · 7 revisions

客户端熔断

客户端熔断也被称为实例隔离。在客户端请求服务端的某个实例多次失败以后,后续请求不再访问这个实例。

Spring Cloud Huawei的客户端熔断可以用下图表示:

            请求
consumer ------REST----X---> provider(instance1)
               <-------X---
         ------REST----X---> provider(instance1)
               <-------X---
         ------REST----Y---> provider(instance2)
               <-------Y---
         ------REST----Y---> provider(instance2)
               <-------Y---
         ------REST----Y---> provider(instance2)
               <-------Y---

客户端熔断在无损升级等场景被广泛使用。在升级场景,由于客户端无法及时感知服务端的实例下线,会存在 短暂的服务调用失败。客户端熔断通常会搭配客户端重试来达到无损升级的目的。

配置客户端熔断策略

servicecomb:
  matchGroup:
    AllOperation: |
      matches:
        - apiPath:
            prefix: "/"
  instanceIsolation:
    AllOperation: |
      minimumNumberOfCalls: 10
      slidingWindowSize: 10
      slidingWindowType: COUNT_BASED
      failureRateThreshold: 20

上述配置对所有实例启用了客户端熔断策略。 该策略采用COUNT_BASED滑动窗口策略,窗口大小为10个请求,到达 10个请求的时候,开始计算错误率,如果错误率达到20%,就会对后续请求进行熔断。默认的滑动窗口策略是 TIME_BASED。

可以针对不同的微服务设置差异化的熔断策略:

servicecomb:
  matchGroup:
    PrivderAllOperation: |
      matches:
        - apiPath:
            prefix: "/"
          serviceName: privder
  instanceIsolation:
    PrivderAllOperation: |
      minimumNumberOfCalls: 10
      slidingWindowSize: 10
      slidingWindowType: COUNT_BASED
      failureRateThreshold: 20

上述配置的熔断策略应用于consumer调用provider的情况。调用其他服务端的时候,不会生效。

Spring Cloud Gateway

可以在 Spring Cloud Gateway 使用客户端熔断策略。

客户端熔断其他参数及其默认值

servicecomb:
  instanceIsolation:
    PrivderAllOperation: |
      minimumNumberOfCalls: 100
      slidingWindowSize: 100
      slidingWindowType: TIME_BASED
      failureRateThreshold: 50
      slowCallRateThreshold: 100
      waitDurationInOpenState: 60000
      slowCallDurationThreshold: 60000
      recordFailureStatus:
        - 502
        - 503
      permittedNumberOfCallsInHalfOpenState: 10
      forceClosed: false
      forceOpen: false

错误检查方式

可以配置 recordFailureStatus 来指定错误, 也可以通过自定义 AbstractInstanceIsolationExtension 覆盖默认的 SpringCloudInstanceIsolationExtension 来定制错误异常检查机制。 默认的错误类型主要包括 代表网络错误的异常,比如ConnectionException等。

注意事项

版本要求:1.10.11-2021.0.x及以上版本。

集成Spring Cloud Huawei以后,默认集成了客户端熔断模块 spring-cloud-starter-huawei-governance, 只需要通过配置开启具体的客户端熔断策略。

客户端熔断是针对某个实例上面的业务,即如果这个实例访问该业务错误率超过限制,那么不再访问这个实例,如果该业务其他实例该仍然可用, 那么可以继续访问其他实例的接口;当该业务的所有实例均被隔离时,将不作隔离处理,继续访问其中一个实例。

Clone this wiki locally