Реализация дросселирования запросов, совместимая с API Stack Exchange, в облачной инфраструктуре Google App Engine.

Я писал расширение Google Chrome для Stack Exchange . Это простое расширение, которое позволяет вам отслеживать свою репутацию и получать уведомления о комментариях на сайтах Stack Exchange.

В настоящее время я столкнулся с некоторыми проблемами, с которыми не могу справиться сам. Мое расширение использует Google App Engine в качестве серверной части для выполнения внешних запросов к Stack Exchange API. Каждый отдельный клиентский запрос от расширения для новых комментариев на одном сайте может вызвать множество запросов к конечной точке api для подготовки ответа даже для нестандартного пользователя. Средний пользователь имеет учетные записи как минимум на 3 сайтах из сети Stack Exchange, у некоторых их более 10!

API Stack Exchange имеет ограничения на количество запросов:
Один IP-адрес может выполнять только определенное количество запросов API в день (10 000).
API отключит мои запросы, если я сделаю более 30 запросов за 5 секунд с одного IP-адреса.

Понятно, что все запросы должны быть ограничены до 30 за 5 секунд, и в настоящее время я реализовал логику ограничения запросов на основе распределенная блокировка с memcached. Я использую memcached как простой менеджер блокировок для координации активности экземпляров GAE и ограничения запросов UrlFetch.
Но я думаю, что это большая ошибка - ограничить такую ​​мощную инфраструктуру выдачей не более 30 запросов в 5 секунд. Такая частота запросов api не позволяет мне продолжать разработку новых интересных и полезных функций, и однажды он вообще перестанет работать должным образом.
Сейчас у моего приложения 90 пользователей, и он растет, и мне нужно найти решение, как максимизировать частоту запросов.

Как известно, App Engine выполняет внешние запросы UrlFetch через тот же пул с разными IP-адресами. Моя цель - написать функцию дросселирования запросов, чтобы обеспечить соответствие условиям использования API и использовать распределенные возможности GAE.

Мой вопрос заключается в том, как обеспечить максимальную практическую пропускную способность API, соблюдая условия использования API и используя распределенный GAE. возможности.

Советовать использовать другую платформу / хост / прокси просто бесполезно на мой взгляд.

8
задан Community 13 April 2017 в 12:25
поделиться