流量控制

流量控制用来对gateway接收到的请求进行限流操作,避免对后端服务或gateway本身造成过大的压力,保证服务的正常运行。

流量控制由多个流量控制器controller组成,每个controller对特定目标进行控制,多个controller以树形结构组合在一起,级联进行控制,即只有父节点有控制权时子节点才参与控制。

每个controller采用令牌发放的方式进行控制,令牌桶按一定的速率生成令牌,经过该控制器的请求必须拿到令牌后才可以向下流转,否则等待,等待超过一定时间后返回服务不可用错误。

流量控制功能示例如下图所示:

图中结构仅用于示范,真实场景下不一定需要一个单一的总控父节点,即可以是平行的多级节点,节点下可用继续挂载一颗树形控制器。

对于下面的配置, 流控控制器concurrentWY, targetExpression 为${reqA}, 每次请求都会首先解析该表达式, 假如A类请求解析表达式后, 得到值 001, B类请求解析表达式得到值 002 , 则对A类请求每秒20发放令牌 , 对B类请求同样每秒发放20令牌, 假如C类请求解析表达式获取到的值也为001, 则对于C类请求和A类请求每秒一共发放20令牌.

flow#gateway_service:
  clearPayloadWhenExceptionOccur: false
  sort: 0
  values:

- id: flow_service_controller
  sort: 0
  matcher: ${path}<>*wsdl
  targetExpression: ${gateway_consumer_subModuleId}/${gateway_module}/${gateway_service_name}
  permitsMap:
    pelec/nps/checkBpPer: 1000
    permer/nps/queryBpCheckIdentity: 10000
  name: 流量控制-服务维度
  permits: 1000
  maxWaitTime: 10
  available: true
  type: default
    skipWhenExceptionOccur: true
    name: 流量控制-服务维度
    recordExecuteTime: false
    available: false
    inbound: true
    pipeType: direct
    type: default

如果请求速度超过令牌发放速度, 并且在队列中等待时间超过 maxWaitTime 值时, 会报流控限制的错 service now is not available because time is out in the flow limit operation

配置说明

Copyright © 民生科技有限公司 2019 all right reserved,powered by Gitbook联系方式: wanglihang@mskj.com
修订时间: 2019-09-03 17:48:17

results matching ""

    No results matching ""