rpc フレームワークには、1. RMI、リモート メソッド呼び出し、2. ヘシアン、HTTP ベースのリモート メソッド呼び出し、3. Dubbo、タオバオのオープン ソース TCP ベース RPC フレームワークが含まれます。
rpc フレームワークには次のものがあります。
RPC はリモート プロシージャの略です。 call は大規模な分散アプリケーションで広く使用されており、その役割はシステムの垂直分割を促進し、システムの拡張を容易にすることです。 Java には多くの RPC フレームワークがあり、それぞれに独自の特徴があり、広く使用されているものには RMI、Hessian、Dubbo などが含まれます。 RPC のもう 1 つの特徴は、言語を越えて実行できることです。この記事では、例として JAVA 言語の RPC のみを取り上げます。
#RMI を例とした、RPC の論理関係図があります。
#他のフレームワーク構造も同様ですが、オブジェクトのシリアル化方法、オブジェクトを送信するための通信プロトコル、登録センターの管理とフェイルオーバー設計 (Zookeeper を使用) が異なります。
クライアントとサーバーは異なる JVM で実行できます。クライアントはインターフェースを導入するだけです。インターフェースの実装と実行時に必要なデータはすべてサーバー側で行われます。RPC主にテクノロジーに依存しており、シリアル化、逆シリアル化、および送信プロトコルであり、JAVA では、シリアル化されたデータのシリアル化、逆シリアル化、送信に相当します。 RMI のシリアル化と逆シリアル化は JAVA にネイティブです。ヘシアンのシリアル化と逆シリアル化はプライベートであり、送信プロトコルは HTTP です。Dubbo のシリアル化はさまざまなオプションから選択できます。一般的にはヘシアンのシリアル化プロトコルが使用されます。送信は TCP プロトコルで、高性能 NIO フレームワーク Netty。また、Google の ProBuffer、JBoss Marshalling、Apache Thrift などのシリアル化についても多少の知識はあります。以前、ProBuffer
# # を紹介するブログ投稿を書きました。 1. RMI (Remote Method Invocation)
JAVA 独自のリモート メソッド呼び出しツールですが、特定の制限があります。結局のところ、これは JAVA 言語のオリジナルの設計です。 、多くのフレームワークの原則は RMI に基づいていました。RMI の使用方法は次のとおりです:#外部インターフェイス
<span style="font-size:12px;">public interface IService extends Remote {
public String queryName(String no) throws RemoteException;
}</span>
サービス実装
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
// 服务实现
public class ServiceImpl extends UnicastRemoteObject implements IService {
/**
*/
private static final long serialVersionUID = 682805210518738166L;
/**
* @throws RemoteException
*/
protected ServiceImpl() throws RemoteException {
super();
}
/* (non-Javadoc)
*
*/
@Override
public String queryName(String no) throws RemoteException {
// 方法的具体实现
System.out.println("hello" + no);
return String.valueOf(System.currentTimeMillis());
}
}
#RMI クライアント
import java.rmi.AccessException; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; // RMI客户端 public class Client { public static void main(String[] args) { // 注册管理器 Registry registry = null; try { // 获取服务注册管理器 registry = LocateRegistry.getRegistry("127.0.0.1",8088); // 列出所有注册的服务 String[] list = registry.list(); for(String s : list){ System.out.println(s); } } catch (RemoteException e) { } try { // 根据命名获取服务 IService server = (IService) registry.lookup("vince"); // 调用远程方法 String result = server.queryName("ha ha ha ha"); // 输出调用结果 System.out.println("result from remote : " + result); } catch (AccessException e) { } catch (RemoteException e) { } catch (NotBoundException e) { } } }
#RMI サーバー
import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; // RMI服务端 public class Server { public static void main(String[] args) { // 注册管理器 Registry registry = null; try { // 创建一个服务注册管理器 registry = LocateRegistry.createRegistry(8088); } catch (RemoteException e) { } try { // 创建一个服务 ServiceImpl server = new ServiceImpl(); // 将服务绑定命名 registry.rebind("vince", server); System.out.println("bind server"); } catch (RemoteException e) { } } }
サービスの登録管理 サーバーはServerに記述されており、もちろん別のサービスとして取り出すことも可能ですが、他のフレームワークではZookeeperが登録管理の役割を果たすことがよくあります。
2. ヘッセ行列 (HTTP ベースのリモート メソッド呼び出し)
HTTP プロトコル送信に基づいて、そのパフォーマンスは次のようになります。まだ良好です 完璧ではありません。ロード バランシングとフェイルオーバーはアプリケーションのロード バランサに依存します。ヘシアンの使用は RMI に似ています。違いは、レジストリの役割が軽視されていることです。表示されたアドレスを通じて呼び出され、HessianProxyFactory を使用して設定されたアドレスに基づくプロキシ オブジェクト さらに、Hessian Jar パッケージも導入します。
#3. Dubbo (淘宝網のオープンソース TCP ベースの RPC フレームワーク)
#Netty に基づく高性能 RPC フレームワークは、Alibaba によってオープンソース化されており、全体的な原則は次のとおりです。 Dubbo を理解する前に、まず Zookeeper について深く理解する必要があります。一度 Zookeeper を理解すれば、Dubbo に秘密はなくなります。
Dubbo の詳細な説明は、タオバオ オープンソースに非常に詳しく記載されています。Dubbo は仕事で多くの制作プロジェクトで使用されており、その過程で注意が必要な点も多く発見されています。多数の構成や不適切な設定は煩わしいので、既存のオープンソース Dubbo をベースにカスタマイズして最適化するのが最善です。
関連する無料学習の推奨事項:
以上がRPC フレームワークとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。