0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

為什么有了HTTP,還需要RPC協(xié)議?

億佰特物聯(lián)網(wǎng)應用專家 ? 2023-08-14 10:05 ? 次閱讀

為什么有了HTTP,還需要RPC協(xié)議呢?在進行說明之前,首先我們需要了解什么是HTTP協(xié)議,什么是RPC協(xié)議。

0ea2595c-3a47-11ee-bbcf-dac502259ad0.png

什么是HTTP協(xié)議?

HTTP是一種廣泛使用的網(wǎng)絡傳輸協(xié)議,它定義了客戶端(如瀏覽器, 手機用戶APP等)和服務器(網(wǎng)站等提供服務的,服務端)之間的通信格式和通信方法,它是基于請求—響應這樣一種通信模型,即服務端根據(jù)請求返回一個響應,在請求和響應中,都包含了兩端(客戶端和服務端)之間進行交互的一些信息,如方法、頭部、正文等。

0eb13288-3a47-11ee-bbcf-dac502259ad0.png

圖1 HTTP交互基本流程圖


HTTP具有很多優(yōu)點,它支持多種數(shù)據(jù)格式和編碼方式,可以實現(xiàn)跨平臺和跨語言的通信,通信簡單、靈活、易于擴展。但是同時它也有一些缺點:

(1)HTTP是無狀態(tài)的,每次請求都需要重新建立連接,這會增加網(wǎng)絡開銷和延遲。

(2)數(shù)據(jù)傳輸是基于文本的,這會導致數(shù)據(jù)量較大,解析效率較低。

(3)安全性較差,因此容易受到中間人攻擊、重放攻擊等。

(4)語義較弱,HTTP只能表達基本的增刪改查操作,不能滿足復雜的業(yè)務邏輯。

0ec55308-3a47-11ee-bbcf-dac502259ad0.png

什么是RPC協(xié)議?


RPC即Remote Procedure Call(遠程程序調(diào)用),它是一種遠程過程調(diào)用協(xié)議,它允許客戶端像調(diào)用本地函數(shù)一樣調(diào)用遠程服務器上的函數(shù)。

0ed30ad4-3a47-11ee-bbcf-dac502259ad0.png

圖2 RPC協(xié)議交互流程

RPC的優(yōu)點是高效、強大、易于使用,但是它也有一些缺點,比如:

(1)與HTTP相反,RPC是有狀態(tài)的,需要維護客戶端和服務器之間的連接狀態(tài),這會增加系統(tǒng)的復雜度和資源消耗。

(2)RPC的數(shù)據(jù)傳輸是基于二進制的,這會導致數(shù)據(jù)不易閱讀和調(diào)試。

(3)RPC的兼容性較差,不同的RPC框架之間可能存在協(xié)議和接口的不一致性。

(4)RPC的可擴展性較差,難以支持動態(tài)服務發(fā)現(xiàn)和負載均衡等功能。

0efebf6c-3a47-11ee-bbcf-dac502259ad0.png

二者的選擇使用


基于TCP建立的HTTP和各類RPC協(xié)議,只是定義了不同消息格式的應用層協(xié)議。HTTP協(xié)議是超文本傳輸協(xié)議,而RPC本身并不是一個具體的協(xié)議,而是一種調(diào)用方式。

0f1db37c-3a47-11ee-bbcf-dac502259ad0.png

雖然HTTP現(xiàn)在叫超文本協(xié)議,支持音頻視頻,但HTTP設計初主要是用做展示網(wǎng)頁文本,所以它傳輸?shù)膬?nèi)容以字符串為主,內(nèi)容存在非常多的冗余。而RPC協(xié)議定制化程度更高,可以采用體積更小的protobuf或其他序列化協(xié)議去保存結構體數(shù)據(jù),同時也不需要像HTTP那樣考慮各種瀏覽器行為,性能更好。因此在公司內(nèi)部微服務中拋棄HTTP,轉而使用RPC協(xié)議。雖然后來HTTP得到了很大的改進,但由于很多公司內(nèi)部已經(jīng)用了多年的RPC協(xié)議,基于歷史原因,一般沒有選擇更換成HTTP。

在實際運用中,不論是HTTP還是RPC,它們都有各自的優(yōu)缺點,沒有絕對的好壞之分。針對不同的使用場景選擇合適的協(xié)議。比如:

(1)在微服務架構中,服務之間需要頻繁地進行內(nèi)部調(diào)用,RPC可以提供更高的性能和可靠性。

(2)在分布式計算中,需要將大量的計算任務分發(fā)到不同的節(jié)點上執(zhí)行,RPC可以實現(xiàn)更靈活的負載均衡和容錯機制。

(3)而在實時通信中,需要實現(xiàn)低延遲和高并發(fā)的數(shù)據(jù)交換,RPC可以支持多種傳輸協(xié)議和通信模式。

而假如你需要實現(xiàn)跨平臺和跨語言的通信,或者需要支持多種數(shù)據(jù)格式和編碼方式,或者需要利用現(xiàn)有的HTTP基礎設施和工具,可以選擇HTTP協(xié)議。

當然這樣不是絕對固定的組合,也可以結合兩個協(xié)議來實現(xiàn)更好的網(wǎng)絡,例如:

(1)我們可以在HTTP協(xié)議上封裝RPC協(xié)議,使得RPC請求可以通過HTTP代理或者網(wǎng)關來轉發(fā)和處理。

(2)可以在RPC協(xié)議上使用HTTP協(xié)議作為傳輸層,使得RPC請求可以利用HTTP的特性來實現(xiàn)緩存、壓縮、加密等功能。

所以總的來說,RPC的出現(xiàn)是為了應對HTTP協(xié)議滿足不了的對性能有所要求的網(wǎng)絡場景。它們并不是互斥的,而是可以根據(jù)不同的場景和需求進行選擇和組合的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 通信
    +關注

    關注

    18

    文章

    5925

    瀏覽量

    135695
  • 協(xié)議
    +關注

    關注

    2

    文章

    591

    瀏覽量

    39107
  • 網(wǎng)絡
    +關注

    關注

    14

    文章

    7441

    瀏覽量

    88438
  • HTTP
    +關注

    關注

    0

    文章

    495

    瀏覽量

    30892
  • RPC
    RPC
    +關注

    關注

    0

    文章

    110

    瀏覽量

    11483
收藏 人收藏

    評論

    相關推薦

    含有內(nèi)部ESD保護的運放,外部保護還需要加嗎?

    含有內(nèi)部ESD保護的運放,外部保護還需要加嗎?因為加外部ESD保護一定的漏電流存在, 這個會使電路失去一定的精度
    發(fā)表于 09-04 06:54

    暢玩《黑神話:悟空》,除了“官配”硬件還需要注意這些......

    暢玩《黑神話:悟空》,除了“官配”硬件還需要注意這些......
    的頭像 發(fā)表于 08-30 14:58 ?301次閱讀
    暢玩《黑神話:悟空》,除了“官配”硬件<b class='flag-5'>還需要</b>注意這些......

    Dubbo源碼淺析(一)—RPC框架與Dubbo

    時,就像調(diào)用本地過程一樣方便。 1.2 RPCHttp的關系 用一句話來總結就是: RPC是一種概念,http是一種協(xié)議,可以認
    的頭像 發(fā)表于 08-16 15:18 ?466次閱讀
    Dubbo源碼淺析(一)—<b class='flag-5'>RPC</b>框架與Dubbo

    MES、ERP,為什么還需要QMS?

    ? MES、ERP,質(zhì)量管理為什么還需要QMS? ?在制造業(yè),質(zhì)量管理始終是企業(yè)管理中永恒的主題。品質(zhì)管理要想做得更好,企業(yè)必須掌握足夠多、足夠有用的數(shù)據(jù)和信息,實現(xiàn)質(zhì)量管理信息化。很多中小企業(yè)
    的頭像 發(fā)表于 08-02 10:09 ?196次閱讀
    <b class='flag-5'>有</b><b class='flag-5'>了</b>MES、ERP,為什么<b class='flag-5'>還需要</b>QMS?

    TSMaster RPC 基礎入門:編程指導和使用說明

    介紹RPC模塊前,我們先淺聊一下RPC的相關說明,以及在什么樣的情況下需要了解本文。1.RPC說明遠程過程調(diào)用(RPC,RemoteProc
    的頭像 發(fā)表于 07-13 08:21 ?687次閱讀
    TSMaster <b class='flag-5'>RPC</b> 基礎入門:編程指導和使用說明

    ESP-IDF Tools Offline5.0下的離線安裝包,為什么安裝時還需要從github中下載?

    如題 我都已經(jīng)下載的是離線的安裝包了為什么安裝時還需要從github中下載???? 半個小時 才下載2%
    發(fā)表于 06-13 08:14

    為何在HTTP協(xié)議之外,我們還需要RPC協(xié)議?

    字節(jié)流可以理解為一個雙向的通道里流淌的數(shù)據(jù),這個數(shù)據(jù)其實就是我們常說的二進制數(shù)據(jù),簡單來說就是一大堆 01 串。純裸TCP收發(fā)的這些 01 串之間是沒有任何邊界的,你根本不知道到哪個地方才算一條完整消息。
    發(fā)表于 04-12 14:29 ?495次閱讀
    為何在<b class='flag-5'>HTTP</b><b class='flag-5'>協(xié)議</b>之外,我們<b class='flag-5'>還需要</b><b class='flag-5'>RPC</b><b class='flag-5'>協(xié)議</b>?

    請問risc-v中斷還需要軟件保存上下文和恢復嗎?

    risc-v中斷還需要軟件保存上下文和恢復嗎?
    發(fā)表于 02-26 07:40

    RT-Thread Studio中的RT-Thread Setting中已經(jīng)軟件包管理和組件服務管理了,那還需要env工具嗎?

    RT-Thread Studio中的RT-Thread Setting中已經(jīng)軟件包管理和組件服務管理了,那還需要env工具嗎,如果也使用env工具那不是和RT-Thread Setting中的管理沖突?
    發(fā)表于 02-23 07:36

    #2024,立Flag了嘛? #學習spinal HDL還需要學習對應的Scala語言

    學習spinal HDL還需要學習對應的Scala語言,但是spinal HDL直接貼近硬件編程,不知道對于學習spinal HDL什么好的建議?
    發(fā)表于 01-21 11:11

    aducm410微處理器還需要接外部晶振和復位電路嗎?

    aducm410微處理器還需要接外部晶振和復位電路嗎?
    發(fā)表于 01-11 07:23

    數(shù)模轉換芯片AD7991配置完斷電后,還需要再次配置嗎?

    這個芯片在使用時,一些配置寄存器,用于配置芯片的工作方式。這個寄存器,配置完斷電后,還需要再次配置嗎? 這個芯片兩個型號—0和—1,配置時,地址不一樣。在芯片上沒看有標識,怎么判斷是哪個型號的?
    發(fā)表于 12-22 08:06

    既然Kubernetes,為什么還需要Istio?

    Envoy 引入了 xDS 協(xié)議,該協(xié)議受到各種開源軟件的支持,例如Istio、MOSN等。Envoy 將 xDS 貢獻給服務網(wǎng)格或云原生基礎設施。Envoy 本質(zhì)上是一個現(xiàn)代版本的代理,可以通過
    的頭像 發(fā)表于 12-11 17:28 ?849次閱讀
    既然<b class='flag-5'>有</b><b class='flag-5'>了</b>Kubernetes,為什么<b class='flag-5'>還需要</b>Istio?

    如何理解HTTP協(xié)議是無狀態(tài)的

    主要解決網(wǎng)絡路由和尋址問題,TCP 協(xié)議主要解決如何在 IP 層之上可靠的傳遞數(shù)據(jù)包,使在網(wǎng)絡上的另一端收到發(fā)端發(fā)出的所有包,并且順序與發(fā)出順序一致。TCP 可靠,面向連接的特點。 2、如何理解HTTP
    的頭像 發(fā)表于 11-11 15:46 ?2276次閱讀
    如何理解<b class='flag-5'>HTTP</b><b class='flag-5'>協(xié)議</b>是無狀態(tài)的

    RPC 和 REST 區(qū)別是什么

    01. 既 REST ,何 RPC ? 在 OpenStack 里的進程間通信方式主要有兩種,一種是基于HTTP協(xié)議的RESTFul API方式,另一種則是RPC調(diào)用。 那么這兩種方式
    的頭像 發(fā)表于 11-02 10:40 ?2881次閱讀
    <b class='flag-5'>RPC</b> 和 REST 區(qū)別是什么