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