可配置的用户调用Openapi单位时间内的调用量,目的在于保护后端服务,防止单用户过度占有API流量资源。
POP流量控制是基于jvm缓存+tair实现,Tair中的的流控阀值会分配到每台POP服务器,用户请求时POP对比jvm缓存确认确认调用数量是否超过流控值,校验通过则访问次数+1,并异步调用Tair重新分配流控制。达到全局流控的目的,并减少了大访问量对POP心性能损耗。(缺点:会造成流量控制存在误差,测试结果表示误差在可接受范围)
API+用户流控:某个用户在单位时间内调用某个API的调用次数控; API流控:API级别流量控制,即某个API在单位时间内的调用次数控制; 说明:本期流控不支持例外设置;
POP自有的统计时间,不以用户第一次调用计算,
如:
02:00流控生效;
流控为每分钟1000次;
用户在02:00:30时调用;
则用户在剩余02:00:30到02:01可调用接口1000次;
由于pop流控时间段、jvm与tair异步交换数据,流量控制存在一定误差,经测试阀值越高,误差越小,总体来看误差在可接范围。具体情况可参照《流控测试报告》。
测试项目 | 流控限额 | 成功次数 | 误差 | 误差率 |
---|---|---|---|---|
API流控 | 100 | 136 | 36 | 36% |
API流控 | 1k | 1049 | 49 | 4.9% |
API流控 | 1w | 10164 | 164 | 1.64% |
API流控 | 10w | 99967 | 33 | 0.033% |
USER流控 | 100 | 159 | 59 | 59% |
USER流控 | 1000 | 1214 | 214 | 2.14% |
USER流控 | 1w | 10253 | 253 | 2.53% |
USER流控 | 10w | 100179 | 179 | 0.179% |
API+USER流控 | API总额1w | 5240 | 760 | 7.6% |
API+USER流控 | API总额10w | 100361 | 361 | 0.361% |
POP流控判断的本地缓存,性能影响很小,测试结果表明,流控增加后POP损耗为0-2ms,整体损耗为10-12ms。具体情况可参照《流控测试报告》。
用户调用超过流控阀值时,错误提示:Throttling.User 、Throttling.API,具体可参照:《系统级错误码表》。