若要轉載本文,請務必聲明出處:https://www.cnblogs.com/zhongyuanzhao000/p/11700815.html
1. 關於HTTP:
HTTP,即超文本傳輸協議,是一個屬於應用層的面向對象的協議。
HTTP的特點:
- 基於C/S模式,客戶端通過URL向服務端發送請求,其信息交換過程為:建立連接、發送請求信息、發送響應信息、關閉連接。
- 無連接,指 限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答后,即斷開連接。這樣可以節省傳輸時間。
- 無狀態,指協議對於事務處理沒有記憶能力。
HTTP動詞(請求方法):
GET 獲取一個資源
PUT 修改一個資源
POST 添加一個資源
DELETE 刪除一個資源
HTTP狀態碼:
- 200 - 請求成功
- 301 - 重定位,資源被永久轉移到其他URL
- 404 - 請求資源不存在
- 500 - 內部服務器錯誤
2. 關於REST:
REST即Representational State Transfer(表現層狀態轉換),是一種軟件架構風格、設計風格,而不是標准。如果滿足 REST 的幾個條件, 通常就稱這個系統是 Restful 的。
這里提的條件包括:
- C/S結構 (這是Internet服務的一個基本特征)
- 無狀態 (很熟悉吧,呵呵)
- 可以cache (想起了瀏覽器?)
- 分層系統 (想起了無數的架構?)
- 統一的接口 (如果這是可能的,程序員有福了, 😄)
- code on demand(可選, 其實是一種擴展性的要求)
很像 HTTP吧,其實REST API 就是基於 HTTP的。
3. 關於RPC:
RPC,即 遠程過程調用,一種標准,屏蔽底層通信細節,可以直接調用。
簡單的說,RPC就是從一台機器(客戶端)上通過參數傳遞的方式調用另一台機器(服務器)上的一個函數或方法(可統稱為服務)並得到返回的結果。RPC在使用形式上像調用本地函數(或方法)一樣去調用遠程的函數(或方法)。
3.1 REST與RPC的區別:
-
REST是以名詞(即資源)為中心的,RPC是以動詞(即方法)為中心的。(REST主要通過HTTP動詞 增刪改查 資源來實現調用,RPC則是通過相應的比較靈活的方法來實現調用)
REST通過URI將資源暴露出來,對資源的操作則是通過HTTP動詞來體現。REST通過URI暴露資源時,會強調不要在URI中出現動詞。如下所示: 左邊是錯誤的設計,而右邊是正確的
GET /rest/api/getDogs --> GET /rest/api/cats 獲取所有貓貓 GET /rest/api/addDogs --> POST /rest/api/cats 添加一個貓貓 GET /rest/api/editDogs/:dog_id --> PUT /rest/api/cats/:cat_id 修改一個貓貓 GET /rest/api/deleteDogs/:dog_id --> DELETE /rest/api/cats/:cat_id 刪除一個貓貓
-
調用發生的區域:
服務內部:首要使用RPC,RPC適合內部間,高效,快速通信。 缺點是 兩邊最好都是Java的系統。
服務外部:首要使用RESTful,REST適合外部間,簡單易用,且跨語言。 缺點是 操作有限(CRUD),且不夠高效。
4. 關於MQ:
MQ,即消息隊列,是一種 跨進程的通信機制,用於上下游傳遞消息。在互聯網架構中,MQ是一種 上下游"邏輯解耦+物理解耦"的消息通信服務。使用MQ后,消息發送上游只需依賴MQ,邏輯上和物理上都不用在依賴其他服務。另外,MQ只用來傳遞上游任務執行完成的消息,並不用於傳遞真正的輸入輸出數據。如下圖所示:
MQ的優點:
1)不需要預留buffer,上游任務執行完,下游任務總會在第一時間被執行
2)上下游邏輯+物理解耦,除了與MQ有物理連接,模塊之間都不相互依賴
3)新增一個下游消息關注方,上游不需要修改任何代碼
MQ的缺點:
1)系統更復雜,多了一個MQ組件
2)消息傳遞路徑更長,延時會增加
3)消息可靠性和重復性互為矛盾,消息不丟不重難以同時保證
4)上游無法知道下游的執行結果,這一點是很致命的
因此,
什么時候不用MQ? 上游實時關注執行結果時,請使用 調用,而不是MQ。
什么時候使用MQ? 數據驅動的任務依賴、上游不關心下游執行結果、異步返回執行時間長
4.1 MQ與RPC的區別:
主要使用場景的區別,如下:
MQ適用於 消息上游 與 下游 解耦,不關注下游執行結果,異步;
RPC適用於 消息上游 關注下游執行結果,同步;
解釋下 同步和異步:
同步是指所有的操作都做完,才返回給用戶。 異步是指 將用戶請求放入消息隊列,並反饋給用戶,然后程序再去執行操作。
同步就相當於是 當客戶端發送請求給服務端,在等待服務端響應的請求時,客戶端不做其他的事情。當服務端做完了才返回到客戶端。這樣的話客戶端需要一直等待。用戶使用起來會有不友好。
異步就是,當客戶端發送給服務端請求時,在等待服務端響應的時候,客戶端可以做其他的事情,這樣節約了時間,提高了效率。
5. 關於SOCKET:
socket由 網絡層的ip地址 和 運輸層的 端口號 組成,可以 唯一標示 網絡 中的一個進程。(網絡層的ip地址可唯一標示主機,運輸層的端口號則可以唯一標示 主機的一個進程)。
socket是在應用層 和 運輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。socket是一種”打開—讀/寫—關閉”模式的實現,服務器和客戶端各自維護一個”文件”,在建立連接打開后,可以向自己文件寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉文件。如下所示:
socket的優點:
- 傳輸數據為字節級,傳輸數據可自定義,數據量小
- 傳輸數據時間短,性能高
- 適合於客戶端和服務器端之間信息實時交互
- 可以加密,數據安全性強
socket的缺點:
- 需對傳輸的數據進行解析,轉化成應用級的數據
- 對開發人員的開發水平要求高
- 相對於Http協議傳輸,增加了開發量
5.1 Socket與Http的區別:
1.Socket 的連接是有狀態的,一旦兩邊連接上了,將一直保持連接,除非人為斷開。一般用於游戲,需要持續的網絡暢通
2.Http 的連接是無狀態的,即在連接完成后不會保持連接狀態。