2011-01-24 8 views
1

Google App Engine-MapReduceは、クラウド内の大規模並列ソリューションの最善の策ですか?私の問題は、4コアのPCでマルチスレッドに数時間かかる。私は600分かかるかもしれないと言いたい。私は1000台のサーバーが36秒で完了することを好むだろう。私のアプリでは、4コアスレッドから1000サーバへの切り替えが非常に有効です。実際には、私はすでに4つのコアに1000の小さな仕事を送ることができますが、4つのコアを持っているので4つのコアに4つの大きな仕事を早くやり遂げることはできません。 (私のデータセットは小さいので、大規模なデータセット用に設計されたMap-Reduceは、私のタイプの計算上の問題とは異なるスイートスポットを持つかもしれません)。 URLが取得されますが、10件のリクエストでGoogleの制限が分かる場合があります。 Googleは、外部からのインフラストラクチャに大規模な並列ソリューションを組み込むことを積極的に妨げているようだ。はGoogle App Engine-MapReduceで、クラウド内の大規模並列ソリューションのベストセラーですか?

私はGoogle App Engineを探し始めました。デプロイメント時にユーザーが非常に少なく、App Engineにはきめ細かなコストがかかります。これは本当に好きな機能です。私の印象は、Amazon EC2がより多くの仕事をすることになりましたが、そのコストはさらにチャンクになる可能性が高いということでした。私は家庭に勤めていることを考えると、私のウェブサイトに多くの訪問者が来るとは思っていません。彼らは決して訪問することはありません。

一般的に、クラウドによって処理されるべきである大規模な並列(計算上の制約)の問題について、人々はどこに向かうのでしょうか?

+0

あなたが実行したいアルゴリズムを記述しておき、mapreducableな問題かどうかを教えてください。 –

答えて

2

バインドされたタスクを計算する場合、EC2はApp Engineよりも優れていることがよくあります。 App Engineは、純粋なナンバークランチングではなく、Webリクエストを処理することに重点を置いています。これは、0分の要求から今度は1000分の要求を次の分に、0分の要求を1分後に返すようには設計されていません。実際には、その機能の1つは、一度に実行されているインスタンスの数を明示的に制御する必要はないということです。また、長時間実行されるジョブは使用できませんが、多くのタスクでは、タスクキューを使用してジョブを連鎖させることができます。バックグラウンドタスクの現在の制限は10分だと思います。

EC2には、freeのサービスを受けることができる超低階層があります。 EC2では、明示的にサーバーを上下させることができますが、あなたが支払うことができる最小の増分は1時間だと思います。

もちろん、1000台のサーバーで文字通りジョブを実行したい場合は、アプリケーションエンジンもEC2もそうすることはできません。両方とも非常に弾力性があり適応性がありますが、30秒間1000台のサーバを稼動させることは、それほど経済的ではありません。 App Engineでは、同時実行インスタンスが1000件に達する前に、1時間ごとまたは1日ごとのクォータに対して実行されます。 EC2では、通常、サーバーインスタンスによって支払いを行います。 1000時間のインスタンス時間を支払うことになります。もちろん、Amazonの高CPUインスタンスの1つは、PCよりもはるかに強力かもしれません。だから、おそらく100程度しか必要ないかもしれません。あるいは、妥協して一度に20のインスタンスしか実行しないかもしれません。つまり、計算を完了するのに数分かかりますが、あなたは壊れません。

+0

私は、App Engineが0リクエストから1000へ、そして1分後に0に戻るように設計されていないと考えています。 App Engineはそれをブラウザでは行いますが、GoogleはアプリからURLを取得することを許可しないことにしました。 – H2ONaCl

+0

私は無料で何かをしようとは考えていません。 36秒間1000台のサーバー= App Engineのサーバー1時間あたり0.10ドルで$ 1 = $ 1 1000時間のサーバーインスタンスを最低1時間稼働させるには、36秒の作業を行うだけで無駄です。また、サーバーのインスタンス化には時間がかかります。おそらくユーザーが待ち望んでいるよりも時間がかかります。そうであれば、サーバーは継続的に稼働している必要があります(ユーザー数が多い時間帯がスリープ状態になると、サーバーの数が少なくなる可能性があります)。それはEC2のようなアプリは、多数のユーザーを持っているために実用的にしか見えないようです。 – H2ONaCl

+0

アプリケーションエンジンで新しいインスタンスをインスタンス化するのは、ec2と同じように時間がかかります。 App Engineアプリケーションが1つの実行インスタンスから1000の実行インスタンスに移行した後、1分以内にすべて0に戻ることを確認したとしますか?それは、アプリエンジンのスケーリングがどのように機能するかを理解していることを示唆するものではありません。インスタンスをスピンアップできる速さを見たい場合は、同時に10回のURLフェッチの制限を回避することができます。最初のハンドラで別のURLを10回フェッチして(非同期モードで)それらのうち、別のURLを10回(非同期モードで)取得します。 –

0

AmazonのElastic MapReduceをチェックしましたか? http://aws.amazon.com/elasticmapreduce/

また、タスクキューを調べる必要があります。大きな問題を多数の小さな問題に分割する方法をすでに知っている場合は、大きな問題を取り上げるタスクを1つ作成し、小さな問題に取り組むために1000(または10.000)のサブタスクを作成することができます。その後、必要に応じて1つのタスクで結果を収集します。

個々のタスクは、終了する前に最大10分まで実行できます。これにより、通常の要求よりも計算タスクに少し使いやすくなります。

関連する問題