仕事をコンピューターのネットワークに分割する方法は?


11

次のようなシナリオを想像してください。大量のデータを生成する中央コンピューターがあるとします。このデータは何らかの処理を経る必要がありますが、残念ながら生成には時間がかかります。処理がリアルタイムに追いつくために、より多くのスレーブコンピューターを接続します。

さらに、ネットワークの中間ジョブからスレーブが脱落する可能性や、追加のスレーブが追加される可能性を考慮する必要があります。中央コンピューターは、すべてのジョブが満足のいくように終了し、スレーブによってドロップされたジョブが別のジョブに再タスクされることを保証する必要があります。

主な質問は、これを達成するためにどのアプローチを使用する必要があるかです。

しかし、おそらく次のことが答えを見つけるのに役立ちます:私がやろうとしていることに名前やデザインパターンがありますか?

これらのコンピューターを相互に通信させるという目標を達成するには、どのような知識領域が必要ですか?(例えば、私がある程度の知識を持っているデータベースで十分でしょうか、またはこれにはまだ知識のないソケットが含まれますか?)

そのようなシステムの例はありますか?主な質問は少し一般的ですので、開始点/参照点があると良いでしょう。

注:私はc ++とWindowsの制約を想定しているので、その方向を指す解決策が評価されます。


1
キューまたはワークフローシステム、例:aws.amazon.com/sqs en.wikipedia.org/wiki/Message_queueなどを探します。キューシステムは、配布、チェック、および再割り当てを処理できます。
リュックフランケン

2
探している用語は並列化です。この道を進む前に、問題が実際に並行して解決できることを確認してください(たとえば、アイテムnの結果はアイテムn-1の結果に依存しません)。
Blrfl


@Blrfl並列化は通常、これに関連付けられるものではないと思います。並列化は通常、複数のコア/プロセッサを使用する単一マシンでのマルチスレッドまたはマルチプロセス実行、または同じマシンでの同時実行に関連付けられます。分散コンピューティングは、ちょうど(、同時同期、またはキューに遅れる可能性が非決定的な実行を言うことである)非同期性の保証、彼は、それが同時実行の保証を持っていない彼の説明で参照する何である
ジミー・ホッファ

3
誰もhadoopについて言及していないことに驚いています。
ケビン

回答:


12

そのようなシステムの例はありますか?

はい。このパターンは、分散コンピューティング(または分散プログラミング、または分散後に配置したいクールな言葉)として知られています。私の提案は、他のソリューションを検討する前にこの社内で構築しないことです。さまざまなオプションについては、このスタックオーバーフローの質問をご覧ください。そして、計算された決定を下します。


3
これに対する新しいお気に入りの言葉を忘れないでください:クラウド!またはクラウドコンピューティング。自分のコンピューターでそれを行う場合、人々はそれらをパーソナルクラウドまたはミニクラウドと呼びます。これは何年もの間分散コンピューティングと言われていたように、ナンセンスを売り込んでいます。OPがクラウドのことについて読んでいる場所を知り、まさにこれについて話しているのです。
ジミー・ホッファ

3
@JimmyHoffa:「クラウド」という言葉は、データと、それを操作するために使用するソフトウェアが、ローカルマシンではなくインターネットのどこかにあることを示すためによく使用されます。また、それ以外の場合、単一のモノリシックVMホストではなく、クラスター上で実行される仮想マシンを使用していることを意味します。明らかな利点は、透過的なゼロダウンタイムフェールオーバーです。
tdammers

2
@tdammers trueですが、OPで説明されているシステムの種類は、クラウドのマーケティングモニカを実際に使用している他の多くのものの1つです。それが流行語であり、定義なしに発明されたため、人々はそれをさまざまなものに適用したので、事実上すべてと何も意味しません。流行語の完全版。
ジミー・ホッファ

1
@JimmyHoffa:それはまた、ここで「クラウド」という言葉に言及することを完全に非構成的にするものです。
tdammers

3
それは、管理に反する良い言葉になるかもしれません。「このデータ処理の問題に対する解決策は何ですか?」「まあ、それをコンピュータのネットワークに配布し、それらを並列に計算できます。」ブランクルック。「ミニクラウドを構築できます。」「OKARY CARRY ON」
-Morpork

4

他の回答で述べたように、この分野は分散コンピューティンググリッドコンピューティング、クラスターコンピューティング、高性能コンピューティングとして知られています。

ワークロードに一致するように開始後にシステムのサイズを変更できる場合、「弾力性がある」と言われ、これは従来のグリッドコンピューティングとは異なるという区別を付け加えます。これは「クラウドコンピューティング」という用語の(非マーケティング)理由の1つです。ユーザーは容量を計画する必要がなく、計算を実行するマシンの数と場所はクラウドとして機能しません。

また、マスターが失敗したタスクを再スケジュールするという要件は、そのシステムの「フォールトトレランス」プロパティと呼ばれます。(この漫画への必須リンク)

独自のプライベートクラウドを構築するには、どのアプローチを使用する必要がありますか?私の注文または好み:

  1. 独自のクラウドを構築せず、他のユーザーが提供するインフラストラクチャを使用してください。Amazonはこの仮想プライベートクラウド、Rackspaceは単にプライベートクラウドと呼んでいます。他のオファーを見つけて比較できると確信しています。

  2. 独自の分散コンピューティングエンジンを構築せず、他のユーザーが提供するエンジンを使用してください。マシンの使用を主張する場合は、少なくとも他の人が提供およびテストするソフトウェアをできるだけ使用してください。Hadoopは、C ++からPipesインターフェース経由で、または任意の実行可能ファイルからStreaming API経由で使用できますSparkにも同様のストリーミングインターフェイスがあります

  3. すべてのコンポーネントを最初からコーディングしないでください。コミュニティのコンポーネントを使用してください。何らかの理由でこれまで読んで、独自のクラウドコンポーネントを展開したい場合は、C ++の標準ライブラリから始めないでください。必要な主なコンポーネントは次のとおりです。

    • コメント記載されているように、マスターから処理ノードにタスクを送信し、処理ノードからマスターに結果の確認を送信するキューイングシステム
    • 処理ノードが操作するデータにアクセスできるように、分散ファイルシステム。

    両方に多くの選択肢があります。キューイングのために、RabbitMQにZeroMQと同様にWindowsインストーラーがあります。分散ファイルシステムについては、Windowsでの経験が十分ではありません。SMB共有をDFSに整理できるように見えますが、ここではヒントを提供できません。別の回答にあるように、データにMongoDBなどの分散データベースを使用すると考えることができます。Windows上で実行されます

また、MPI(通常はBoostラッパーを使用したOpenMPI実装)の使用を検討することもできますが、MPIプログラム自体は弾力性もフォールトトレラントでもないことに注意してください。あなたはそれを自分で処理する必要があります(少なくとも、これを達成するためのメカニズムを提供します)。そのため、このようなプロパティを持つ配布用フレームワークを最初に評価することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.