91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RPC框架的底層是什么原理

發布時間:2021-12-03 15:03:27 來源:億速云 閱讀:197 作者:柒染 欄目:云計算

這篇文章給大家介紹RPC框架的底層是什么原理,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。


1. RPC框架的概念

RPC(Remote Procedure Call)–遠程過程調用,通過網絡通信調用不同的服務,共同支撐一個軟件系統,微服務實現的基石技術。

使用RPC可以解耦系統,方便維護,同時增加系統處理請求的能力。

RPC框架的底層是什么原理

上面是一個簡單的軟件系統結構,我們拆分出來用戶系統和訂單系統做為服務存在,讓不同的站點去調用。

只需要引入各個服務的接口包,在代碼中調用RPC服務就跟調用本地方法一樣,我剛接觸到這種調用方式的時候頗為驚奇,我明明調用的就是java語言方法啊(已java為例,現在RPC框架一般都支持多語言),怎么就調用了遠程的服務了呢??

2. RPC框架的原理解析

最近自己寫了一個簡單的RPC框架KRPC,原理分析結合中代碼,均為該框架源碼。

2.1 流程縱覽

RPC框架的底層是什么原理

如上圖所示,我將一個RPC調用流程概括為上圖中5個流程,左邊3個為客戶端流程,右邊兩個為服務端流程。

下面就各流程進行解析

2.2 客戶端調用

服務調用方在調用服務時,一般進行相關初始化,通過配置文件/配置中心 獲取服務端地址用戶調用。

// 用戶服務接口public interface UserService { public User genericUser(Integer id,String name,Long phone);}//調用方//服務初始化KRPC.init("D:\\krpc\\service\\demo\\conf\\client.

一開始接觸RPC調用方法肯定就有疑惑,它不是一個接口嗎,直接調用應該沒啥效果啊,我也沒有引入實現包。

帶著這個疑惑,我們就進入下一個知識點,動態代理。

2.3 動態代理

動態代理這東西意如其名,它代理你幫你做事情,動態代理看這篇文章《詳解 Java 中的三種代理模式》。

上面我們不說道直接調用一個接口中的方法,并且沒有用該接口的實現類調用,那么方法是怎么生效的呢?

可以看到這個用戶服務這個service是由ProxyFactory代理工程創造的,在該ProxyFactory#create()方法中就跟一個代理處理器綁定在一起了。

@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {    //構造請求request    Request request = new Request();    ....    return RequestHandler.request(serviceName, request,returnClass);}

這個類實現了InvocationHandler接口(JDK提供的動態代理技術),每次去調用接口方法,最終都交由該handler進行處理。

這個環節一般會獲取方法的一些信息,例如方法名,方法參數類型,方法參數值,返回對象類型。

同時這個環節會提供序列化功能,一般的RPC網絡傳輸使用TCP(哪怕使用HTTP)傳輸,這里也要將這些參數進行封裝成我們定義的數據接口進行傳輸。

2.4 網絡傳輸

我們通過將方法參數進行處理后,就要使用發起網絡請求,使用tcp傳輸的就利用socket通信進行傳輸,這一塊我開源項目中使用的同步堵塞的方案進行請求,也可以使用一些非堵塞方案進行請求,效率會更高一些。

關于RPC框架的底層是什么原理就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

rpc
AI

桦甸市| 金塔县| 彰武县| 沈阳市| 兴和县| 普兰县| 龙海市| 马公市| 文成县| 曲靖市| 姜堰市| 金沙县| 渭源县| 临安市| 射阳县| 揭阳市| 内丘县| 台州市| 郎溪县| 恩平市| 澄迈县| 沽源县| 禄劝| 江孜县| 久治县| 鄂伦春自治旗| 麻江县| 德化县| 绥化市| 桓仁| 西和县| 黄石市| 普陀区| 六盘水市| 海城市| 文昌市| 隆林| 建瓯市| 平昌县| 彭水| 铁岭市|