[ ]
宙飒天下 流量控制
流量控制用来对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
还没有评论,来说两句吧...