1

私は Python で大きなスレッド化されたフィード取得スクリプトを持っています。

私の質問は、どのホストにも頻繁にヒットしないように、送信リクエストの負荷を分散するにはどうすればよいですか?

これは feedburner にとって大きな問題です。大部分のサイトが feedburner を介して RSS をプロキシし、問題をさらに複雑にするために、多くのサイトが自分のドメインのサブドメインを feedburner にエイリアスして、それを使用しているという事実を不明瞭にします (例: "mysite") RSS URL を feeds.mysite.com/mysite に設定します。ここで、feeds.mysite.com は feedburner にバウンスします)。時々、しばらくブロックされ、「自動リクエスト」エラーページにリダイレクトされます。

4

3 に答える 3

3

おそらく、1 回限りのリクエストを行う必要があります (1 週間または 1 か月ごとなど、適切な頻度で)。フィードごとに、リダイレクトに従って「真の」アドレスを取得します。その時のスロットリング状況に関係なく、すべてのフィードを解決し、そのデータを保存してから、リストに追加する新しいフィードごとに 1 回だけ実行できるはずです。urllib の geturl()を見ると、入力した URL から最終的な URL が返されます。フィードに ping を実行するときは、ユーザーがフィードを移動した場合などに適切にリダイレクトされるように、必ず元のフィードを使用してください (負荷分散のためだけに「本物」を保持してください)。

それが完了したら、特定のドメインに対して 1 時間あたり X リクエストのみ、各フィードを通過し、ホストが制限に達したフィードをスキップするなどの負荷メカニズムを簡単に考案できます。feedburner が制限を公開している場合 (可能性は低い)、それを X に使用できますが、それ以外の場合は、それを見積もり、制限を下回っていることがわかっている大まかな見積もりを作成する必要があります。ただし、グーグルを知っていると、それらの制限はパターンを測定し、特定のハード制限を持たない場合があります。

編集:コメントからの提案を追加しました。

于 2009-12-01T15:52:37.363 に答える
2

問題が Feedburner の「スロットリング」に関連している場合は、ボットのソース IP が原因であることが最も確実です。「Feedburner への負荷分散」の方法は、複数の異なるソース IP から開始することです。

現在、これを達成する方法は数多くありますが、そのうちの 2 つは次のとおりです。

  1. マルチホーム サーバー: 同じマシン上の複数の IP
  2. 複数のディスクリート マシン

もちろん、今すぐ彼らの前に NAT ボックスを置いてはいけません ;-)


上記は、「スケジューリング部分」のために、考えられる「スロットリングの問題」を処理します。「宛先」ごとに「仮想スケジューラ」を維持し、問題の Web サービス (Feedburner など) のパラメータを超えないようにする必要があります。さて、トリッキーな部分は、これらの「制限」を把握することです...宣伝されている場合もあれば、実験的に把握する必要がある場合もあります。

これが「高レベルのアーキテクチャのガイドライン」であることは理解していますが、これをコーディングする準備ができていません...許してください;-)

于 2009-12-01T15:45:59.547 に答える
1

「どのホストにも頻繁にヒットしないように、送信リクエストの負荷を分散するにはどうすればよいですか?」

通常、これはより優れたアルゴリズムを設計することによって行います。

たとえば、リクエストをランダムにスクランブルします。

または、それらを「かなり」シャッフルして、ソースをラウンドロビンします。これは、各ホストから 1 つの要求をデキューするキューの単純なリストになります。

于 2009-12-01T15:50:32.617 に答える