prc是什么意思(为啥需要RPC,而不是简单的HTTP?)
一、七層網(wǎng)絡(luò)結(jié)構(gòu)模型:我們先來了解一下OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)模型(雖然實(shí)際應(yīng)用中基本上都是五層),它可以分為以下幾層:(從上到下)第一層:應(yīng)用層。定義了用于在網(wǎng)絡(luò)中進(jìn)行通信和傳輸數(shù)據(jù)的接口;第二層:表示層。定義不同的系統(tǒng)中數(shù)據(jù)的傳輸格式,編碼和解碼規(guī)范等;第三層:會話層。管理用戶的會話,控制用戶間邏輯
一、七層網(wǎng)絡(luò)結(jié)構(gòu)模型:
我們先來了解一下OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)模型(雖然實(shí)際應(yīng)用中基本上都是五層),它可以分為以下幾層:(從上到下)
-
第一層:應(yīng)用層。定義了用于在網(wǎng)絡(luò)中進(jìn)行通信和傳輸數(shù)據(jù)的接口;
-
第二層:表示層。定義不同的系統(tǒng)中數(shù)據(jù)的傳輸格式,編碼和解碼規(guī)范等;
-
第三層:會話層。管理用戶的會話,百思特網(wǎng)控制用戶間邏輯連接的建立和中斷;
-
第四層:傳輸層。管理著網(wǎng)絡(luò)中的端到端的數(shù)據(jù)傳輸;
-
第五層:網(wǎng)絡(luò)層。定義網(wǎng)絡(luò)設(shè)備間如何傳輸數(shù)據(jù);
-
第六層:鏈路層。將上面的網(wǎng)絡(luò)層的數(shù)據(jù)包封裝成數(shù)據(jù)幀,便于物理層傳輸;
-
第七層:物理層。這一層主要就是傳輸這些二進(jìn)制數(shù)據(jù)。
實(shí)際應(yīng)用過程中,五層協(xié)議結(jié)構(gòu)里面是沒有表示層和會話層的。應(yīng)該說它們和應(yīng)用層合并了。我們應(yīng)該將重點(diǎn)放在應(yīng)用層和傳輸層這兩個層面。因?yàn)镠TTP是應(yīng)用層協(xié)議,而TCP是傳輸層協(xié)議。好,知道了網(wǎng)絡(luò)的分層模型以后我們可以更好地理解為什么RPC服務(wù)相比HTTP服務(wù)要Nice一些!
二、HTTP 服務(wù):
其實(shí)在很久以前,我對于企業(yè)開發(fā)的模式一直定性為HTTP接口開發(fā),也就是我們常說的RESTful風(fēng)格的服務(wù)接口。的確,對于在接口不多、系統(tǒng)與系統(tǒng)交互較少的情況下,解決信息孤島初期常使用的一種通信手段;優(yōu)點(diǎn)就是簡單、直接、開發(fā)方便。利用現(xiàn)成的http協(xié)議進(jìn)行傳輸。我們記得之前實(shí)習(xí)在公司做后臺開發(fā)的時候,主要就是進(jìn)行接口的開發(fā),還要寫一大份接口文檔,嚴(yán)格地標(biāo)明輸入輸出是什么?說清楚每一個接口的請求方法,以及請求參數(shù)需要注意的事項(xiàng)等。比如下面這個例子:
POST http://www.test.百思特網(wǎng)com/restful/user/info
接口可能返回一個JSON字符串或者是XML文檔。然后客戶端再去處理這個返回的信息,從而可以比較快速地進(jìn)行開發(fā)。但是對于大型企業(yè)來說,內(nèi)部子系統(tǒng)較多、接口非常多的情況下,RPC框架的好處就顯示出來了,首先就是長鏈接,不必每次通信都要像http一樣去3次握手什么的,減少了網(wǎng)絡(luò)開銷;其次就是RPC框架一般都有注冊中心,有豐富的監(jiān)控管理;發(fā)布、下線接口、動態(tài)擴(kuò)展等,對調(diào)用方來說是無感知、統(tǒng)一化的操作。
三、RPC 架構(gòu):
一個完整的RPC架構(gòu)里面包含了四個核心的組件,分別是Client ,Server,Client Stub以及Server Stub,這個Stub大家可以理解為存根。分別說說這幾個組件:
-
客戶端(Client),服務(wù)的調(diào)用方。
-
服務(wù)端(Server),真正的服務(wù)提供者。
-
客戶端存根,存放服務(wù)端的地址消息,再將客戶端的請求參數(shù)打包成網(wǎng)絡(luò)消息,然后通過網(wǎng)絡(luò)遠(yuǎn)程發(fā)送給服務(wù)方。
-
服務(wù)端存根,接收客戶端發(fā)送過來的消息,將消息解包,并調(diào)用本地的方法。
四、 什么時候需要PRC:
先來看一下,沒有RPC的時候,會怎么樣:
在過去是這樣的,包括現(xiàn)在很多對企業(yè)服務(wù)可能也是這樣,只有一個包部署在web服務(wù)器里。
那個時候,沒什么需要用到RPC的場景。
然后當(dāng)用戶量大的時候呢?漸漸出現(xiàn)了負(fù)載均衡。大概是這個樣子:
負(fù)載均衡能解決的問題很多,但是還是不夠好,比如說,只是某一個功能模塊(假設(shè)是用戶中心)被訪問的次數(shù)特別頻繁,我可不可以把這部分內(nèi)容單獨(dú)拿出去?用戶中心的機(jī)器獨(dú)立,給它單獨(dú)的帶寬,給他單獨(dú)的服務(wù)器,給他單獨(dú)的數(shù)據(jù)庫?
不這么干其他的功能模塊都干不下去了啊。
以學(xué)校餐廳舉例:
學(xué)校餐廳,可以容納500人同時就餐,但是有一家面館,生意特別好,每到飯點(diǎn)來吃飯的人都有2000人,占滿了餐桌,排隊(duì)好幾百米,餐廳的其他攤位肯定不樂意了吧?
比如那個賣水餃的,雖然每天幾十個人來吃飯。百思特網(wǎng)那也是錢啊。你人這么多,想來我這吃飯的人都擠不進(jìn)來了,
大概情景是這樣的:
這樣能看懂吧?
遇到這種場景怎么辦?不可能不讓面館開門營業(yè)啊,那最好的方式就是:
“你可不可以搬出去?”
你不搬我們搬也行!(哭泣臉,反正我們是再也不要和你家面館開在一起了,必須給我們一個說法)
那么,搬家之后的樣子可能是這樣的。
總結(jié)
以上是生活随笔為你收集整理的prc是什么意思(为啥需要RPC,而不是简单的HTTP?)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 收购Roambi,SAP欲领导商务分析云
- 下一篇: 羊肉哪个部位炖着好吃(羊肉什么部位适合炖