2017-05-29 3 views
0

私はGoogle Search Analyticsサーバーに多くのクエリを行うプログラムを持っています。私のプログラムでは、順番に問合せを実行するので、各瞬間に1つの問合せしか処理されません。プログラムでサーバーのスループットのクォータを処理する方法は?

  1. 2000ことが知られて:

    Googleは高々ので、私は心の上に2つのアイデアを持ってそれができる、より効率的になるように、私のシステムを構成する各100秒あたり2000個のクエリのスループットの制限について助言しています100秒あたりのクエリは0.05秒ごとに1つのクエリですが、プロセスをスリープ状態にしてクエリを分割していますが、クエリが0.05秒未満の場合のみプロセスがスリープする時間が残りの時間です0.05秒間隔。クエリに0.05秒以上かかる場合は、待機せずに次のトリガをトリガします。

  2. 2番目のアイデアは実装が簡単ですが効率が悪いと思われます。プロセスが開始される時刻を記録するクエリをトリガーします.100秒前に2000クエリに達したら、残りの時間は眠っている。

これまでのところ、どれが最適かを測定する方法はわかりません。

あなたはどちらのオプションについてあなたの意見ですか?それらのいずれかがより良い理由は何ですか?私が考え出したオプションはありませんか? (特に鉱山よりも良い場合)

答えて

1

実際に考慮すべきことは、100秒あたりの2000回の要求です。しかし、あなたは10秒で2000回のリクエストをすべてやり、引き続きクォータの良いところにいることができます。

私はあなたがそれについて心配している理由について興味があります。あなたは、次のいずれかのエラーを取得する場合

  • 403は
  • 403はRESOURCE_EXHAUSTED
  • 429をrateLimitExceeded userRateLimitExceeded

    Googleはちょうどあなたがあなたの要求のために眠っているエラーを取得することで構成されていExponential backoffを実装することをお勧めしますもう一度試してみてください。 (これを8回まで行う)。 Googleでは、これらのエラーが発生した場合には、もう一度お試しください。

    あなたが夢中になりたいのであれば、私がC#アプリケーションでやったようなことをすることができます。最後の100リクエストを作成してからどれくらいの時間が経過したかを追跡するリクエストキューを作成しました。私はそれをGoogle APIs Flood Busterと呼ぶ。

    基本的には、私は新しいリクエストをする前に各リクエストを記録しているキューを持っています。私が始めてからどれくらいの時間が経過しているかを確認します。はい、キューの周りの項目を少し動かす必要があります。もし90秒以上過ごしてしまったら、私は寝る(100時間後)、これは私のエラーを大幅に減らしました。その完璧ではないが、それはGoogleがあなたのクォータを追跡することに関して完璧ではないためです。彼らは通常少しだけオフです。

  • +1

    素晴らしい質問、直接ターゲットでは、より具体的にすることはできません。 403 userRateLimitExceededは私が処理していたエラーでした。私はそれを管理するために推奨されるアルゴリズムについて気づいていません。間違いなく私はその解決策をとるだろう(そして、私はあなたのプロジェクトのリンクに感謝している。 – Arcones

    関連する問題