背景
Quota背景:當請求量異常大,會造成RegionServer不穩定
所以需要控制RegionServer單位時間執行的流量
設置Quota的命令,目前設置的LIMIT語義都是 (單個RegionServer上可以給這個user/table/namespace的請求量,而不是整個集羣/整個表/整個namespace的)
|
配置的維度 |
limit限制的類型 |
請求Size還是請求的次數 |
單位時間 |
---|---|---|---|
NAMESPACE USER TABLE USER+NAMESPACE USER+TABLE |
READ WRITE READ+WRITE |
請求次數:req 請求Size:B, K, M, G, T, P |
sec, min, hour, day |
相關配置
|
HBase Quota觸發整體流程
1.策略是在RegionServer上具體執行的
2.Quota元數據表
每個設置會對應RegionServer中的一個RateLimiter
設置的語義:每個RegionServer上,這個表對應的region,單位時間可以處理的流量
翻譯:如果T1表分佈在10臺機器上,set_quota設置的THROTTLE_TYPE => WRITE, TABLE => 'T1', LIMIT => '10M/sec' 說明每臺機器對應的這個表寫入流量都是10M/s)
RateLimiter
AverageIntervalRateLimiter
-
refill:重新充填時間
-
checkQuota --> canExecute
-
refill方法: 返回按已流失時間計算出來的可用量delta
-
avail = avail + delta;
-
如果avail不夠用了就報異常,最終返回給客戶端;(avail < 本次實際請求量 return false;)
-
-
consume : 消耗 avail
FixedIntervalRateLimiter
-
refill 每次返回delta都== limit