a*****p 发帖数: 1285 | 1 如何design一个系统,确保每秒最多只处理1000个request。 data structure?
data structure应该用queue。但是具体怎么想呢。 |
C******l 发帖数: 64 | 2 Rate limiter? Token bucket? |
l***4 发帖数: 1788 | 3 见过类似的题,说用queue不行
【在 a*****p 的大作中提到】 : 如何design一个系统,确保每秒最多只处理1000个request。 data structure? : data structure应该用queue。但是具体怎么想呢。
|
x*****z 发帖数: 15 | 4 leaky bucket就行吧?求confirm |
l***4 发帖数: 1788 | 5 应该是正解
【在 x*****z 的大作中提到】 : leaky bucket就行吧?求confirm
|
a*****p 发帖数: 1285 | |
t**r 发帖数: 3428 | 7 leaky bucket用queue实现可以么?? |
a*****p 发帖数: 1285 | |
t**r 发帖数: 3428 | 9 rate = 5.0; // unit: messages
per = 8.0; // unit: seconds
allowance = rate; // unit: messages
last_check = now(); // floating-point, e.g. usec accuracy. Unit: seconds
when (message_received):
current = now();
time_passed = current - last_check;
last_check = current;
allowance += time_passed * (rate / per);
if (allowance > rate):
allowance = rate; // throttle
if (allowance < 1.0):
discard_message();
else:
forward_message();
allowance -= 1.0; |
a*****p 发帖数: 1285 | |
x*****z 发帖数: 15 | 11 Leaky bucket 就是个带时间记录的counter,具体可以看guava ratelimiter
:leaky bucket用queue实现可以么??
【在 t**r 的大作中提到】 : rate = 5.0; // unit: messages : per = 8.0; // unit: seconds : allowance = rate; // unit: messages : last_check = now(); // floating-point, e.g. usec accuracy. Unit: seconds : when (message_received): : current = now(); : time_passed = current - last_check; : last_check = current; : allowance += time_passed * (rate / per); : if (allowance > rate):
|
x*****z 发帖数: 15 | 12 Leaky bucket 就是个带时间记录的counter,具体可以看guava ratelimiter
:leaky bucket用queue实现可以么??
【在 t**r 的大作中提到】 : rate = 5.0; // unit: messages : per = 8.0; // unit: seconds : allowance = rate; // unit: messages : last_check = now(); // floating-point, e.g. usec accuracy. Unit: seconds : when (message_received): : current = now(); : time_passed = current - last_check; : last_check = current; : allowance += time_passed * (rate / per); : if (allowance > rate):
|