當前位置: 妍妍網 > 碼農

SpringCloud遠端呼叫為啥要采用HTTP,而不是RPC?

2024-03-02碼農

來源:blog.csdn.net/m0_61878423/article/details/124607067

👉 歡迎 ,你將獲得: 專屬的計畫實戰 / Java 學習路線 / 一對一提問 / 學習打卡 / 贈書福利

全棧前後端分離部落格計畫 1.0 版本完結啦,2.0 正在更新中 ... , 演示連結 http://116.62.199.48/ ,全程手摸手,後端 + 前端全棧開發,從 0 到 1 講解每個功能點開發步驟,1v1 答疑,直到計畫上線。 目前已更新了219小節,累計35w+字,講解圖:1492張,還在持續爆肝中.. 後續還會上新更多計畫,目標是將Java領域典型的計畫都整一波,如秒殺系統, 線上商城, IM即時通訊,Spring Cloud Alibaba 等等,

  • 一個簡單HTTP請求處理

  • RPC

  • Restful(HTTP)

  • RPC和HTTP的區別

  • 關於SpringCloud遠端呼叫采用HTTP而非RPC。

    1. 首先SpringCloud開啟Web服務依賴於內部封裝的Tomcat容器,而今資訊飛速發展,適應大流量的微服務,采用Tomcat處理HTTP請求,開發者編寫Json作為資源傳輸,伺服器做出相應的響應,可以更加的靈活處理業務數據,而HTTP協定是跨平台的,符合微服務B/C數據互動的方式,可以的一套伺服器對應移動H5、App、小程式提供服務。

    2. RPC基於TCP協定,客服端與伺服端需要進行三次握手完成可靠連線,第四步進行數據傳輸。因為TCP是數據傳輸層,傳輸協定需要伺服器統一編寫,進行二進制傳輸,依賴序列化和反序列化規則,對於大部份套用需要靈活變動數據則不適用,RPC常用於Socket連線或一些基本不變動的傳輸格式數據,減少數據變動帶來的開發成本

    建立Socket連線至少需要一對套接字,其中一個執行於客戶端,稱為ClientSocket ,另一個執行於伺服器端,稱為ServerSocket ,套接字之間的連線過程分為三個步驟:伺服器監聽,客戶端請求,連線確認。

    一個簡單HTTP請求處理

    在Web套用中,瀏覽器請求一個URL,伺服器就把生成的HTML網頁發送給瀏覽器,而瀏覽器和伺服器之間的傳輸協定是HTTP,那麽接下來我們看下如何用Java來實作一個簡單的HTTP伺服器。

    圖片

    RPC

    RPC(Remote Procedure Call:遠端程序呼叫):是一種行程間通訊方式,是一種技術的思想,而不是規範。它允許程式呼叫另一個地址空間(通常是共享網路的另一台機器上)的過程或函式,而不用程式設計師顯式編碼這個遠端呼叫的細節。即程式設計師無論是呼叫原生的還是遠端的函式,本質上編寫的呼叫程式碼基本相同。

    通俗的說法就是:比如說現在有兩台伺服器A和B,一個套用部署在A伺服器上,另一個套用部署在B伺服器上,如果A套用想要呼叫B套用提供的方法,由於他們不在一台機器下,也就是說它們不在一個JVM記憶體空間中,是無法直接呼叫的,需要透過網路進行呼叫,那這個呼叫過程就叫做RPC。

    圖片

    圖片

    RPC兩個核心模組:通訊,序列化。

    註意:無論是何種型別的數據,最終都需要序列化轉換成二進制流在網路上進行傳輸,數據的發送方需要將物件序列化轉換為二進制流,而數據的接收方則需要把二進制流反序列化為物件。

    Restful(HTTP)

    Restful 指的是一組架構約束條件和原則。" 如果一個架構符合 Restful 的約束條件和原則,就稱它為 Restful 架構。隱藏在 Restful 背後的理念就是使用 Web的現有特征和能力,更好地使用現有 Web 標準中的一些準則和約束。

    雖然 Restful 本身受 Web技術的影響很深, 但是理論上 Restful 架構風格並不是繫結在 HTTP 上,只不過目前 HTTP 是唯一與 Restful 相關的例項。所以我們這裏描述的 Restful 也是透過 HTTP 實作的 Restful。

    RPC和HTTP的區別

    首先,兩者十分相似,有請求有響應。

    不同:

  • RPC需要滿足像呼叫本地服務一樣呼叫遠端服務,也就是對呼叫過程在API層面進行封裝。

  • Http協定沒有這樣的要求,因此請求、響應等細節需要我們自己去實作。

  • 優點

  • RPC更加透明,對使用者方便。

  • HTTP方式更加靈活,沒有規定API和語言,跨語言,跨平台。

  • 缺點

  • RPC需要在API層面進行封裝,限制了開發的語言環境。

  • 選擇

  • 速度方面:RPC速度比HTTP快,底層都是TCP,HTTP訊息往往比較臃腫,但是可以采用gzip壓縮。

  • 難度方面:RPC實作有點兒復雜,HTTP相對比較簡單。

  • 靈活性方面:HTTP更靈活,不需要關系實作的細節,可以跨平台,跨語言。

  • 未來發展方向

  • 微服務,強調獨立,自治,靈活。RPC限制較多,因此微服務框架中,一般都會采用基於HTTP的rest風格服務。

  • 👉 歡迎 ,你將獲得: 專屬的計畫實戰 / Java 學習路線 / 一對一提問 / 學習打卡 / 贈書福利

    全棧前後端分離部落格計畫 1.0 版本完結啦,2.0 正在更新中 ... , 演示連結 http://116.62.199.48/ ,全程手摸手,後端 + 前端全棧開發,從 0 到 1 講解每個功能點開發步驟,1v1 答疑,直到計畫上線。 目前已更新了219小節,累計35w+字,講解圖:1492張,還在持續爆肝中.. 後續還會上新更多計畫,目標是將Java領域典型的計畫都整一波,如秒殺系統, 線上商城, IM即時通訊,Spring Cloud Alibaba 等等,


    1. 

    2. 

    3. 

    4. 

    最近面試BAT,整理一份面試資料Java面試BATJ通關手冊,覆蓋了Java核心技術、JVM、Java並行、SSM、微服務、資料庫、數據結構等等。

    獲取方式:點「在看」,關註公眾號並回復 Java 領取,更多內容陸續奉上。

    PS:因公眾號平台更改了推播規則,如果不想錯過內容,記得讀完點一下在看,加個星標,這樣每次新文章推播才會第一時間出現在你的訂閱列表裏。

    「在看」支持小哈呀,謝謝啦