Внедрение ограничения масштабируемой скорости - получите точные значения, сохраняя постоянство - PullRequest
0 голосов
/ 31 мая 2019

Я изучаю разработку алгоритма ограничения масштабируемой скорости с использованием алгоритма скользящего окна. Я хочу сделать ограничение скорости отказоустойчивым, а также распределенным (масштабируемым).

Один из подходов заключается в том, что каждый сервер может иметь локальный счетчик, который будет периодически сбрасываться в постоянное хранилище, как указано в https://konghq.com/blog/how-to-design-a-scalable-rate-limiting-algorithm/ - (Оптимизация для повышения производительности).

скажем, у каждого узла есть локальный кеш, который будет периодически сбрасываться в постоянное хранилище по вашему выбору.

Как будут точными результаты общего числа запросов / интервалов?

Ex: Let's say we allow 15 requests in 10 minutes and flushing interval is about every 2 minutes.
   Server1 saw 5 requests for userA from 1-3 minutes.
   Server2 saw 4 requests for userA from 3-5 minutes.
    .. All these will be flushed to persistent store at max by 7th min.
   Server1 saw 7 requests from userA between 8-10 minutes. -(A)
   Server2 saw 3 requests from userA between 8-10 minutes. -(B)

   in (A) scenario, Server1 will be seeing total of 5+4+7=16 requests in total. So, last request will be rejected since it exceeds limit.
   in (B) scenario, Server2 will be seeing total of 5+4+3=12 requests.
 This is because server1's local count of 7 wasn't flushed to persistent-store yet.

Итак, мой вопрос о том, как алгоритм ограничения скорости может быть точным, делая его отказоустойчивым и масштабируемым? Любые предложения для решения этой проблемы? Цените любые входные данные.

...