一、什么是RPC
1.1 RPC概念
RPC,Remote Procedure Call 即遠(yuǎn)程過(guò)程調(diào)用,與之相對(duì)的是本地服務(wù)調(diào)用,即LPC(Local Procedure Call)。本地服務(wù)調(diào)用比較常用,像我們應(yīng)用內(nèi)部程序**(注意此處是程序而不是方法,程序包含方法)**互相調(diào)用即為本地過(guò)程調(diào)用,而遠(yuǎn)程過(guò)程調(diào)用是指在本地調(diào)取遠(yuǎn)程過(guò)程進(jìn)行使用。
而RPC框架就是為了幫助我們?cè)诒镜卣{(diào)用遠(yuǎn)程過(guò)程時(shí),就像調(diào)用本地過(guò)程一樣方便。
1.2 RPC與Http的關(guān)系
用一句話來(lái)總結(jié)就是:
RPC是一種概念,http是一種協(xié)議,可以認(rèn)為http是Rpc的一種實(shí)現(xiàn),或者Rpc包含了http。為什么說(shuō)包含而不是相等,是因?yàn)镽pc還有很多基于自定義的Tcp的協(xié)議,例如Dubbo等,而我們常說(shuō)的rpc即指的除Http之外的基于tcp自定義的協(xié)議。
1.3 關(guān)于Rpc的思考
網(wǎng)上關(guān)于Rpc與Http的相關(guān)文章并不少,很多人在解釋RPC概念時(shí)會(huì)提到其是執(zhí)行遠(yuǎn)程的方法,然后直接得出rpc包含http的結(jié)論。其實(shí)如果按照此概念去思考的話,其實(shí)并不能得出Http是Rpc的一種實(shí)現(xiàn)。因?yàn)閔ttp調(diào)用的方式,從使用者的角度來(lái)說(shuō),并不是直接調(diào)用其方法,而是按照一定的方式,完善出了一條http請(qǐng)求,然后交由本地客戶端進(jìn)行數(shù)據(jù)傳輸。
而相對(duì)比的,如果用過(guò)相關(guān)Rpc框架,例如Dubbo,是可以像調(diào)用本地方法一樣直接調(diào)用遠(yuǎn)程方法。而http的調(diào)用方式可以認(rèn)為是一種服務(wù)調(diào)用,而不是一種方法。
感覺文章博主應(yīng)該是有過(guò)rpc相關(guān)的使用經(jīng)驗(yàn),有點(diǎn)先入為主了。那么到底rpc與http的關(guān)系如何呢,我也思考了很久,后面發(fā)現(xiàn)應(yīng)該從定義上入手,我們既然在討論Rpc是什么,怎么能忽略最簡(jiǎn)單的定義呢。
Remote Procedure Call ,其中"Procedure"按照谷歌翻譯有以下幾種解釋:程序、過(guò)程、步驟,并不是 方法(Method)。而程序是包含方法的,同時(shí)也包含服務(wù)。因此上文中才強(qiáng)調(diào)了是一種程序或過(guò)程,而不是方法。
1.4 Rpc框架
Rpc框架是為了幫助我們?cè)诒镜胤?wù)調(diào)用遠(yuǎn)程服務(wù)時(shí)像調(diào)用本地服務(wù)一樣簡(jiǎn)單,我們不需要關(guān)心其底層實(shí)現(xiàn),只需要配置好相應(yīng)的信息,rpc框架就會(huì)幫我們做這些事。例如在dubbo中,我們只需要配置好相應(yīng)的注冊(cè)中心與想要調(diào)用的方法,我們就可以按照本地調(diào)用的方式調(diào)用遠(yuǎn)程服務(wù)。
1.5 總結(jié)
按照我們上文的梳理過(guò)程,可以認(rèn)為Rpc是一種概念,主要有兩種實(shí)現(xiàn),一種是以http方式的服務(wù)調(diào)用,另一種是以自定義Tcp協(xié)議實(shí)現(xiàn)的方法調(diào)用方式,例如dubbo協(xié)議,當(dāng)然一般rpc框架也都支持http協(xié)議。當(dāng)然,無(wú)論是那種方式,最終都是以Tcp/Udp的方式進(jìn)行傳輸。
二、Rpc框架
2.1 dubbo是什么
我們上文說(shuō)到Rpc框架就是幫助我們?cè)谡{(diào)用遠(yuǎn)程服務(wù)時(shí)像調(diào)用本地服務(wù)一樣簡(jiǎn)單,dubbo就是由阿里巴巴開源的一塊rpc框架。
例如,在我們想調(diào)用某個(gè)遠(yuǎn)程方法時(shí),只需要配置好相關(guān)配置,然后直接調(diào)用即可,dubbo會(huì)幫助我們將處理中間的過(guò)程。
/* 省略相關(guān)配置 */ //將配置注冊(cè)到spring @Resource private QueryPinService queryPinService; //直接使用遠(yuǎn)程方法,像調(diào)用本地服務(wù)一樣簡(jiǎn)單 ueryPinService.getPinWithConfig(paramMap, null);
dubbo整體架構(gòu)圖如下:
節(jié)點(diǎn) | 說(shuō)明 |
---|---|
Provider | 提供遠(yuǎn)程服務(wù)的服務(wù)提供方 |
Registry | 注冊(cè)中心 |
Consumer | 需要調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方 |
Container | 服務(wù)運(yùn)行的容器 |
Monitor | 監(jiān)控中心 |
作用流程大致如下:
首先服務(wù)提供者Provider 啟動(dòng)然后向注冊(cè)中心注冊(cè)自己所能提供的服務(wù)。
服務(wù)消費(fèi)者Consumer 啟動(dòng)向注冊(cè)中心訂閱自己所需的服務(wù)。然后注冊(cè)中心將提供者元信息通知給 Consumer, 之后 Consumer 因?yàn)橐呀?jīng)從注冊(cè)中心獲取提供者的地址,因此可以通過(guò)負(fù)載均衡選擇一個(gè) Provider 直接調(diào)用。
之后服務(wù)提供方元數(shù)據(jù)變更的話注冊(cè)中心會(huì)把變更推送給服務(wù)消費(fèi)者。
服務(wù)提供者和消費(fèi)者都會(huì)在內(nèi)存中記錄著調(diào)用的次數(shù)和時(shí)間,然后定時(shí)的發(fā)送統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。
2.2 dubbo和spring cloud的區(qū)別
首先兩者都是當(dāng)前主流的微服務(wù)框架,不過(guò)兩者也存在很多差異:
初始定位不同:SpringCloud定位為微服務(wù)架構(gòu)下的一站式解決方案,主要有網(wǎng)關(guān)、注冊(cè)中心、配置中心、監(jiān)控中心等;Dubbo 是 它的關(guān)注點(diǎn)主要在于服務(wù)的調(diào)用和治理,其中服務(wù)調(diào)用更時(shí)其核心。
生態(tài)環(huán)境不同:SpringCloud依托于Spring平臺(tái),具備更加完善的生態(tài)體系;而Dubbo一開始只是做RPC遠(yuǎn)程調(diào)用,生態(tài)相對(duì)匱乏,現(xiàn)在逐漸豐富起來(lái)。
調(diào)用方式:SpringCloud是采用Http協(xié)議做遠(yuǎn)程調(diào)用,接口一般是Rest風(fēng)格,比較靈活;Dubbo是采用Dubbo協(xié)議,接口一般是Java的Service接口,格式固定。但調(diào)用時(shí)采用Netty的NIO方式,性能較好。
兩者組件配置:
很明顯SpringCloud擁有比dubbo更完善的配置,支持的功能性也更強(qiáng)。
相比來(lái)說(shuō),SpringCloud像一臺(tái)品牌機(jī),內(nèi)部所有配置都已經(jīng)幫我們裝配好了,我們只需要開箱即用即可。而dubbo則更像是組裝機(jī),需要我們自己選擇配置,只提供了核心的計(jì)算能力,而顯示器、電源等需要我們自己裝配調(diào)試使用。
從使用者來(lái)說(shuō),新手小白更適合品牌機(jī),傻瓜式一鍵操作,就能完成我們想要的效果。而dubbo更適合電腦高手,自己裝配自己想要的組件,使用起來(lái)更順手。
審核編輯 黃宇
-
RPC
+關(guān)注
關(guān)注
0文章
111瀏覽量
11581 -
源碼
+關(guān)注
關(guān)注
8文章
653瀏覽量
29472 -
Dubbo
+關(guān)注
關(guān)注
0文章
20瀏覽量
3198
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
獨(dú)家專訪阿里高級(jí)技術(shù)專家北緯:Dubbo開源重啟半年來(lái)的快意江湖
獨(dú)家專訪阿里高級(jí)技術(shù)專家北緯:Dubbo開源重啟半年來(lái)的快意江湖
聊聊Dubbo - Dubbo可擴(kuò)展機(jī)制實(shí)戰(zhàn)
聊聊Dubbo - Dubbo可擴(kuò)展機(jī)制源碼解析
Dubbo開源現(xiàn)狀與未來(lái)規(guī)劃
攜程的 Dubbo 之路
Dubbo解析及原理淺析
![<b class='flag-5'>Dubbo</b>解析及原理<b class='flag-5'>淺析</b>](https://file.elecfans.com/web1/M00/45/E0/o4YBAFp6scqAIVa6AAEpe7RR3SA010.png)
Dubbo源代碼實(shí)現(xiàn)服務(wù)調(diào)用的動(dòng)態(tài)代理和負(fù)載均衡
服務(wù)化改造實(shí)踐(一)| Dubbo + ZooKeeper
![服務(wù)化改造實(shí)踐(<b class='flag-5'>一</b>)| <b class='flag-5'>Dubbo</b> + ZooKeeper](https://file.elecfans.com/web1/M00/61/59/pIYBAFuDuCaANVyLAAEeMg_F3gA954.png)
dubbo-go 中的 TPS Limit 設(shè)計(jì)與實(shí)現(xiàn)
Dubbo 如何成為連接異構(gòu)微服務(wù)體系的最佳服務(wù)開發(fā)框架
![<b class='flag-5'>Dubbo</b> 如何成為連接異構(gòu)微服務(wù)體系的最佳服務(wù)開發(fā)<b class='flag-5'>框架</b>](https://file.elecfans.com/web1/M00/B1/EB/o4YBAF4Fs7OAHo9BAAGm5qZ37VY979.png)
阿里用什么替代了dubbo
Dubbo Gateway基于Java的Dubbo網(wǎng)關(guān)實(shí)現(xiàn)
![<b class='flag-5'>Dubbo</b> Gateway基于Java的<b class='flag-5'>Dubbo</b>網(wǎng)關(guān)實(shí)現(xiàn)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論