2008-08-30 10 views
40

Broadcast like UDP with the Reliability of TCPへの回答の1つで、ユーザはSpreadメッセージングAPIについて言及しています。私はØMQと呼ばれるものをまたいで走っています。私もMPIに精通しています。スプレッドとMPIとの比較zeromq?

私の主な質問は、なぜ私はもう一方を選ぶのでしょうか?具体的には、MPIの成熟した実装がある場合、SpreadまたはØMQを使用する理由は何ですか?

答えて

46

MPIは、高速で信頼性の高いネットワークを使用して密結合されたコンピューティングクラスタを削除しました。 SpreadとØMQは、大規模分散システム向けに設計されています。並列科学アプリケーションを設計する場合は、MPIを使用してください。ただし、障害やネットワークの不安定性を回復する必要がある永続分散システムを設計する場合は、他の方法を使用してください。

MPIには、フォールトトレランス機能が非常に限られています。ほとんどの実装でのデフォルトのエラー処理動作は、システム全体のエラーです。また、MPIのセマンティクスでは、最終的に送信されるすべてのメッセージが消費される必要があります。これは、クラスタ上でのシミュレーションでは理にかなっていますが、分散アプリケーションでは意味がありません。

13

私はこれらのライブラリを使用していませんが、私はいくつかのヒントを得ることができます。

  1. MPIは通信プロトコルであり、SpreadとØMQは実際の実装です。
  2. MPIは「並列」プログラミングに由来し、一方Spreadは「分散」プログラミングに由来します。

したがって、実際には、並列システムを構築するか、分散システムを構築するかによって異なります。彼らはお互いに関連していますが、暗示された意味/目標は異なります。並列プログラミングは、複数のコンピュータを同時に使用することによって計算能力を向上させます。分散プログラミングは、信頼性の高い(一貫性のあるフォールトトレラントで高可用性の)コンピュータグループを扱います。

「信頼性」の概念は、TCPの概念とわずかに異なります。 TCPの信頼性は、「何があってもこのパケットをエンドプログラムに渡す」ことです。分散型プログラミングの信頼性は、「一部のマシンが死んでも、システム全体が一貫した方法で動作し続ける」ということです。すべての参加者がメッセージを受け取ったことを本当に保証するには、2 phase commitのようなものか、より速い選択肢の1つが必要です。

5

ここでは、提供されるサービスの種類とそれぞれのインフラストラクチャについて異なる考え方で、非常に異なるAPIに取り組んでいます。私はMPIとSpreadについて十分に知りませんが、ZeroMQでもう少しお手伝いできます。

ZeroMQは、単純なメッセージング通信ライブラリです。 (PUSH/PULL、REQUEST/REPLY、PUB/SUBなど)の限定されたセットに基づいて、異なるピア(ローカルのものを含む)にメッセージを送信する以外は何もしません。これらのパターンに基づいて、クライアントの接続、取得、基本的な輻輳を厳密に処理し、残りの作業は自分で行う必要があります。

非常に制限されているように見えますが、この単純な動作は主にアプリケーションの通信レイヤーに必要なものです。シンプルなプロキシやノード間のゲートウェイを使用して、メモリ内のシンプルなプロトタイプからさまざまな環境の複雑な分散アプリケーションまで、非常に迅速に拡張できます。ただし、ノードの展開、ネットワークの検出、またはサーバーの監視は行わないでください。あなたはそれを自分で行う必要があります。

簡潔に言うと、単純なマルチスレッドプロセスから分散および可変環境にスケールアップするアプリケーションがある場合や、試作およびプロトタイプを素早く行い、ソリューションがモデルに適合しないように見せたい場合は、zeromqを使用します。しかし、非常に大きなクラスタに拡張したい場合は、ネットワークの展開と監視に多少の努力を払う必要があります。

関連する問題