溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

RPC服務(wù)與HTTP服務(wù)的區(qū)別是什么

發(fā)布時(shí)間:2021-07-09 17:23:32 來源:億速云 閱讀:589 作者:Leah 欄目:大數(shù)據(jù)

RPC服務(wù)與HTTP服務(wù)的區(qū)別是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

1、什么是RPC

RPC(Remote Procedure Call)—遠(yuǎn)程過程調(diào)用,它是一種通過網(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使得開發(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ò)七層模型

在說RPC和HTTP的區(qū)別之前,我覺的有必要了解一下OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)模型,它可以分為以下幾層(自下而上):

RPC服務(wù)與HTTP服務(wù)的區(qū)別是什么

第一層:物理層。這一層主要就是傳輸這些二進(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)單地說一下,一個(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ò)消息,再通過網(wǎng)絡(luò)發(fā)送給服務(wù)方

3、 服務(wù)端存根(Server Stub):接受客戶端發(fā)送過來的消息并解包,再調(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)行。

RPC服務(wù)與HTTP服務(wù)的區(qū)別是什么

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é)。開發(fā)人員在使用的時(shí)候只需要了解誰(shuí)在什么位置提供了什么樣的遠(yuǎn)程服務(wù)接口即可,并不需要關(guān)心底層通信細(xì)節(jié)和調(diào)用過程。

5、常見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ì)包含很多無用的內(nèi)容,如果是基于HTTP2.0,那么簡(jiǎn)單的封裝以下是可以作為一個(gè)RPC來使用的,這時(shí)標(biāo)準(zhǔn)RPC框架更多的是服務(wù)治理

性能消耗,主要在于序列化和反序列化的耗時(shí)

RPC,可以基于thrift實(shí)現(xiàn)高效的二進(jìn)制傳輸

HTTP,大部分是通過json來實(shí)現(xiàn)的,字節(jié)大小和序列化耗時(shí)都比thrift要更消耗性能

負(fù)載均衡

RPC,基本都自帶了負(fù)載均衡策略

HTTP,需要配置Nginx,HAProxy來實(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)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI