天天看點

RPC和HTTP對比1、 OSI七層網絡模型2、優缺點3、總結

文章目錄

  • 1、 OSI七層網絡模型
  • 2、優缺點
  • 3、總結

無論是微服務還是SOA(面向服務的架構),都面臨着服務間的遠端調用。那麼服務間的遠端調用方式有哪些呢?

常見的遠端調用方式有以下2種:RPC和Http。其中Http大家很熟悉不多說,RPC是什麼呢?

RPC基礎概念

RPC就是遠端過程調用協定,其作用就是用戶端與服務端之間的遠端調用,就像本地自己調用一樣,讓服務端進行服務化

1、 OSI七層網絡模型

在說RPC和HTTP的差別之前,需要了解一下計網基礎的OSI七層網絡結構模型。

應用層:定義了使用者在網絡中進行通信和傳輸資料的接口,一般情況下應用都是直接和應用層進行互動的。

表示層:定義不同系統中資料的傳輸格式,編碼和解碼規範等,用于多系統下的傳輸。

會話層:管理者使用者的會話,控制使用者間的邏輯連接配接的建立和中斷;

傳輸層:管理者網絡中裝置間如何傳資料。

網絡層:定義網絡裝置間如何傳輸資料

鍊路層:将上面的網絡層的資料封裝成幀,便于實體層進行傳輸。

實體層:這一層主要就是傳輸這些二進制資料。

在實際的應用過程中是沒有表示層和會話層的,應該說他們已經和應用層合并了,我們應該将重點放在應用層和傳輸層這兩個層面。因為HTTP是應用協定,而TCP是傳輸協定。HTTP是基于應用層的,RPC是基于傳輸層的。這也是RPC比HTTP速度快的原因。

2、優缺點

主要闡述HTTP和RPC的異同,在何種情況下應該選擇何種方案。

2.1 傳輸協定

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

HTTP:基于HTTP協定

2.2 傳輸效率

RPC:使用自定的TCP協定,可以讓請求封包的體積更小,提高傳輸效率。

HTTP: 基于HTTP1.1的協定,請求中會包含很多無用資訊。如果基于HTTP2.0,那麼可以簡單的封裝一下,作為RPC使用。

2.3 性能消耗

RPC:基于thrift實作高效的二進制傳輸。

HTTP:大部分通過Json字元串實作,位元組大小和序列化的耗時都比thrift更加消耗性能。

2.4 負載均衡

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

HTTP:需要Nginx,HAProxy來實作。(要使用代理去通路)

2.5 服務治理

RPC: 能做到自動通知,不影響上遊。(參考資料:Zookeeper的服務治理)

HTTP: 需要事先通知,修改Nginx/HAProxy。(負載均衡不考慮已下線伺服器,或者增加上線伺服器)

3、總結

  • RPC:Remote Produce Call(遠端過程調用),類似的還有RMI。自定義資料格式,基于原生TCP通信,速度快,效率高。早期的webservice,現在熱門的dubbo,都是RPC的典型代表
  • Http:http其實是一種網絡傳輸協定,基于TCP,規定了資料傳輸的格式。現在用戶端浏覽器與服務端通信基本都是采用Http協定,也可以用來進行遠端服務調用。缺點是消息封裝臃腫,優勢是對服務的提供和調用方沒有任何技術限定,自由靈活,更符合微服務理念

現在熱門的Rest風格,就可以通過http協定來實作。

如果你們公司全部采用Java技術棧,那麼使用Dubbo作為微服務架構是一個不錯的選擇。

相反,如果公司的技術棧多樣化,而且你更青睐Spring家族,那麼SpringCloud搭建微服務是不二之選。在我們的項目中,我們會選擇SpringCloud套件,是以我們會使用Http方式來實作服務間調用。

繼續閱讀