流量控制
流量控制用來(lái)對gateway接收到(dào)的(de)請求進行限流操作,避免對後端服務或gateway本身造成過大(dà)的(de)壓力,保證服務的(de)正常運行。
流量控制由多個(gè)流量控制器controller組成,每個(gè)controller對特定目标進行控制,多個(gè)controller以(yǐ)樹形結構組合在(zài)一(yī / yì /yí)起,級聯進行控制,即隻有父節點有控制權時(shí)子(zǐ)節點才參與控制。
每個(gè)controller采用令牌發放的(de)方式進行控制,令牌桶按一(yī / yì /yí)定的(de)速率生成令牌,經過該控制器的(de)請求必須拿到(dào)令牌後才可以(yǐ)向下流轉,否則等待,等待超過一(yī / yì /yí)定時(shí)間後返回服務不(bù)可用錯誤。
流量控制功能示例如下图所示:
图中結構僅用于(yú)示範,真實場景下不(bù)一(yī / yì /yí)定需要(yào / yāo)一(yī / yì /yí)個(gè)單一(yī / yì /yí)的(de)總控父節點,即可以(yǐ)是(shì)平行的(de)多級節點,節點下可用繼續挂載一(yī / yì /yí)顆樹形控制器。
對于(yú)下面的(de)配置, 流控控制器concurrentWY, targetExpression 爲(wéi / wèi)${reqA}, 每次請求都會首先解析該表達式, 假如A類請求解析表達式後, 得到(dào)值 001, B類請求解析表達式得到(dào)值 002 , 則對A類請求每秒20發放令牌 , 對B類請求同樣每秒發放20令牌, 假如C類請求解析表達式獲取到(dào)的(de)值也(yě)爲(wéi / wèi)001, 則對于(yú)C類請求和(hé / huò)A類請求每秒一(yī / yì /yí)共發放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
如果請求速度超過令牌發放速度, 并且在(zài)隊列中等待時(shí)間超過 maxWaitTime 值時(shí), 會報流控限制的(de)錯 service now is not available because time is out in the flow limit operation
配置說(shuō)明