Pigeon中的流量限制

在RPC框架中很重要的部分就是請求量的限制,每個機器能夠處理的請求數量是有上限的,所以設置一個能處理的上線,將不能處理的請求拒絕總是正確的。

請求類型

Pigeon中請求的處理是採用一個責任鏈的模式,Netty服務器中將接受的請求序列化成Request對象,然後拋到Pigeon的責任鏈中處理。Pigeon將請求分爲四個類型(參見ProviderProcessHandlerFactory)

業務邏輯 bizInvocationHandler

心跳檢查 heartBeatInvocationHandler

健康檢查 healthCheckInvocationHandler

心跳掃描 scannerHeartBeatInvocationHandler

處理流程

每一個handler通過一個filter列表爲構建參數創建


重點關注這裏的bizInvocationHandler,這個實例就是業務邏輯處理的主體。那麼本文要講的限流是如何實現的呢?

就是在GatewayProcessFilter內部

methodAppLimitMap //GatewayProcessFilter內部存儲每個method對應的請求上線
ProviderStatisticsHolder :  methodCapacityBuckets    存儲了每個method的請求量

當請求量大於限制時就會拋出異常

if (requests + 1 > limit) {
	throw new RejectedException(String.format("Max requests limit %s reached for request from app:%s", limit, fromApp));
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章