欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

RPC框架的底層是什么原理

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

成都創(chuàng)新互聯(lián)公司2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元王益做網(wǎng)站,已為上家服務(wù),為王益各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

1. RPC框架的概念

RPC(Remote Procedure Call)–遠(yuǎn)程過程調(diào)用,通過網(wǎng)絡(luò)通信調(diào)用不同的服務(wù),共同支撐一個(gè)軟件系統(tǒng),微服務(wù)實(shí)現(xiàn)的基石技術(shù)。

使用RPC可以解耦系統(tǒng),方便維護(hù),同時(shí)增加系統(tǒng)處理請(qǐng)求的能力。

RPC框架的底層是什么原理

上面是一個(gè)簡(jiǎn)單的軟件系統(tǒng)結(jié)構(gòu),我們拆分出來用戶系統(tǒng)和訂單系統(tǒng)做為服務(wù)存在,讓不同的站點(diǎn)去調(diào)用。

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

2. RPC框架的原理解析

最近自己寫了一個(gè)簡(jiǎn)單的RPC框架KRPC,原理分析結(jié)合中代碼,均為該框架源碼。

2.1 流程縱覽

RPC框架的底層是什么原理

如上圖所示,我將一個(gè)RPC調(diào)用流程概括為上圖中5個(gè)流程,左邊3個(gè)為客戶端流程,右邊兩個(gè)為服務(wù)端流程。

下面就各流程進(jìn)行解析

2.2 客戶端調(diào)用

服務(wù)調(diào)用方在調(diào)用服務(wù)時(shí),一般進(jìn)行相關(guān)初始化,通過配置文件/配置中心 獲取服務(wù)端地址用戶調(diào)用。

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

一開始接觸RPC調(diào)用方法肯定就有疑惑,它不是一個(gè)接口嗎,直接調(diào)用應(yīng)該沒啥效果啊,我也沒有引入實(shí)現(xiàn)包。

帶著這個(gè)疑惑,我們就進(jìn)入下一個(gè)知識(shí)點(diǎn),動(dòng)態(tài)代理。

2.3 動(dòng)態(tài)代理

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

上面我們不說道直接調(diào)用一個(gè)接口中的方法,并且沒有用該接口的實(shí)現(xiàn)類調(diào)用,那么方法是怎么生效的呢?

可以看到這個(gè)用戶服務(wù)這個(gè)service是由ProxyFactory代理工程創(chuàng)造的,在該P(yáng)roxyFactory#create()方法中就跟一個(gè)代理處理器綁定在一起了。

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

這個(gè)類實(shí)現(xiàn)了InvocationHandler接口(JDK提供的動(dòng)態(tài)代理技術(shù)),每次去調(diào)用接口方法,最終都交由該handler進(jìn)行處理。

這個(gè)環(huán)節(jié)一般會(huì)獲取方法的一些信息,例如方法名,方法參數(shù)類型,方法參數(shù)值,返回對(duì)象類型。

同時(shí)這個(gè)環(huán)節(jié)會(huì)提供序列化功能,一般的RPC網(wǎng)絡(luò)傳輸使用TCP(哪怕使用HTTP)傳輸,這里也要將這些參數(shù)進(jìn)行封裝成我們定義的數(shù)據(jù)接口進(jìn)行傳輸。

2.4 網(wǎng)絡(luò)傳輸

我們通過將方法參數(shù)進(jìn)行處理后,就要使用發(fā)起網(wǎng)絡(luò)請(qǐng)求,使用tcp傳輸?shù)木屠胹ocket通信進(jìn)行傳輸,這一塊我開源項(xiàng)目中使用的同步堵塞的方案進(jìn)行請(qǐng)求,也可以使用一些非堵塞方案進(jìn)行請(qǐng)求,效率會(huì)更高一些。

關(guān)于RPC框架的底層是什么原理就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)站欄目:RPC框架的底層是什么原理
網(wǎng)站路徑:http://www.chinadenli.net/article14/igjcge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站軟件開發(fā)服務(wù)器托管網(wǎng)站制作企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)