Комментарии
3
Между прочим, у Nginx есть встроенный лимитер запросов https://nginx.org/ru/docs/http/ngx_http_limit_req_module.html
Когда-то писал троттлинг вызовов на Python
import time
def rate_throttle(key, rate, d={}):
current = time.monotonic()
last = d.get(key, 0)
elapsed = current - last
sleep = 0
if rate > elapsed > 0:
sleep = rate - elapsed
d[key] = current + sleep
return sleep
for i in range(5):
# No more 5 requests per 1 second
time.sleep(rate_throttle('', 1/5))
print('Faster', i)
for i in range(5):
# No more 1 request per 2 second
time.sleep(rate_throttle('', 2/1))
print('Slower', i)
Спасибо за статью. У соседей-функциональщиков уже есть GenStage, «разогнанный» до безобразия :)
Лучше везде перевести указанный алгоритм именно как "протекающее ведро". Течь ведро не может, но может протекать. К тому же, "текущее" по умолчанию наводит на значение "конкретное", как текущий элемент в коллекции.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.
Рейт лимиты с помощью Python и Redis