http是指從客戶端到服務(wù)器端的請求消息,rpc是遠程過程調(diào)用協(xié)議,http請求是使用具有標準語義的通用的接口定向到資源的,這些語義能夠被中間組件和提供服務(wù)的來源機器進行解釋。rpc的機制是根據(jù)語言的API(language API)來定義的,而不是根據(jù)基于網(wǎng)絡(luò)的應(yīng)用來定義的。
rpc和http的區(qū)別是什么
rpc和http的存在重大不同的是:http請求是使用具有標準語義的通用的接口定向到資源的,這些語義能夠被中間組件和提供服務(wù)的來源機器進行解釋。
結(jié)果是使得一個應(yīng)用支持分層的轉(zhuǎn)換(layers of transformation)和間接層(indirection),并且獨立于消息的來源,這對于一個Internet規(guī)模、多個組織、無法控制的可伸縮性的信息系統(tǒng)來說,是非常有用的。
與之相比較,rpc的機制是根據(jù)語言的API(language API)來定義的,而不是根據(jù)基于網(wǎng)絡(luò)的應(yīng)用來定義的。
HTTP和RPC的優(yōu)缺點
主要來闡述HTTP和RPC的異同,讓大家更容易根據(jù)自己的實際情況選擇更適合的方案。
傳輸協(xié)議
RPC:可以基于TCP協(xié)議,也可以基于HTTP協(xié)議
HTTP:基于HTTP協(xié)議
傳輸效率
RPC:使用自定義的TCP協(xié)議,可以讓請求報文體積更小,或者使用HTTP2協(xié)議,也可以很好的減少報文的體積,提高傳輸效率
HTTP:如果是基于HTTP1.1的協(xié)議,請求中會包含很多無用的內(nèi)容,如果是基于HTTP2.0,那么簡單的封裝以下是可以作為一個RPC來使用的,這時標準RPC框架更多的是服務(wù)治理
性能消耗
RPC:可以基于thrift實現(xiàn)高效的二進制傳輸
HTTP:大部分是通過json來實現(xiàn)的,字節(jié)大小和序列化耗時都比thrift要更消耗性能
負載均衡
RPC:基本都自帶了負載均衡策略
HTTP:需要配置Nginx,HAProxy來實現(xiàn)
服務(wù)治理
RPC:能做到自動通知,不影響上游
HTTP:需要事先通知,修改Nginx/HAProxy配置
總結(jié)
RPC主要用于公司內(nèi)部的服務(wù)調(diào)用,性能消耗低,傳輸效率高,服務(wù)治理方便。HTTP主要用于對外的異構(gòu)環(huán)境,瀏覽器接口調(diào)用,APP接口調(diào)用,第三方接口調(diào)用等。