Skip to content

bulkhead client

liubao edited this page Aug 17, 2022 · 1 revision

客户端隔离仓

客户端隔离仓限制某个实例正在处理的请求数。

Spring Cloud Huawei的客户端隔离仓可以用下图表示,治理策略配置在consumer。

            请求
consumer ----Thread1--REST----Y---> provider(instance1)
               <-------Y---
         ----Thread2--REST----Y---> provider(instance1)
               <-------Y---
         ----Thread3--REST----X     provider(instance1)
               <-------X---
         ----Thread1--REST----Y---> provider(instance1)
               <-------Y---
         ----Thread2--REST----Y---> provider(instance1)
               <-------Y---
         ----Thread3--REST----X     provider(instance1)
               <-------X---

客户端熔断的主要目的是防止一个实例的请求超时,导致所有的线程资源被这个实例占用,导致系统性故障。

配置客户端隔离仓策略

servicecomb:
  matchGroup:
    allOperation: |
      matches:
        - apiPath:
            prefix: "/"
  instanceBulkhead:
    ## 隔离仓限制正在处理的请求数为20个,新来的请求等待1000毫秒没有获取到
    ## 许可,将被拒绝。
    allOperation: |
      maxConcurrentCalls: 20
      maxWaitDuration: 1000

上述配置限制发往某个实例的最大正在处理请求数是20,如果超过,这些请求会等待1000毫秒获取许可,得到许可后会继续处理,否则直接拒绝返回失败。

可以针对不同的微服务设置差异化的隔离仓策略:

servicecomb:
  matchGroup:
    privderAllOperation: |
      matches:
        - apiPath:
            prefix: "/"
          serviceName: provider
  instanceBulkhead:
    privderAllOperation: |
      maxConcurrentCalls: 20
      maxWaitDuration: 1000

上述配置的隔离仓应用于consumer调用provider的情况。调用其他服务端的时候,不会生效。

Spring Cloud Gateway

可以在 Spring Cloud Gateway 使用客户端隔离仓。

注意事项

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

客户端隔离仓是针对某个实例上面的业务,即如果这个实例访问该业务错误率超过限制,那么不再访问这个实例。 如果其他实例该业务仍然可用,那么可以继续访问其他实例的接口。

Clone this wiki locally