这里行为的主体有两种,一是单个主体,比如一个接口,限制其每单位时间内调用次数。二是有多个独立的主体,比如不同用户,限制用户每单位时间内执行某个操作的次数。
对于前者,有诸如 token-bucket 之类的算法。
对于后者,怎么实现比较好呢?
1
gamexg 2018-08-19 17:51:36 +08:00
kv 数据库,
key: 接口名称_分钟_用户 id value: 调用次数 |
3
p2pCoder 2018-08-19 18:06:49 +08:00 via Android
用 redis 做限流就可以了
如果是 spring cloud,用 zuul 写个 filter 可以全局管理 dubbo 可以设置个限流的 filter,阿里最近开源了一个也可以 针对特定用户的操作也差不多,多一个 uid 就行 |
4
gamexg 2018-08-19 19:01:14 +08:00 via Android
@d18 key 自带时间,例如频率限制是每分钟 xx 次,那么 key 就带上 unix 时间戳 /60,读取时也带着这个这个。
|
5
scnace 2018-08-19 19:04:14 +08:00 via Android
关键字 ratelimit
|