ホームページ Java &#&チュートリアル RPC フレームワークとは何ですか?

RPC フレームワークとは何ですか?

Oct 29, 2020 pm 03:04 PM
RPC フレームワーク

rpc フレームワークには、1. RMI、リモート メソッド呼び出し、2. ヘシアン、HTTP ベースのリモート メソッド呼び出し、3. Dubbo、タオバオのオープン ソース TCP ベース RPC フレームワークが含まれます。

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 の使用方法は次のとおりです:

#外部インターフェイス

1

2

3

4

5

<strong>&lt;span style=&quot;font-size:12px;&quot;&gt;public interface IService extends Remote {

 

    public String queryName(String no) throws RemoteException;

 

}&lt;/span&gt;</strong>

ログイン後にコピー
サービス実装

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<strong>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());

    }

     

}</strong>

ログイン後にコピー
#RMI クライアント

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

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 サーバー

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

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 をベースにカスタマイズして最適化するのが最善です。


関連する無料学習の推奨事項:

Java 基本チュートリアル

以上がRPC フレームワークとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

手書きの RPC フレームワークは、実際には 13 歳のふりをするためだけのものではありません。 手書きの RPC フレームワークは、実際には 13 歳のふりをするためだけのものではありません。 Aug 16, 2023 pm 05:01 PM

手書きの RPC フレームワークは、実際には 13 歳のふりをするためだけのものではありません。

アリババのインタビュアー: RPC フレームワークを手書きで書いてください。 アリババのインタビュアー: RPC フレームワークを手書きで書いてください。 Aug 17, 2023 pm 04:24 PM

アリババのインタビュアー: RPC フレームワークを手書きで書いてください。

Go 言語の RPC フレームワークの原理と応用 Go 言語の RPC フレームワークの原理と応用 Jun 01, 2023 pm 03:01 PM

Go 言語の RPC フレームワークの原理と応用

PHP で RPC フレームワークを開発するにはどうすればよいですか? PHP で RPC フレームワークを開発するにはどうすればよいですか? May 13, 2023 pm 03:22 PM

PHP で RPC フレームワークを開発するにはどうすればよいですか?

どのような RPC フレームワークがありますか? どのような RPC フレームワークがありますか? Aug 03, 2023 am 10:17 AM

どのような RPC フレームワークがありますか?

Go 言語 RPC フレームワークの評価: パフォーマンス、使いやすさ、コミュニティ サポートの比較 Go 言語 RPC フレームワークの評価: パフォーマンス、使いやすさ、コミュニティ サポートの比較 Feb 27, 2024 pm 09:12 PM

Go 言語 RPC フレームワークの評価: パフォーマンス、使いやすさ、コミュニティ サポートの比較

Go 言語で同時実行性の高い RPC フレームワークを実装する方法 Go 言語で同時実行性の高い RPC フレームワークを実装する方法 Aug 05, 2023 pm 12:49 PM

Go 言語で同時実行性の高い RPC フレームワークを実装する方法

選択にお困りですか? Go 言語 RPC フレームワークの包括的な評価ガイド 選択にお困りですか? Go 言語 RPC フレームワークの包括的な評価ガイド Feb 27, 2024 pm 02:12 PM

選択にお困りですか? Go 言語 RPC フレームワークの包括的な評価ガイド

See all articles