質問

に対する答えの一つに、 TCPの信頼性を備えたUDPのようなブロードキャスト, 、ユーザーが言及すると、 広める メッセージング API。と呼ばれるものにも遭遇しました ØMQ. 。私もある程度の知識はありますが、 MPI.

それで、私の主な質問は次のとおりです。なぜ一方を他方よりも選択するのでしょうか?より具体的に言うと、MPI の成熟した実装が存在するのに、なぜ Spread または ØMQ を使用することを選択するのでしょうか?

役に立ちましたか?

解決

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

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

他のヒント

私はこれらのライブラリを使用したことがありませんが、いくつかのヒントを提供できるかもしれません。

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

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

「信頼性」の概念は TCP とは少し異なります。TCPの信頼性は、「このパケットを最終プログラムに与えるものに関係なく」です。分散プログラミングの信頼性は「一部のマシンが死んだとしても、システム全体が一貫した方法で機能し続けています」です。すべての参加者がメッセージを受け取ったことを本当に保証するために、そのようなものが必要になるでしょう 2フェーズコミット または、より高速な代替手段の 1 つです。

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

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

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

簡単に言うと、アプリケーションを単純なマルチスレッド プロセスから分散可変環境に拡張したい場合、または迅速に実験してプロトタイプを作成したいが、モデルに適合するソリューションがないようであれば、zeromq を使用します。ただし、非常に大規模なクラスターに拡張する場合は、ネットワークの展開と監視にある程度の労力を費やす必要があることが予想されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top