http是指從客戶(hù)端到服務(wù)器端的請(qǐng)求消息,rpc是遠(yuǎn)程過(guò)程調(diào)用協(xié)議,它們之間有什么區(qū)別呢,下面是小編整理的相關(guān)內(nèi)容,希望對(duì)大家有所幫助!
rpc和http的存在重大不同的是:http請(qǐng)求是使用具有標(biāo)準(zhǔn)語(yǔ)義的通用的接口定向到資源的,這些語(yǔ)義能夠被中間組件和提供服務(wù)的來(lái)源機(jī)器進(jìn)行解釋。結(jié)果是使得一個(gè)應(yīng)用支持分層的轉(zhuǎn)換(layers of transformation)和間接層(indirection),并且獨(dú)立于消息的來(lái)源,這對(duì)于一個(gè)Internet規(guī)模、多個(gè)組織、無(wú)法控制的可伸縮性的信息系統(tǒng)來(lái)說(shuō),是非常有用的。與之相比較,rpc的機(jī)制是根據(jù)語(yǔ)言的API(language API)來(lái)定義的,而不是根據(jù)基于網(wǎng)絡(luò)的應(yīng)用來(lái)定義的。
HTTP和RPC的優(yōu)缺點(diǎn)主要來(lái)闡述HTTP和RPC的異同,讓大家更容易根據(jù)自己的實(shí)際情況選擇更適合的方案。
傳輸協(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ù)治理
性能消耗
RPC:可以基于thrift實(shí)現(xiàn)高效的二進(jìn)制傳輸
HTTP:大部分是通過(guò)json來(lái)實(shí)現(xiàn)的,字節(jié)大小和序列化耗時(shí)都比thrift要更消耗性能
負(fù)載均衡
RPC:基本都自帶了負(fù)載均衡策略
HTTP:需要配置Nginx,HAProxy來(lái)實(shí)現(xiàn)
服務(wù)治理
RPC:能做到自動(dòng)通知,不影響上游
HTTP:需要事先通知,修改Nginx/HAProxy配置
總結(jié)
RPC主要用于公司內(nèi)部的服務(wù)調(diào)用,性能消耗低,傳輸效率高,服務(wù)治理方便。HTTP主要用于對(duì)外的異構(gòu)環(huán)境,瀏覽器接口調(diào)用,APP接口調(diào)用,第三方接口調(diào)用等。