-1

背景:各リクエストにかなりの量の計算が含まれる Web サービスを実行しています (クアッドコア マシンでは最大 10 秒)。

各リクエストは、約 150 の独立した (同じくらい小さい) サブタスクに分割できます。

私が求めているもの:この種の要求をスケーラブルな方法で効率的に処理できるホスティング サービスを探しています。

私が検討したこと: Google App Engine と Rackspace について調べました。

あたかも GAE が単純な要求を意図しているかのように私には思えます。Rackspace のようなものの問題は、必要な vCPU の数を前もって知ることができないことです (そして、将来のスパイクがどれほど大きくなるかを知っていたとしても、たとえば 40 台のサーバーが残りのサーバーをアイドリング状態にしているのを見たくはありません)。時間)

質問:

  1. 次のように GAE を使用することは可能でしょうか。

    1. リクエストごとに、150 のサブタスクに分割します

    2. 同じ webapp に対して 150 の同時 HTTP 要求を実行することにより、すべてのサブタスクを個別に処理します (ただし、異なる方法を使用します)。

    3. 「サブリザルト」から結果を収集し、元のリクエストに対するレスポンスを返します。

  2. Map Reduce for GAE が役立つ可能性はありますか?

  3. このタスクに適した他のサービスはありますか?

4

2 に答える 2

0

これらの 150 のサブタスクがすべて読み取り専用のアクティビティでない限り、それらすべてを 1 つのスレッドで実行しようとするのは安全ではありません。Web 要求は信頼できません。ユーザーはキャンセルしたり、時間がかかりすぎる場合は [更新] をクリックしたり、途中でウィンドウを閉じたり、ネットワークの問題でタイムアウトになったりする可能性があります。同様に、バックグラウンドの HTTP リクエストにも、さまざまな問題が発生する可能性があります。標準的な解決策は、フロントエンド コードで実行する必要があることのリストを単純に作成することです。これにより、ユーザーにすばやく応答し、バックエンドの「ワーカー」プロセスで (信頼できない可能性がある) サブタスクを処理できます。 . アプリケーションの動作によっては、ユーザーを「作業中」の画面 (航空運賃の検索など) に戻して安全に移動できる場合があります。結果が出るのを待つか、「保留中」のジョブ (Amazon から何かを注文するなど) として詰め込まれている可能性があります。

この基本的なワークフローを処理する方法は無数にあります。Google App Engine に固執する場合、プラットフォームの一部として「タスク キュー」があり、バックグラウンド タスクを作成およびディスパッチするためのシンプルなメカニズムを提供します。Rackspace を使用する場合、クラウド製品は統一されたプラットフォームではないため、独自のキューを展開するか、セットアップにプラグインするために 1 つ入手する必要があります.

于 2012-11-03T22:45:07.133 に答える