RPCは、リモートプロシージャコールの略語です。大規模な分散アプリケーションで広く使用されています。その機能は、システムの垂直分割を支援し、システムの拡張を容易にすることです。 Javaには多くのRPCフレームワークがあり、それぞれに独自の特性があり、広く使用されているものにはRMI、Hessian、Dubboなどが含まれます。RPCのもう1つの特徴は、言語を横断できることです。この記事は、例としてJava言語のRPCのみを採用しています。
RPCの論理的な関係図があり、RMIを例にとっています。
他のフレームワーク構造は類似しており、違いはオブジェクトのシリアル化方法、オブジェクトを送信するための通信プロトコル、登録センターの管理、フェイルオーバー設計(Zookeeperを使用)にあります。
クライアントとサーバーは、異なるJVMで実行できます。クライアントはインターフェイスを導入するだけです。インターフェイスの実装と実行時に必要なデータはすべてサーバー側にあります。 RPCの主な依存関係テクノロジーは、シリアル化、降下、および伝送プロトコルです。 Javaは、オブジェクトのシリアル化、降下、および送信、およびシリアル化データの送信に対応しています。 RMIのシリアル化と脱介入はJavaが所有しています。ヘシアンのシリアル化と降下はプライベートであり、トランスミッションプロトコルはHTTPであり、ダボのシリアル化は多くの方法で選択できます。一般に、Hessian Serialization Protocolが使用され、伝送はTCPプロトコルであり、高性能NIOフレームワークNettyを使用します。シリアル化に関しては、GoogleのProbuffer、Jboss Marshalling、Apache Thriftなどのいくつかのことも知っています。
1。RMI(リモートメソッド呼び出し)
Javaに付属するリモートメソッド呼び出しツールには、特定の制限があります。結局のところ、それは最初のJava言語のデザインでした。その後、多くのフレームワークの原則はRMIに基づいていました。 RMIの使用は次のとおりです。
外部インターフェイス
パブリックインターフェイスiservice拡張リモート{public string queryname(string no)throws remoteexception; } </span>サービスの実装
java.rmi.remoteexceptionをインポートします。 java.rmi.server.unicastremoteobjectをインポートします。 //サービスの実装パブリッククラスServiceImpl拡張UnicastRemoteObject Implentice iservice {/ ***/ private static final long serialversionuid = 682805210518738166l; / ** * @throws Remoteexception */ Protected ServiceImpl()Throws Remoteexception {super(); } / *(nonjavadoc) * @see com.suning.ebuy.wd.web.iservice#queryname(java.lang.string) * / @override public string queryname(string no)throws remoteexception {//メソッドSystem.out.out.out.outの具体的な実装; return string.valueof(system.currenttimemillis()); }}RMIクライアント
java.rmi.remoteexceptionをインポートします。 java.rmi.registry.locateregistryをインポートします。 java.rmi.registry.registryをインポートします。 // RMIサーバーパブリッククラスサーバー{public static void main(string [] args){//登録マネージャーレジストリレジストリ= null; try {// Service Registry = locateRegistry.creatergistry(8088)を作成してください。 } catch(remoteexception e){} try {// service serviceimpl server = new ServiceImpl(); //サービスにバインドして、registry.rebind( "vince"、server)に名前を付けます。 System.out.println( "bind server"); } catch(remoteexception e){}}}サービス登録マネージャーはサーバーに記述されており、もちろん別のサービスとして抽出することもできます。他のいくつかのフレームワークでは、Zookeeperが登録管理の役割としてよく使用されます。
2。HESSIAN(HTTPに基づくリモートメソッド呼び出し)
HTTPプロトコル伝送に基づいて、パフォーマンスは完全ではありません。ロードバランシングと故障転送は、アプリケーションのロードバランサーに依存します。ヘシアンの使用はRMIに似ています。違いは、レジストリの役割を軽視することです。表示されたアドレスコールを通して、HessianProxyFactoryは、構成されたアドレスに基づいてプロキシオブジェクトを使用します。さらに、HessianのJARパッケージも導入されています。
3。Dubbo(TCPベースのRPCフレームワークTaobaoのオープンソース)
NIOフレームワークNettyに基づく高性能RPCフレームワークは、Alibabaによるオープンソースです。全体的な原則は次のとおりです。
Dubboを理解する前に、まずZookeeperを詳細に理解する必要があります。 Zookeeperを理解した後、Dubboには秘密がありません。
ZookeeperはDubbo Servicesの登録センターです。 Dubboの元のデータベースベースの登録センターは、Zookeeperを使用しませんでした。 Zookeeperは分散サービスフレームワークです。ツリータイプのディレクトリサービスのデータストレージであり、クラスターのデータを管理できます。 Dubbo Servicesの登録センターとして使用できます。 Dubboは、Zookeeperでクラスター展開を実行できます。プロバイダーが停電やその他のオフエアなどの異常なダウンタイムを持っている場合、Zookeeper登録センターはプロバイダー情報を自動的に削除できます。プロバイダーが再起動すると、登録データとサブスクリプションリクエストを自動的に復元できます。
Dubboの詳細な説明は、Taobaoのオープンソースで非常に詳細です。多くの生産プロジェクトでは、Dubboは多くの生産プロジェクトで使用されています。プロセス中に、特に適切にセットアップされていない多くの構成に注意を払う必要がある多くのことも発見しました。既存のオープンソースDubboに基づいてカスタマイズおよび最適化することをお勧めします。