一、什么是RPC
1.1 RPC概念
RPC,Remote Procedure Call 即遠程過程調用,與之相對的是本地服務調用,即LPC(Local Procedure Call)。本地服務調用比較常用,像我們應用內部程序**(注意此處是程序而不是方法,程序包含方法)**互相調用即為本地過程調用,而遠程過程調用是指在本地調取遠程過程進行使用。
而RPC框架就是為了幫助我們在本地調用遠程過程時,就像調用本地過程一樣方便。
1.2 RPC與Http的關系
用一句話來總結就是:
RPC是一種概念,http是一種協議,可以認為http是Rpc的一種實現,或者Rpc包含了http。為什么說包含而不是相等,是因為Rpc還有很多基于自定義的Tcp的協議,例如Dubbo等,而我們常說的rpc即指的除Http之外的基于tcp自定義的協議。
1.3 關于Rpc的思考
網上關于Rpc與Http的相關文章并不少,很多人在解釋RPC概念時會提到其是執行遠程的方法,然后直接得出rpc包含http的結論。其實如果按照此概念去思考的話,其實并不能得出Http是Rpc的一種實現。因為http調用的方式,從使用者的角度來說,并不是直接調用其方法,而是按照一定的方式,完善出了一條http請求,然后交由本地客戶端進行數據傳輸。
而相對比的,如果用過相關Rpc框架,例如Dubbo,是可以像調用本地方法一樣直接調用遠程方法。而http的調用方式可以認為是一種服務調用,而不是一種方法。
感覺文章博主應該是有過rpc相關的使用經驗,有點先入為主了。那么到底rpc與http的關系如何呢,我也思考了很久,后面發現應該從定義上入手,我們既然在討論Rpc是什么,怎么能忽略最簡單的定義呢。
Remote Procedure Call ,其中"Procedure"按照谷歌翻譯有以下幾種解釋:程序、過程、步驟,并不是 方法(Method)。而程序是包含方法的,同時也包含服務。因此上文中才強調了是一種程序或過程,而不是方法。
1.4 Rpc框架
Rpc框架是為了幫助我們在本地服務調用遠程服務時像調用本地服務一樣簡單,我們不需要關心其底層實現,只需要配置好相應的信息,rpc框架就會幫我們做這些事。例如在dubbo中,我們只需要配置好相應的注冊中心與想要調用的方法,我們就可以按照本地調用的方式調用遠程服務。
1.5 總結
按照我們上文的梳理過程,可以認為Rpc是一種概念,主要有兩種實現,一種是以http方式的服務調用,另一種是以自定義Tcp協議實現的方法調用方式,例如dubbo協議,當然一般rpc框架也都支持http協議。當然,無論是那種方式,最終都是以Tcp/Udp的方式進行傳輸。
二、Rpc框架
2.1 dubbo是什么
我們上文說到Rpc框架就是幫助我們在調用遠程服務時像調用本地服務一樣簡單,dubbo就是由阿里巴巴開源的一塊rpc框架。
例如,在我們想調用某個遠程方法時,只需要配置好相關配置,然后直接調用即可,dubbo會幫助我們將處理中間的過程。
/* 省略相關配置 */ //將配置注冊到spring @Resource private QueryPinService queryPinService; //直接使用遠程方法,像調用本地服務一樣簡單 ueryPinService.getPinWithConfig(paramMap, null);
dubbo整體架構圖如下:
節點 | 說明 |
---|---|
Provider | 提供遠程服務的服務提供方 |
Registry | 注冊中心 |
Consumer | 需要調用遠程服務的服務消費方 |
Container | 服務運行的容器 |
Monitor | 監控中心 |
作用流程大致如下:
首先服務提供者Provider 啟動然后向注冊中心注冊自己所能提供的服務。
服務消費者Consumer 啟動向注冊中心訂閱自己所需的服務。然后注冊中心將提供者元信息通知給 Consumer, 之后 Consumer 因為已經從注冊中心獲取提供者的地址,因此可以通過負載均衡選擇一個 Provider 直接調用。
之后服務提供方元數據變更的話注冊中心會把變更推送給服務消費者。
服務提供者和消費者都會在內存中記錄著調用的次數和時間,然后定時的發送統計數據到監控中心。
2.2 dubbo和spring cloud的區別
首先兩者都是當前主流的微服務框架,不過兩者也存在很多差異:
初始定位不同:SpringCloud定位為微服務架構下的一站式解決方案,主要有網關、注冊中心、配置中心、監控中心等;Dubbo 是 它的關注點主要在于服務的調用和治理,其中服務調用更時其核心。
生態環境不同:SpringCloud依托于Spring平臺,具備更加完善的生態體系;而Dubbo一開始只是做RPC遠程調用,生態相對匱乏,現在逐漸豐富起來。
調用方式:SpringCloud是采用Http協議做遠程調用,接口一般是Rest風格,比較靈活;Dubbo是采用Dubbo協議,接口一般是Java的Service接口,格式固定。但調用時采用Netty的NIO方式,性能較好。
兩者組件配置:
很明顯SpringCloud擁有比dubbo更完善的配置,支持的功能性也更強。
相比來說,SpringCloud像一臺品牌機,內部所有配置都已經幫我們裝配好了,我們只需要開箱即用即可。而dubbo則更像是組裝機,需要我們自己選擇配置,只提供了核心的計算能力,而顯示器、電源等需要我們自己裝配調試使用。
從使用者來說,新手小白更適合品牌機,傻瓜式一鍵操作,就能完成我們想要的效果。而dubbo更適合電腦高手,自己裝配自己想要的組件,使用起來更順手。
審核編輯 黃宇
-
RPC
+關注
關注
0文章
110瀏覽量
11471 -
源碼
+關注
關注
8文章
622瀏覽量
28884 -
Dubbo
+關注
關注
0文章
18瀏覽量
3153
發布評論請先 登錄
相關推薦
評論