5

マシンにまたがるプロセス、つまり分散プログラムを形成するプロセスを実装することに興味があります。私が配布したいのは、これらのプロセスが提供する機能であり、データではありません。
では、Java での分散プログラミングの現在の標準は何でしょうか?
RMIはまだですか?それとも、ある種のメッセージング システムですか?
私は当初、RMI とリモート管理用の小さな JMX を考えていましたが、現在のベスト プラクティスを知りたいと考えています。RMI は常に別のレイヤーの下に「埋もれている」ようです (たとえば、EJB ですよね?)

更新:
回答とコメントの後、現在の傾向はメッセージング システムに行くことですか? これは、分散設計に「集中型」コンポーネントを導入するものではありませんか?

4

3 に答える 3

3

RMI はもはや道ではないと思います。RMI がタスクに適している場合は、EJB を使用してください。セキュリティ/アクセス制御、トランザクション管理、データベース管理など、アプリケーション サーバーから多くの機能を利用できるためです。 RMI のものは苦痛であり、時間の無駄です。

分散プログラミングのもう 1 つのオプションは、汎用マシンのクラスターでプログラムを簡単に実行できる強力なフレームワークであるGridGainを使用することです。同様に、Apache Hadoopを検討することもできます

インストールが非常に簡単で、解凍して実行するだけで、アプリケーションとの統合も比較的簡単であるため、私は GridGain から始めます。

編集

RMI とメッセージング システムは少し異なります。同期通信と非同期通信の使用は、システム アーキテクチャ全体と、異なるコンポーネントが相互に対話する方法に依存する必要があるためです。たとえば、非同期通信は、バッチ操作や大きなデータのアーカイブなど、サービスの呼び出しが完了するまでに時間がかかる場合に適しています。この場合、サービス クライアントはシステム リソース (ソケットやスレッドなど) を保持しません。

一方、サービス/機能が完了するまでの時間が短く、各リモート サービスが前のサービスの結果に依存する場合は、同期通信の方が適している場合があります。

于 2013-01-12T20:25:49.610 に答える
2

最近、Cajoプロジェクトを使用して、Java デスクトップ (Swing) アプリの複数のインスタンス間でリモート処理を行いました。このプロジェクトはしばらく更新されていませんが、非常に使いやすく、最小限の手間で機能します。

これは RMI の薄いラッパーであるため、非常に軽量で非常に高速です。

いくつかの例については、記事「Cajo、Java で分散プログラミングを実現する最も簡単な方法」を参照してください。

于 2013-01-12T22:40:01.763 に答える
2

アプリ サーバー/Java EE スタック内で実行する場合、通常、ベスト プラクティスは EJB です。

私は非同期メッセージング ソリューションが好きです。つまり、JMS を使用します。ActiveMQをブローカーのネットワークとして簡単にセットアップし、パブリッシュ サブスクライブ パターンに依存することができます。その場合、中心的なコンポーネントはありません。これを行う他のブローカーもあります。

AKKAを見たことがありますか?これは標準に近いものではありませんが、アプリケーションがその性質上非常に分散している場合に役立つニッチな概念です。

もう 1 つの傾向は、おそらくデータ中心すぎるかもしれませんが、分散メモリ/データ グリッドを使用することです。Hadoop など

于 2013-01-13T19:54:40.113 に答える