Реализация стека Exchange, совместимого с API, в инфраструктуре Google App Engine Cloud - PullRequest
8 голосов
/ 16 октября 2010

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

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

API стека 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.

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

Ответы [ 2 ]

4 голосов
/ 17 октября 2010

Если вы ищете способ программного управления общим пулом IP-адресов Google App Engine, я твердо верю, что вам не повезло.

В любом случае, цитируя этот совет, который является частью faq , Я думаю, что у вас больше, чем шанс, запустить свое удивительное приложение :

Что мне делать, если мне нужно больше запросов в день?

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

EDIT:
Я был неправ, на самом деле у вас нет шансов.
Google App Engine [приложения] обречены .

2 голосов
/ 16 октября 2010

Во-первых, я использую ваше расширение, и оно качается!

Рассматривали ли вы использование memcached и кэширование результатов?
Вместо того, чтобы напрямую получать результаты из API, попробуйте сначала найти их в кеше, если они его используют, а если нет - извлекать их и кэшировать, а срок действия истекает через X минут.

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

...