Files
SOP/doc/docs/files/10092_接口限流.md
tanghc 35ede71750 1.9.0
2019-05-22 11:20:48 +08:00

2.5 KiB
Raw Blame History

接口限流

SOP提供了简单的接口限流策略

  • 漏桶策略:每秒处理固定数量的请求,超出请求返回错误信息。
  • 令牌桶策略:每秒放置固定数量的令牌数,每个请求进来后先去拿令牌,拿到了令牌才能继续,拿不到则等候令牌重新生成了再拿。

如果一个接口设置了漏桶策略假设接口每秒可处理5个请求一秒内同时有6个请求进来前5个接口是能够访问的第六个请求将返回错误信息。

如果设置了令牌桶策略桶的容量是5那么每秒中生成5个令牌同一时间有6个请求进来那么前5个能成功拿到令牌继续第六个则等待令牌重新生成了再拿。

默认情况下接口的限流功能是关闭的可在sop admin中配置并开启。功能在路由管理-->限流管理下。

新版限流1.9.0

1.9.0将之前的限流进行了改造,新的限流支持更多的限流方式。之前只能针对某个接口限流,新版限流可以在路由ID接口、appKey、ip上进行限流。

  • 可针对接口进行限流,所有访问该接口的请求都被限流
  • 可针对appKey进行限流某个appKey请求过来后对他限流
  • 可针对IP进行限流某个IP请求过来后对他限流

此外还可以进行组合

  • 可针对接口+appKey进行限流这个appKey调用某个接口比较频繁可以将它限制住
  • 可针对接口+IP进行限流某个ip在频繁调用接口可以将它限制住

由于存在组合情况,一个接口可能会配置多个限流规则。在这种情况下会优先取排序值小的那一条,如果排序值一样,则默认取第一条。

假设有下面几个限流规则:

  • 接口:goods.get 排序值1 每秒可处理请求数10
  • 接口:goods.get appKeyxxxx 排序值0 每秒可处理请求数5
  • 接口:goods.get ip172.1.2.2 排序值2 每秒可处理请求数6

客户端调用接口:http://open.domain.com/api?method=goods.get&app_key=xxxx客户端IP为172.1.2.2

这种情况下上面三条限流规则都命中了,由于排序值小优先执行,因此第二条规则命中.

具体设置方式可在sop admin中配置功能在服务管理-->限流管理下。执行sop-test/src/test/java/com/gitee/sop/LimitDemoPostTest.java测试用例验证限流情况

限流配置

限流配置