文章目錄
- 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方式來實作服務間調用。