微服務架構中進程間通信的深入解析
◆ 概述
服務內部通信主要分爲兩類:
-
基於同步請求 / 響應的通信,例如:REST,gRPC 等
-
基於異步消息的通信,例如:AMQP,STOMP 等
通信方式有兩類:
第一類:
-
1 對 1 通信
-
1 對多通信
第二類:
-
同步通信
-
異步通信
1 對 1 通信實現:
-
請求 / 響應通信
-
異步請求響應
-
單向通知
1 對多通信實現:
-
發佈訂閱
-
發佈 / 異步響應
◆ 消息格式
| 進程間通信對本質是消息對交互。
消息格式有兩類:文本消息和二進制消息。
文本格式:JSON,XML
二進制格式:Avro,Protobuf,Thrift
跨編程語言消息格式傳遞對使用是非常重要對,所以 Java 序列化方式不是一種好的選擇。
◆ RPC
**| **Remote Procedure Call 像調用本地方法一樣調用遠程服務
在客戶端的業務邏輯中,調用遠程提供者的代理接口。
-
提供者代理會通過網絡傳輸將數據發送到接口服務端,服務端收到消息進行業務邏輯處理。
-
服務端執行完畢後將結果通過代理發送給客戶端,客戶端收到調用結果。
◆ REST
**| **REST 是一種規範,而不是協議。REST 通常是使用 HTTP 協議。
REST 中的一個關鍵概念是資源,通常表示一個業務實體,比如:用戶,訂單,或者是對象的集合。
REST 調用 HTTP 接口有一定的規範, 比如:
POST /user : 創建用戶
PUT /user : 修改用戶信息
GET /users: 獲取用戶列表
GET /user/{userId} : 獲取指定的用戶信息
◆ 服務發現
服務發現有兩種:靜態發現和動態發現。
靜態發現是指知道對方的地址,運行時地址是固定的,直接通過地址就可以發現服務。
動態發現是指服務提供者是動態擴展的(增縮),運行指根據具體策略才能獲取到對應的服務提供者。
動態服務發現:
動態服務發現一般有兩種實現:
-
服務註冊:需要一個註冊中心,服務提供者啓動時註冊到註冊中心,服務消費者從註冊中心獲取服務列表
-
通過部署平臺,比如:Kubernetes
◆ 異步消息
基於消息通信的應用程序通常使用消息代理(Message Broker),這種代理在各個服務間作爲一種中介存在。
這種模式一般是發送者發送消息到指定的通道(Channel),消費者(要收到消息的對象)從通道中讀取。
一個消息是由頭部(header)和內容(body)組成。頭部是 key-value 集合組成,一般也包括消息的唯一 ID。
消息的類型:
-
Document
-
Command
-
Event
◆ 通道(Channel)
**| **消息是通過通道進行交換的。
通道一般有兩種:
-
點對點通道
-
發佈訂閱通道
◆ 異步消息的實現
- 異步請求響應
- 發佈訂閱
我們選擇一個消息代理組件(MQ)時需要考慮的因素:
-
支持的編程語言
-
支持的消息標準
-
消息的順序
-
消息投遞的確保機制
-
消息持久性
-
擴展性
-
消息及時性
來源:
https://www.toutiao.com/i6954591211072193062/
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/-5meq_QuOMoY18DETM_umw