Предложения алгоритма ограничения скорости для данного сценария

Каков наилучший механизм для реализации нижеприведенных вариантов ограничения скорости. Можно использовать общие алгоритмы, такие как Token Bucket, но я хочу, чтобы реализация находилась в контексте memcached. Ценю помощь по этому вопросу.

  • разрешить только 100 звонков от клиента ABC в день.
  • разрешить только 50 звонков API для клиента ABC в час.
  • Разрешить только 5 звонков API для клиента ABC для любого ИД пользователя в час.

2 ответа

Что вы хотите, чтобы когда этот предел был достигнут? Вы можете запретить обслуживание или перенаправить на страницу возврата завтра, но это довольно уродливо.

Вы можете замедлить скорость обработки их запросов, но это более полезно для скорости в несколько секунд в секунду. например, клиент ABC ограничен до 100 в секунду или в минуту. Из-за очень низких тарифов, о которых вы говорите, клиент будет время ожидания и думать, что сервер мертв.

Если я правильно понимаю, каждый запрос API идет с идентификатором пользователя и клиентом. Каждый клиент может иметь несколько идентификаторов пользователей. Вы хотите оценить ограничение как на уровне клиента, так и на уровне идентификатора пользователя.

Вам нужно будет использовать несколько ключей ABC_day, ABC_hour, ABC_userID1_hour, ABC_userID2_hour и т. Д., Чтобы подсчитать, сколько раз происходили эти действия. Проблема с этим подходом заключается в том, когда нужно сбросить эти счетчики. Поскольку memcached поддерживает только оператор приращения для числовых значений, нам нужно закодировать эту информацию в самом ключе. Мы можем использовать ABC_2012_02_28 в качестве ключа для ограничения дневной ставки. В вашем коде просто создайте ключ, используя текущую дату, и увеличивайте ее. Когда день изменится, ваш код будет искать ABC_2012_02_29, который не существует и дает вам возможность создать новый ключ.

Альтернатива кешизму. Это кеш как memcached и поддерживает протокол memcached и предоставляет скрипты "в кеше". Вместо того, чтобы создавать так много ключей, вы можете реализовать свой собственный объект "ограничения скорости", который сделает всю эту бухгалтерию за вас. См. http://chakpak.blogspot.in/2011/09/rate-limitingquota-with-cacheismo.html для примера реализации ограничения скорости. Вы можете получить это отсюда. https://github.com/iamrohit/cacheismo.

Другие вопросы по тегам