RPC服務(wù)與HTTP服務(wù)的區(qū)別是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司擁有十多年成都網(wǎng)站建設(shè)工作經(jīng)驗(yàn),為各大企業(yè)提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)服務(wù),對(duì)于網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、app軟件開(kāi)發(fā)公司、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、國(guó)際域名空間等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷、管理等網(wǎng)站化運(yùn)作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項(xiàng)目的能力。
1、什么是RPC
RPC(Remote Procedure Call)—遠(yuǎn)程過(guò)程調(diào)用,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡(luò)通信模型中,RPC跨越了傳輸層和應(yīng)用層。RPC使得開(kāi)發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。
RPC采用客戶機(jī)/服務(wù)器(c/s)模式。請(qǐng)求程序就是一個(gè)客戶機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器。首先,客戶機(jī)調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個(gè)調(diào)用信息,最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。
2、OSI網(wǎng)絡(luò)七層模型
在說(shuō)RPC和HTTP的區(qū)別之前,我覺(jué)的有必要了解一下OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)模型,它可以分為以下幾層(自下而上):
第一層:物理層。這一層主要就是傳輸這些二進(jìn)制數(shù)據(jù)。
第二層:鏈路層。將上面的網(wǎng)絡(luò)層的數(shù)據(jù)包封裝成數(shù)據(jù)幀,便于物理層傳輸;
第三層:網(wǎng)絡(luò)層。定義網(wǎng)絡(luò)設(shè)備間如何傳輸數(shù)據(jù);
第四層:傳輸層。管理著網(wǎng)絡(luò)中的端到端的數(shù)據(jù)傳輸;
第五層:會(huì)話層。管理用戶的會(huì)話,控制用戶間邏輯連接的建立和中斷;
第六層:表示層。定義不同的系統(tǒng)中數(shù)據(jù)的傳輸格式,編碼和解碼規(guī)范等;
第七層:應(yīng)用層。定義了用于在網(wǎng)絡(luò)中進(jìn)行通信和傳輸數(shù)據(jù)的接口;
3、RPC調(diào)用流程
簡(jiǎn)單地說(shuō)一下,一個(gè)完整的RPC架構(gòu)里面包含了四個(gè)核心的組件,分別是Client ,Server,Client Stub以及Server Stub
1、 客戶端(RPC Client):服務(wù)調(diào)用方
2、 客戶端存根(Client Stub):存放服務(wù)端地址信息,將客戶端的請(qǐng)求參數(shù)打包成網(wǎng)絡(luò)消息,再通過(guò)網(wǎng)絡(luò)發(fā)送給服務(wù)方
3、 服務(wù)端存根(Server Stub):接受客戶端發(fā)送過(guò)來(lái)的消息并解包,再調(diào)用本地服務(wù)
4、 服務(wù)端(RPC Server):真正的服務(wù)提供者。
RPC采用C/S模式,請(qǐng)求程序就是一個(gè)客戶端應(yīng)用,而服務(wù)提供者就是一個(gè)服務(wù)器。首先,服務(wù)消費(fèi)者(RPC客戶端應(yīng)用)調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。在服務(wù)提供方(RPC服務(wù)器端),進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),調(diào)用服務(wù)端方法對(duì)調(diào)用請(qǐng)求進(jìn)行計(jì)算而得到計(jì)算結(jié)果,并發(fā)送答復(fù)信息,然后等待下一個(gè)調(diào)用信息;最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。
4、RPC架構(gòu)的作用
RPC 的主要目標(biāo)是讓構(gòu)建分布式計(jì)算(應(yīng)用)更容易、透明,在提供強(qiáng)大的遠(yuǎn)程調(diào)用能力時(shí)不損失本地調(diào)用的語(yǔ)義簡(jiǎn)潔性。為實(shí)現(xiàn)該目標(biāo),RPC 框架需提供一種透明調(diào)用機(jī)制讓使用者不必顯式的區(qū)分本地調(diào)用和遠(yuǎn)程調(diào)用。RPC框架負(fù)責(zé)屏蔽底層的傳輸方式(TCP或者UDP)、序列化方式(XML/JSON/二進(jìn)制)和通信細(xì)節(jié)。開(kāi)發(fā)人員在使用的時(shí)候只需要了解誰(shuí)在什么位置提供了什么樣的遠(yuǎn)程服務(wù)接口即可,并不需要關(guān)心底層通信細(xì)節(jié)和調(diào)用過(guò)程。
5、常見(jiàn)RPC技術(shù)和框架
(1)、應(yīng)用級(jí)的服務(wù)框架:阿里的Dubbo/Dubbox、Google GRPC、Spring Boot/Spring Cloud。
(2)、遠(yuǎn)程通信協(xié)議:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
(3)、通信框架:MINA和Netty
6、HTTP服務(wù) VS RPC服務(wù)
傳輸協(xié)議
RPC,可以基于TCP協(xié)議,也可以基于HTTP協(xié)議
HTTP,基于HTTP協(xié)議
傳輸效率
RPC,使用自定義的TCP協(xié)議,可以讓請(qǐng)求報(bào)文體積更小,或者使用HTTP2協(xié)議,也可以很好的減少報(bào)文的體積,提高傳輸效率
HTTP,如果是基于HTTP1.1的協(xié)議,請(qǐng)求中會(huì)包含很多無(wú)用的內(nèi)容,如果是基于HTTP2.0,那么簡(jiǎn)單的封裝以下是可以作為一個(gè)RPC來(lái)使用的,這時(shí)標(biāo)準(zhǔn)RPC框架更多的是服務(wù)治理
性能消耗,主要在于序列化和反序列化的耗時(shí)
RPC,可以基于thrift實(shí)現(xiàn)高效的二進(jìn)制傳輸
HTTP,大部分是通過(guò)json來(lái)實(shí)現(xiàn)的,字節(jié)大小和序列化耗時(shí)都比thrift要更消耗性能
RPC,基本都自帶了負(fù)載均衡策略
HTTP,需要配置Nginx,HAProxy來(lái)實(shí)現(xiàn)
服務(wù)治理(下游服務(wù)新增,重啟,下線時(shí)如何不影響上游調(diào)用者)
RPC,能做到自動(dòng)通知,不影響上游
HTTP,需要事先通知,修改Nginx/HAProxy配置
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。