什么是HTTP,什么是RPC
HTTP
超文本傳送協(xié)議HTTP規(guī)定在HTTP客戶和HTTP服務(wù)器之間的每次交互,都由一個(gè)ASCII碼串構(gòu)成的請求和一個(gè)類似的通用互聯(lián)網(wǎng)擴(kuò)充嗅定,即“類MIME(MIME-like)”的響應(yīng)組成腺毫。HTTP報(bào)文通常都使用TCP連接傳送。
HTTP基礎(chǔ)可以參考HTTP協(xié)議——超文本傳送協(xié)議
RPC
遠(yuǎn)程過程調(diào)用RPC(Remote Procedure Call)是一種計(jì)算機(jī)通信協(xié)議摸袁,允許一個(gè)節(jié)點(diǎn)調(diào)用另外一個(gè)節(jié)點(diǎn)的程序,而感覺上就像調(diào)用本地的程序一樣义屏。發(fā)送請求的節(jié)點(diǎn)是客戶端(Client)靠汁,處理請求并且執(zhí)行返回結(jié)果的是服務(wù)端(Server)。
RPC主要包括兩部分傳輸協(xié)議和序列化協(xié)議闽铐,常用的Thrift既是傳輸協(xié)議蝶怔,也是序列化協(xié)議。
HTTP vs RPC
一種說法RPC比HTTP更快
不單是效率這么簡單兄墅。HTTP2.0逐漸被越來越多的網(wǎng)站應(yīng)用踢星,優(yōu)化數(shù)據(jù)傳輸?shù)男剩嗦窂?fù)用技術(shù)的應(yīng)用也增加了服務(wù)器響應(yīng)的速度隙咸。簡單地說RPC比HTTP更快是片面沐悦,而且不準(zhǔn)確的。
從兩個(gè)方面比較
傳輸協(xié)議
HTTP報(bào)文通常都使用TCP連接傳送五督。而RPC因企業(yè)內(nèi)部自己使用可能存在多種不同的協(xié)議藏否,例如gRPC使用HTTP2協(xié)議,dubbo使用自定義的TCP協(xié)議充包。
因?yàn)镠TTP協(xié)議是通用協(xié)議副签,在自主性方面有先天不足,一些信息無論是否需要其實(shí)都需要傳輸,比如HTTP1.1的開始行淆储、首部行和實(shí)體主體這些幾乎都是不可以缺少的冠场,而且實(shí)體主體的編碼格式也需要統(tǒng)一,由于諸多的限制本砰,比起規(guī)范更加寬松的RPC傳輸協(xié)議自然傳輸效率更可能相對低一些慈鸠。從這方面看HTTP更具有普適性。
同樣灌具,規(guī)范更加寬松的RPC可以面向服務(wù)封裝自定義的一些特性青团,例如適時(shí)熔斷,服務(wù)發(fā)現(xiàn)等等咖楣,另外根據(jù)需要也會做一些效率和可用性上的優(yōu)化督笆。
序列化協(xié)議
同樣地,在序列化協(xié)議上诱贿,HTTP也因?yàn)榫哂衅者m性而不如RPC的可操作性強(qiáng)娃肿。
總結(jié)
在對外提供接口時(shí),因?yàn)橐哂写蠹叶颊J(rèn)可的統(tǒng)一的協(xié)議珠十,因?yàn)槠者m性料扰,HTTP是首選。對內(nèi)部提供接口時(shí)焙蹭,良好的面向服務(wù)封裝的RPC更具有競爭力晒杈,可以針對服務(wù)進(jìn)行可用性和效率的優(yōu)化,包括業(yè)務(wù)需要上的服務(wù)發(fā)現(xiàn)孔厉、熔斷等拯钻;也包括單純技術(shù)上的序列化的優(yōu)化提高傳輸效率。