白話-HBase Quota V2

背景

Quota背景:當請求量異常大,會造成RegionServer不穩定

所以需要控制RegionServer單位時間執行的流量

 

設置Quota的命令,目前設置的LIMIT語義都是 (單個RegionServer上可以給這個user/table/namespace的請求量,而不是整個集羣/整個表/整個namespace的)

//設置Quota

hbase> set_quota TYPE => THROTTLE, USER => 'u1', TABLE => 't2', LIMIT => '5K/min'

 

 

//取消Quota命令

hbase> set_quota TYPE => THROTTLE, USER => 'u1', LIMIT => NONE

配置的維度

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

 

相關配置

<property>

    <name>hbase.quota.enabled</name>

    <value>true</value>

</property>

<property>

    <name>hbase.quota.rate.limiter</name>

    <value>org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter</value>

</property>

 

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

  1. refill:重新充填時間
  2. checkQuota  --> canExecute
    1. refill方法: 返回按已流失時間計算出來的可用量delta
    2. avail = avail + delta;
    3. 如果avail不夠用了就報異常,最終返回給客戶端;(avail < 本次實際請求量 return false;)
      
  3. consume : 消耗 avail

FixedIntervalRateLimiter

  1. refill 每次返回delta都== limit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章