白话-HBase Quota V2
背景
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