StackExchange用のGoogleChrome拡張機能を作成しています。これは、評判を追跡し、StackExchangeサイトでコメントの通知を受け取ることができるシンプルな拡張機能です。
現在、自分では対処できない問題がいくつか発生しています。私の拡張機能は、バックエンドとしてGoogle App Engineを使用して、StackExchangeAPIへの外部リクエストを行います。単一サイトでの新しいコメントに対する拡張機能からの各単一クライアント要求により、非スキートユーザーに対しても応答を準備するためにAPIエンドポイントに多くの要求が発生する可能性があります。平均的なユーザーは、Stack Exchangeネットワークの少なくとも3つのサイトにアカウントを持っており、10を超えるサイトもあります。
Stack Exchange APIにはリクエスト制限が
あります。1つのIPアドレスは、1日あたり特定の数(10,000)のAPIリクエストしか作成できません。
単一のIPアドレスから5秒間に30を超えるリクエストを行うと、APIはリクエストを遮断します。
すべてのリクエストを5秒あたり30にスロットルする必要があることは明らかです。現在、memcachedを使用した分散ロックに基づくリクエストスロットルロジックを実装しています。memcachedを単純なロックマネージャーとして使用して、GAEインスタンスのアクティビティを調整し、UrlFetchリクエストを抑制しています。
しかし、このような強力なインフラストラクチャを制限して、5秒あたり30を超えるリクエストを発行しないようにすることは大きな失敗だと思います。このようなAPIリクエスト率では、新しくて便利で便利な機能の開発を続けることができず、いつの日か正しく機能しなくなります。
現在、私のアプリには90人のユーザーがいて成長しており、リクエスト率を最大化する方法を考え出す必要があります。
既知のとおり、App Engineは、異なるIPの同じプールを介して外部UrlFetchリクエストを作成します。私の目標は、リクエストスロットル機能を記述して、APIの利用規約に確実に準拠し、GAE分散機能を利用することです。
したがって、私の質問は、APIの使用条件に準拠し、GAE分散機能を利用しながら、実用的なAPIスループットを最大化する方法です。
別のプラットフォーム/ホスト/プロキシを使用するようにアドバイスすることは、私の頭の中では役に立たないだけです。