同じ会社がすべて Java で記述した分散アプリケーションを開発する場合、Web サービスと RMI のどちらを選びますか? パフォーマンス、疎結合、使いやすさなどの長所と短所は何ですか? WSを選ぶ人はいますか?RMI を使用してサービス指向アーキテクチャを構築できますか?
5 に答える
私はそれについて次のように考えてみます。
相互に独立したサービスを実行する予定ですか? これらのサービスは、将来、Java 以外のアプリケーションからアクセスされる可能性がありますか? 次に、Web サービスに進みます。
アプリケーションの一部 (単数形に気をつけてください) を複数のサーバーに分散させたいだけですか? 次に RMI を選択すると、Java の世界を離れてすべてを緊密に連携させる必要がなくなります。
私はWSを選びます。
- WS/RMIがボトルネックになる可能性はほとんどありません。
- 将来、他の可能なテクノロジーへの扉を閉めるのはなぜですか?
- クライアント/サーバー上のクラスのバージョンが同期しなくなった場合、RMIで問題が発生する可能性があります。
そして...私はおそらくRESTサービスを選択するでしょう。
あなたがそれを必要としない (非 Java との相互運用) 場合、そしておそらくそうでない場合は、RMI の方が優れているでしょう。より少ないコード、より少ない構成、より少ない帯域幅のオーバーヘッド。
必要になるのではないかと心配している場合のオプションは、EJB3 を使用することです。RMI を使用し、セットアップと展開が非常に簡単ですが、必要に応じて呼び出しを簡単に Web サービスに変換することもできます。
何をするにしても、自分のものを作成しないでください。標準に固執します。
私の選択肢は次のとおりです。
標準のJavaシリアライゼーション - 長所:imhoは最もパフォーマンスが高く、実装が簡単です(Springを使用してローカルインターフェースをリモートインターフェースとして公開しています)。短所:シリアライゼーションは、異なるjvmバージョン間では機能しません
バイナリ シリアライゼーション (jetty の hessian など) - 長所 : Java シリアライゼーションと同じパフォーマンスで、異なる jvm バージョン間で動作します
WS: 異なるプラットフォーム java + .net 間の相互運用性が必要な場合のみ。
RMI は迅速に開発できる優れたトランスポートですが、運用環境では使用しないことをお勧めします。シリアライゼーションの互換性の問題により、事態が厄介になる可能性があります。展開を非常に慎重に調整する必要があります。
はい、WebServices は非効率的ですが、ハードウェアを使用するだけです。または、全脂肪の SOAP/WSDL ではなく、プレーンで軽量な XML-over-HTTP を使用します。