2.1.認識RPC
RPC盅粪,即 Remote Procedure Call(遠程過程調(diào)用)钓葫,是一個計算機通信協(xié)議。 該協(xié)議允許運行于一臺計算機的程序調(diào)用另一臺計算機的子程序票顾,而程序員無需額外地為這個交互作用編程础浮。說得通俗一點就是:A計算機提供一個服務帆调,B計算機可以像調(diào)用本地服務那樣調(diào)用A計算機的服務。
通過上面的概念豆同,我們可以知道番刊,實現(xiàn)RPC主要是做到兩點:
- 實現(xiàn)遠程調(diào)用其他計算機的服務
- 要實現(xiàn)遠程調(diào)用,肯定是通過網(wǎng)絡傳輸數(shù)據(jù)影锈。A程序提供服務芹务,B程序通過網(wǎng)絡將請求參數(shù)傳遞給A,A本地執(zhí)行后得到結(jié)果鸭廷,再將結(jié)果返回給B程序枣抱。這里需要關注的有兩點:
- 1)采用何種網(wǎng)絡通訊協(xié)議?
- 現(xiàn)在比較流行的RPC框架辆床,都會采用TCP作為底層傳輸協(xié)議
- 2)數(shù)據(jù)傳輸?shù)母袷皆鯓樱?
- 兩個程序進行通訊佳晶,必須約定好數(shù)據(jù)傳輸格式。就好比兩個人聊天佛吓,要用同一種語言,否則無法溝通垂攘。所以维雇,我們必須定義好請求和響應的格式。另外晒他,數(shù)據(jù)在網(wǎng)路中傳輸需要進行序列化吱型,所以還需要約定統(tǒng)一的序列化的方式。
- 1)采用何種網(wǎng)絡通訊協(xié)議?
- 要實現(xiàn)遠程調(diào)用,肯定是通過網(wǎng)絡傳輸數(shù)據(jù)影锈。A程序提供服務芹务,B程序通過網(wǎng)絡將請求參數(shù)傳遞給A,A本地執(zhí)行后得到結(jié)果鸭廷,再將結(jié)果返回給B程序枣抱。這里需要關注的有兩點:
- 像調(diào)用本地服務一樣調(diào)用遠程服務
- 如果僅僅是遠程調(diào)用陨仅,還不算是RPC津滞,因為RPC強調(diào)的是過程調(diào)用,調(diào)用的過程對用戶而言是應該是透明的灼伤,用戶不應該關心調(diào)用的細節(jié)触徐,可以像調(diào)用本地服務一樣調(diào)用遠程服務。所以RPC一定要對調(diào)用的過程進行封裝
RPC調(diào)用流程圖:
想要了解詳細的RPC實現(xiàn)狐赡,給大家推薦一篇文章:自己動手實現(xiàn)RPC
2.2.認識Http
Http協(xié)議:超文本傳輸協(xié)議撞鹉,是一種應用層協(xié)議。規(guī)定了網(wǎng)絡傳輸?shù)恼埱蟾袷接敝丁㈨憫袷侥癯①Y源定位和操作的方式等。但是底層采用什么網(wǎng)絡傳輸協(xié)議览祖,并沒有規(guī)定孝鹊,不過現(xiàn)在都是采用TCP協(xié)議作為底層傳輸協(xié)議。說到這里展蒂,大家可能覺得又活,Http與RPC的遠程調(diào)用非常像苔咪,都是按照某種規(guī)定好的數(shù)據(jù)格式進行網(wǎng)絡通信,有請求皇钞,有響應悼泌。沒錯,在這點來看夹界,兩者非常相似馆里,但是還是有一些細微差別。
- RPC并沒有規(guī)定數(shù)據(jù)傳輸格式可柿,這個格式可以任意指定鸠踪,不同的RPC協(xié)議,數(shù)據(jù)格式不一定相同复斥。
- Http中還定義了資源定位的路徑营密,RPC中并不需要
- 最重要的一點:RPC需要滿足像調(diào)用本地服務一樣調(diào)用遠程服務,也就是對調(diào)用過程在API層面進行封裝目锭。Http協(xié)議沒有這樣的要求评汰,因此請求、響應等細節(jié)需要我們自己去實現(xiàn)痢虹。
- 優(yōu)點:RPC方式更加透明被去,對用戶更方便。Http方式更靈活奖唯,沒有規(guī)定API和語言惨缆,跨語言、跨平臺
- 缺點:RPC方式需要在API層面進行封裝丰捷,限制了開發(fā)的語言環(huán)境坯墨。
例如我們通過瀏覽器訪問網(wǎng)站,就是通過Http協(xié)議病往。只不過瀏覽器把請求封裝裆馒,發(fā)起請求以及接收響應猜丹,解析響應的事情都幫我們做了嫉柴。如果是不通過瀏覽器求类,那么這些事情都需要自己去完成。
2.3.如何選擇叠穆?
既然兩種方式都可以實現(xiàn)遠程調(diào)用少漆,我們該如何選擇呢?
- 速度來看硼被,RPC要比http更快示损,雖然底層都是TCP,但是http協(xié)議的信息往往比較臃腫嚷硫,不過可以采用gzip壓縮检访。
- 難度來看始鱼,RPC實現(xiàn)較為復雜,http相對比較簡單
- 靈活性來看脆贵,http更勝一籌医清,因為它不關心實現(xiàn)細節(jié),跨平臺卖氨、跨語言会烙。
因此,兩者都有不同的使用場景:
- 如果對效率要求更高筒捺,并且開發(fā)過程使用統(tǒng)一的技術(shù)棧柏腻,那么用RPC還是不錯的。
- 如果需要更加靈活系吭,跨語言五嫂、跨平臺,顯然http更合適
那么我們該怎么選擇呢肯尺?
微服務沃缘,更加強調(diào)的是獨立、自治则吟、靈活槐臀。而RPC方式的限制較多,因此微服務框架中逾滥,一般都會采用基于Http的Rest風格服務峰档。