<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

RPC接口和HTTP接口的區別與聯系

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-06-17 14:54 ? 次閱讀

HTTP服務

RPC接口和HTTP接口的區別與聯系

參考文獻

HTTP接口和RPC接口都是生產上常用的接口,顧名思義,HTTP接口使用基于HTTP協議的URL傳參調用,而RPC接口則基于遠程過程調用。

RPC(即Remote Procedure Call,遠程過程調用)和HTTP(HyperText Transfer Protocol,超文本傳輸協議),兩者前者是一種方法,后者則是一種協議。兩者都常用于實現服務,在這個層面最本質的區別是RPC服務主要工作在TCP協議之上(也可以在HTTP協議),而HTTP服務工作在HTTP協議之上。由于HTTP協議基于TCP協議,所以RPC服務天然比HTTP更輕量,效率更勝一籌。

兩者都是基于網絡實現的,從這一點上,都是基于Client/Server架構。

RPC(Remote Procedure Call)服務

RPC服務基本架構包含了四個核心的組件,分別是Client、Server、Clent Stub以及Server Stub。

0e1adabe-0cba-11ee-962d-dac502259ad0.png

Client (客戶端) :服務調用方。

Server(服務端) :服務提供方。

Client Stub(客戶端存根) :存放服務端的地址消息,負責將客戶端的請求參數打包成網絡消息,然后通過網絡發送給服務提供方。

Server Stub(服務端存根) :接收客戶端發送的消息,再將客戶端請求參數打包成網絡消息,然后通過網絡遠程發送給服務方。

RPC效率優勢明顯,在實際開發中,客戶端和服務端在技術方案中約定客戶端的調用參數和服務端的返回參數之后就可以各自開發,任何客戶端只要按照接口定義的規范發送入參都可以調用該RPC服務,服務端也能按接口定義的規范出參返回計算結果。這樣既實現了客戶端和服務端之間的解耦,也使得RPC接口可以在多個項目中重復利用。

RPC調用分為同步方式和異步方式。同步調用即客戶端等待調用完成并返回結果;異步調用即客戶端不等待調用執行完成返回結果,變成單向調用或者通過回調函數等待接收到返回結果的通知。

流行的RPC框架

目前流行的RPC框架有很多,下面介紹常見的三種。

gRPC: gRPC是Google公布的開源項目,基于HTTP2.0協議,并支持常見的眾多編程語言。HTTP 2.0協議是基于二進制的HTTP協議的升級版本,gRPC底層使用了Netty框架。

Thrift: Thrift是Facebook的一個開源項目,主要是一個跨語言的服務開發框架。它有一個代碼生成器來對它所定義的IDL文件自動生成服務代碼框架。Thrift對于底層的RPC通訊都是透明的,用戶只需要對其進行二次開發即可,省去了一系列重復的前置基礎開發工作。

Dubbo: Dubbo是阿里集團開源的一個極為出名的RPC框架,在很多互聯網公司和企業應用中廣泛使用。協議和序列化框架都可以插拔是及其鮮明的特色。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

HTTP服務

通過HTTP URL調用的服務,瀏覽器訪問本質上也算HTTP服務,不同的是需要客戶端瀏覽器渲染服務端返回的結果。

HTTP服務開發即開發ERESTful風格的服務接口。在接口不多、系統之間交互較少的情況下,是一種信息傳遞的常用通信手段。

HTTP接口的優點是簡單、直接、開發方便,利用現成的HTTP協議進行傳輸。在服務開發的時候,約定一個接口文檔,嚴格定義輸入和輸出,明確每一個接口的請求方法和需要的請求參數及其格式。

在內部子系統較多、接口較多的情況下,RPC框架的好處就凸顯出現了,首先是長連接,不必每次通信都要像HTTP那樣三次握手,減少了網絡開銷;其次是RPC框架一般都有注冊中心,有豐富的監控發布方法;RPC接口的發布、下線、動態擴展等對調用方是無感知的、統一化的操作。

Restful

Restful web service是一種常見的rest應用,統一用于命名遵循rest風格的web服務。Restful服務是一種ROA(Resource-Oriented Architecture,面向資源的架構)。舉一個例子就可以理解了:

Restful出現之前的HTTP接口:

http://127.0.0.1/user/query GET 根據用戶id查詢用戶數據

http://127.0.0.1/user/save POST 新增用戶

http://127.0.0.1/user/update POST 修改用戶信息

http://127.0.0.1/user/delete GET/POST 刪除用戶信息

Restful式HTTP接口:

http://127.0.0.1/user GET 根據用戶id查詢用戶數據

http://127.0.0.1/user POST 新增用戶

http://127.0.0.1/user PUT 修改用戶信息

http://127.0.0.1/user DELETE 刪除用戶信息

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

RPC接口和HTTP接口的區別與聯系

RPC接口即相當于調用本地接口一樣調用遠程服務的接口;HTTP接口是基于http協議的post接口和get接口(等等,2.0版本協議子支持更多)。

傳輸協議

RPC:可以基于TCP協議,也可以基于HTTP協議。

HTTP:基于HTTP協議。

傳輸效率

RPC:使用自定義的TCP協議,可以讓請求報文體積更小,或者使用HTTP2.0協議,也可以很好地減少報文體積,提高傳輸效率。

HTTP:如果時基于HTTP1.1的協議,請求中會包含很多無用的內容;如果是基于HTTP2.0,那么簡單地封裝一下還是可以作為一個RPC使用的,這時標準RPC框架更多是服務治理。

性能消耗

RPC:可以基于thrift實現高效的二進制傳輸

HTTP:大部分是通過json實現的,字節大小和序列化耗時都比thrift要更消耗性能

負載均衡

RPC:基本都自帶了負載均衡策略

HTTP:需要配置Nginx,HAProxy實現

服務治理(下游服務新增,重啟,下線時如何不影響上游調用者)

RPC:能做到自動通知,不影響上游

HTTP:需要事先通知,修改Nginx/HAProxy配置

RPC主要用于公司內部服務調用,性能消耗低,傳輸效率高,服務治理方便。HTTP主要用于對外的異構環境,瀏覽器調用,APP接口調用,第三方接口調用等等。

RPC和HTTP都可以用于實現遠程過程調用,如何選擇?

從速度上看,RPC比HTTP更快,雖然底層都是TCP,但是http協議的信息往往比較臃腫,不過可以采用gzip壓縮

從難度上看,RPC實現較為復雜,http相對簡單

從靈活性上看,HTTP更勝一籌,因為它不關心實現細節,跨平臺,跨語言

兩者有不同的使用場景:

如果對效率要求更高,并且開發過程使用統一的技術棧,那么RPC還是不錯的

如果需要更加靈活,跨語言、跨平臺,顯然HTTP更合適

再插一句,最近新興的微服務概念更加強調獨立、自治、靈活,而RPC限制較多。因此微服務框架中,一般都會采用HTTP的Restful服務,像在公司內部使用hsf協議,對接外部系統使用微服務。

責任編輯:彭菁

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

    關注

    0

    文章

    101

    瀏覽量

    11428
  • 瀏覽器
    +關注

    關注

    1

    文章

    988

    瀏覽量

    34516
  • HTTP接口
    +關注

    關注

    0

    文章

    21

    瀏覽量

    1641

原文標題:既然有了HTTP,為什么還要RPC?(VIP典藏版)

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    通信網絡技術:RPC服務和HTTP服務的區別分析

    很長時間以來都沒有怎么好好搞清楚 RPC(即 Remote Procedure Call,遠程過程調用)和 HTTP 調用的區別,不都是寫一個服務然后在客戶端調用么?這里請允許我迷之一笑~Naive
    的頭像 發表于 11-26 13:52 ?2545次閱讀

    為什么有了HTTP,還需要RPC協議?

    為什么有了HTTP,還需要RPC協議呢?在進行說明之前,首先我們需要了解什么是HTTP協議,什么是RPC協議。什么是HTTP協議?
    的頭像 發表于 08-14 10:05 ?681次閱讀
    為什么有了<b class='flag-5'>HTTP</b>,還需要<b class='flag-5'>RPC</b>協議?

    通過http使用RPC服務的方法

    通過http使用RPC服務
    發表于 02-16 07:18

    端口和接口有什么區別聯系

    本文首先介紹了端口的概念、分類及作用,其次介紹了接口的概念與顯示器接口的類型,最后介紹了端口和接口區別聯系。
    發表于 04-23 16:54 ?5.9w次閱讀
    端口和<b class='flag-5'>接口</b>有什么<b class='flag-5'>區別</b>和<b class='flag-5'>聯系</b>嗎

    什么是RPC?為什么需要RPC?

    首先要明確一點:RPC可以用HTTP協議實現,并且用HTTP是建立在 TCP 之上最廣泛使用的 RPC,但是互聯網公司往往用自己的私有協議,比如鵝廠的JCE協議,私有協議不具備通用性為
    的頭像 發表于 04-16 12:49 ?1.4w次閱讀
    什么是<b class='flag-5'>RPC</b>?為什么需要<b class='flag-5'>RPC</b>?

    接口測試與前端測試的區別聯系

    主要從問題出發,引入接口測試的相關內容并與前端測試進行簡單對比,總結兩者之前的區別聯系。但該部分只交代了怎么做和如何做?并沒有解釋為什么要做?
    發表于 05-26 09:44 ?4411次閱讀
    <b class='flag-5'>接口</b>測試與前端測試的<b class='flag-5'>區別</b>與<b class='flag-5'>聯系</b>

    為什么需要RPC接口

    論復雜度,RPC框架肯定是高于簡單的HTTP接口的。但毋庸置疑,HTTP接口由于受限于HTTP
    發表于 07-13 17:46 ?2483次閱讀

    閑聊HDMI、DVI、VGA三個接口區別聯系

    今天來聊聊一篇關于dvi接口:HDMI、DVI、VGA接口有什么聯系的文章,現在就為大家來簡單介紹下dvi接口:HDMI、DVI、VGA接口
    發表于 07-17 10:55 ?4569次閱讀

    總線、接口和協議的區別聯系深度解讀

    總線、接口和協議,這三個詞常常被聯系在一起,但是我們心里要明白他們的區別。
    的頭像 發表于 09-01 13:49 ?2.7w次閱讀
    總線、<b class='flag-5'>接口</b>和協議的<b class='flag-5'>區別</b><b class='flag-5'>聯系</b>深度解讀

    HTTPRPC

    TCP是傳輸層的協議,而基于TCP造出來的HTTP和各類RPC協議,它們都只是定義了不同消息格式的應用層協議而已。
    的頭像 發表于 11-23 08:54 ?657次閱讀
    <b class='flag-5'>HTTP</b>和<b class='flag-5'>RPC</b>

    HTTPRPC區別聯系

    HTTPRPC的相同點:底層通訊都是基于socket,都可以實現遠程調用,都可以實現服務調用服務。
    的頭像 發表于 11-23 08:55 ?1467次閱讀
    <b class='flag-5'>HTTP</b>和<b class='flag-5'>RPC</b>的<b class='flag-5'>區別</b>與<b class='flag-5'>聯系</b>

    RPC接口HTTP接口哪一個更好?

    HTTP接口RPC接口都是生產上常用的接口,顧名思義,HTTP
    發表于 06-13 09:18 ?684次閱讀
    <b class='flag-5'>RPC</b><b class='flag-5'>接口</b>與<b class='flag-5'>HTTP</b><b class='flag-5'>接口</b>哪一個更好?

    基于Client/Server架構的HTTP接口RPC接口

    HTTP接口RPC接口都是生產上常用的接口,顧名思義,HTTP
    發表于 06-13 09:18 ?442次閱讀
    基于Client/Server架構的<b class='flag-5'>HTTP</b><b class='flag-5'>接口</b>和<b class='flag-5'>RPC</b><b class='flag-5'>接口</b>

    什么是HTTP協議?什么是RPC協議?二者如何選擇使用?

    為什么有了HTTP,還需要RPC協議呢?在進行說明之前,首先我們需要了解什么是HTTP協議,什么是RPC協議。
    的頭像 發表于 08-11 09:25 ?1580次閱讀
    什么是<b class='flag-5'>HTTP</b>協議?什么是<b class='flag-5'>RPC</b>協議?二者如何選擇使用?

    RPC 和 REST 區別是什么

    區別呢? 有使用經驗的人,就會知道: 前者(RESTful)主要用于各組件之間的通信(如nova與glance的通信),或者說用于組件對外提供調用接口 而后者(RPC)則用于同一組件中各個不同模塊
    的頭像 發表于 11-02 10:40 ?2024次閱讀
    <b class='flag-5'>RPC</b> 和 REST <b class='flag-5'>區別</b>是什么
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>