導航:首頁 > 編程語言 > java自己寫rpc

java自己寫rpc

發布時間:2023-03-09 03:32:44

㈠ rpc的實現機制是什麼

RPC 的全稱是 Remote Procere Call 是一種進程間通信方式。它允許程序調用另一個地址空間(通常是共享網路的另一台機器上)的過程或函數,而不用程序員顯式編碼這個遠程調用的細節。即無論是調用本地介面/服務的還是遠程的介面/服務,本質上編寫的調用代碼基本相同。

比如兩台伺服器A,B,一個應用部署在A伺服器上,想要調用B伺服器上應用提供的函數或者方法,由於不在一個內存空間,不能直接調用,這時候需要通過就可以應用RPC框架的實現來解決。

RPC 會隱藏底層的通訊細節(不需要直接處理Socket通訊或Http通訊)

RPC 是一個請求響應模型。客戶端發起請求,伺服器返回響應(類似於Http的工作方式)

RPC 在使用形式上像調用本地函數(或方法)一樣去調用遠程的函數(或方法)。

二、常見RPC框架

幾種比較典型的RPC的實現和調用框架。

(1)RMI實現,利用java.rmi包實現,基於Java遠程方法協議(Java Remote Method Protocol)

和java的原生序列化。

(2)Hessian,是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能。 基於HTTP協議,採用二進制編解碼。

(3)THRIFT是一種可伸縮的跨語言服務的軟體框架。thrift允許你定義一個描述文件,描述數據類型和服務介面。依據該文件,編譯器方便地生成RPC客戶端和伺服器通信代碼。

二、RPC框架實現原理

在RPC框架中主要有三個角色:Provider、Consumer和Registry。如下圖所示:

RPC框架面試總結-RPC原理及實現

節點角色說明:

* Server: 暴露服務的服務提供方。

* Client: 調用遠程服務的服務消費方。

* Registry: 服務注冊與發現的注冊中心。

三、RPC調用流程

RPC基本流程圖:

RPC框架面試總結-RPC原理及實現

一次完整的RPC調用流程(同步調用,非同步另說)如下:

1)服務消費方(client)調用以本地調用方式調用服務;

2)client stub接收到調用後負責將方法、參數等組裝成能夠進行網路傳輸的消息體;

3)client stub找到服務地址,並將消息發送到服務端;

4)server stub收到消息後進行解碼;

5)server stub根據解碼結果調用本地的服務;

6)本地服務執行並將結果返回給server stub;

7)server stub將返回結果打包成消息並發送至消費方;

8)client stub接收到消息,並進行解碼;

9)服務消費方得到最終結果。

RPC框架的目標就是要2~8這些步驟都封裝起來,讓用戶對這些細節透明。

四、服務注冊&發現

RPC框架面試總結-RPC原理及實現

服務提供者啟動後主動向注冊中心注冊機器ip、port以及提供的服務列表;

服務消費者啟動時向注冊中心獲取服務提供方地址列表,可實現軟負載均衡和Failover;

五、使用到的技術

1、動態代理

生成 client stub和server stub需要用到 Java 動態代理技術 ,我們可以使用JDK原生的動態代理機制,可以使用一些開源位元組碼工具框架 如:CgLib、Javassist等。

2、序列化

為了能在網路上傳輸和接收 Java對象,我們需要對它進行 序列化和反序列化操作。

* 序列化:將Java對象轉換成byte[]的過程,也就是編碼的過程;

* 反序列化:將byte[]轉換成Java對象的過程;

可以使用Java原生的序列化機制,但是效率非常低,推薦使用一些開源的、成熟的序列化技術,例如:protobuf、Thrift、hessian、Kryo、Msgpack

關於序列化工具性能比較可以參考:jvm-serializers

3、NIO

當前很多RPC框架都直接基於netty這一IO通信框架,比如阿里巴巴的HSF、bbo,Hadoop Avro,推薦使用Netty 作為底層通信框架。

4、服務注冊中心

可選技術:

* Redis

* Zookeeper

* Consul

* Etcd

㈡ Java:如何能寫出一個應用到RPC協議的示例呢簡單的就好

"如何能寫出"

那就熟讀RPC協議和JAVA的網路通訊

㈢ Java開發中消息隊列和rpc框架都是做什麼的

一,消息隊列服務一般用於設計多系統之間的信息傳輸,一般這種傳輸不需要對方對數據回做出回應。它答最常見的方式是構建非同步的生產者-消費者模式。我們在系統開發中,有些業務並不需要及時返回結果,我們可以把這些操作放到隊列中,然後另起一個消費者去處理它。比如日誌,資料庫非同步更新。
二,rpc一般是用於伺服器與伺服器進程之間通信,這種通信有請求和應答。它是建立在底層的socket通信之上的。封裝為rpc之後,更加方便建立通信。就像在同一個進程中調用對方的方法一樣。它本地的方法名一般和請求到達的伺服器的方法名一一對應。這樣可以更好的把模塊劃分。所以它是應對分布式而生的。比如一個網站,一開始可能所有的服務在一個進程中,但是隨著業務的增長,一個進程處理不過來,這時就需要把業務拆分成多個,分部到不同的機器上去。

㈣ 分析JAVA中幾種常用的RPC框架

HTTP/1.1 協議規定的 HTTP 請求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。其中,POST 一般用來向服務端提交數據,本文主要討論 POST 提交數據的幾種方式。
我們知道,HTTP 協議是以 ASCII 碼傳輸,建立在 TCP/IP 協議之上的應用層規范。規范把 HTTP 請求分為三個部分:狀態行、請求頭、消息主體。類似於下面形式:
<method> <request-URL> <version> <headers> <entity-body>
協議規定,POST 提交的數據必須放在消息主體(entity-body)中,但協議並沒有規定數據必須使用什麼編碼方式。實際上,開發者完全可以自己決定消息主體的格式,只要最後發送的 HTTP 請求滿足上面的格式就可以。

閱讀全文

與java自己寫rpc相關的資料

熱點內容
fgets空文件 瀏覽:857
傳奇物品文件夾 瀏覽:352
word插入excel圖表 瀏覽:690
xp系統搜索不到本地文件 瀏覽:39
什麼網站可以找到拼團去西藏 瀏覽:247
javatask 瀏覽:50
MFC的文件名 瀏覽:972
cad自動保存的文件怎麼關閉 瀏覽:667
zip文件密碼多少 瀏覽:486
編程培訓哪些好 瀏覽:324
如何把文件夾內容變成文檔 瀏覽:509
小火箭幼兒編程怎麼拿積分 瀏覽:158
火車票時刻表及票價資料庫 瀏覽:94
求平均值java 瀏覽:767
linux如何分屏顯示 瀏覽:257
手機可以直接填寫pdf文件么 瀏覽:554
linux虛擬光碟機軟體 瀏覽:836
米2s最好的版本 瀏覽:640
小米6檢測工具下載 瀏覽:540
桌面創建不了文件夾怎麼回事 瀏覽:894

友情鏈接