POP产品白皮书

可配置的用户调用Openapi单位时间内的调用量,目的在于保护后端服务,防止单用户过度占有API流量资源。

3.4.1 流控原理

POP流量控制是基于jvm缓存+tair实现,Tair中的的流控阀值会分配到每台POP服务器,用户请求时POP对比jvm缓存确认确认调用数量是否超过流控值,校验通过则访问次数+1,并异步调用Tair重新分配流控制。达到全局流控的目的,并减少了大访问量对POP心性能损耗。(缺点:会造成流量控制存在误差,测试结果表示误差在可接受范围)

3.4.2 流控类型

 API+用户流控:某个用户在单位时间内调用某个API的调用次数控;  API流控:API级别流量控制,即某个API在单位时间内的调用次数控制; 说明:本期流控不支持例外设置;

3.4.3 流控粒度

  1. 分钟:每分钟用户可调用的次数;
  2. 小时:每小时用户可调用的次数;

POP自有的统计时间,不以用户第一次调用计算, 如:
     02:00流控生效;
     流控为每分钟1000次;
    用户在02:00:30时调用;

则用户在剩余02:00:30到02:01可调用接口1000次;

3.4.4 关于误差

由于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%

3.4.5 关于性能

POP流控判断的本地缓存,性能影响很小,测试结果表明,流控增加后POP损耗为0-2ms,整体损耗为10-12ms。具体情况可参照《流控测试报告》。

3.4.6 错误码

用户调用超过流控阀值时,错误提示:Throttling.User 、Throttling.API,具体可参照:《系统级错误码表》。