c***a 发帖数: 364 | 1 说起来惭愧,其实我答得不好,不过还是报一报,简单的话大家别见笑。
就是一个Web Server,接受来自不同IP的访问,如果来自某一个IP的访问量大于某一个
值(比如1000个每分钟)的话就False,小于就是True。输入是IP和timeInSecond。
我开始是想有一个counter叫hit,在每一个新的hit到来的时候就更新一下,但是为了
节省内存,不能存储很多timestamp。我面试的时候是有点紧张,implement得不好。后
来想想可以这样做。记录上一次的timeInSecond,如果本次timeInSecond的差值在一分
钟以内的话,就增加一个hit的计数,如果这个计数大于1000个,就返回False,小于就
True。如果差值超过一分钟的话,就把hit归1。
但是我觉得这样也有漏洞的,因为理想状态下的话,hit也是可以递减的。怎样能让hit
准确记录前一分钟的值,又不占用太多的内存呢?不知道大家有没有更好的办法。 |
z*********8 发帖数: 2070 | |
c***a 发帖数: 364 | |
s***c 发帖数: 639 | 4 没太看明白,是要设计rate limiter吗
hit
【在 c***a 的大作中提到】 : 说起来惭愧,其实我答得不好,不过还是报一报,简单的话大家别见笑。 : 就是一个Web Server,接受来自不同IP的访问,如果来自某一个IP的访问量大于某一个 : 值(比如1000个每分钟)的话就False,小于就是True。输入是IP和timeInSecond。 : 我开始是想有一个counter叫hit,在每一个新的hit到来的时候就更新一下,但是为了 : 节省内存,不能存储很多timestamp。我面试的时候是有点紧张,implement得不好。后 : 来想想可以这样做。记录上一次的timeInSecond,如果本次timeInSecond的差值在一分 : 钟以内的话,就增加一个hit的计数,如果这个计数大于1000个,就返回False,小于就 : True。如果差值超过一分钟的话,就把hit归1。 : 但是我觉得这样也有漏洞的,因为理想状态下的话,hit也是可以递减的。怎样能让hit : 准确记录前一分钟的值,又不占用太多的内存呢?不知道大家有没有更好的办法。
|
r********g 发帖数: 219 | |
r*******y 发帖数: 270 | 6 这东西叫rate limiter,在公司里是非常常见的,解决方法很多,你搜搜吧 |