分布式通訊技術
- 遠端調用
-
- 遠端過程調用(RPC)
-
- 原理
- 适用範圍
- 調用方式
- 傳回方式
- RMI
- 釋出訂閱
-
- 原理
- Kafka
- 特征與應用
- 消息隊列
-
- 組成
- 具體流程
- RoketMQ
-
- 組成
- 流程
- 使用場景
遠端調用
遠端調用是程序間函數的互相調用,是程序間通訊(IPC)的一種方式
遠端過程調用(RPC)
是指不同機器中運作的程序之間的互相通信,某一機器上運作的程序在不知道底層通信細節的情況下,
就像通路本地服務一樣,去調用遠端機器上的服務
原理
将底層通訊細節進行封裝,使使用者對底層通訊無感覺,底層通過Client Stub 和Server Stub進行資料打包,并通過網絡協定進行傳輸
适用範圍
與作業系統和語言無關
調用方式
請求基于“類名+函數名”(ID)的方式實作,被調用方搜尋與之相比對的類和方法,然後執行
傳回方式
XDR :External Data Representation,一種可以在不同計算機系統間傳輸的資料格
式
RMI
RMI 是一個基于 Java 環境的應用程式設計接口,能夠讓本地 Java 虛拟機上運作的對象,像調
用本地對象一樣調用遠端 Java 虛拟機上的對象
本質是基于 對象的PRC的具體實作
- 适用範圍:用于Java環境
-
RMI 與 PRC 最大的不同在于調用方式和傳回結果的形式,RMI 通
過對象作為遠端接口來進行遠端方法的調用,傳回的結果也是對象形式,可以是 Java 對象
類型,也可以是基本資料類型
釋出訂閱
釋出訂閱的是三要素:生産者、消費者、消息中心
原理
點對點模式:支援多個消費者,但一條消息隻能被一個消費者消費,不允許重複消費
釋出訂閱模式:一條消息可以被多個訂閱的消費者進行消費
Kafka
- 生産者:釋出的消息到Broker
- 消費者:向Broker訂閱消息
- 消費者組: 共同消費消息,主題中每條消息隻能由消費組中的某一個消費者進行消費
- 提高消費效率
- 消費者組: 共同消費消息,主題中每條消息隻能由消費組中的某一個消費者進行消費
- 消息中信Broker: 存儲消息,并推送給訂閱的Consumer
- 主題Topic: 邏輯概念,指的是消息類型
- 分區Partition: 實體概念,一個Topic包含多個分區
- 作用
- 實作負載均衡,避免單個Broker上的負載過高
- 實作消息備份,進而保證系統高可用
- 作用
- Zookeeper 叢集
- 協調和管理Broker 和 Consumer
特征與應用
- 系統解耦,系統易于維護
- 異步執行,解決高負載問題
消息隊列
隊列是一種具有先進先出特點的資料結構**,消息隊列是基于隊列實作的,存儲具有特定格式的消息資料**
組成
- 生産者
- 消息隊列: 一種具有先進先出特點的的資料結構,用于存儲消息
- 消費者: 從消息隊列中擷取消息或者資料,進行相關處理
具體流程
生産者将發送的消息插入消息隊列,也就是入隊,之後會有一個消費者從消息隊列中去除消息進行處理,完成出隊
RoketMQ
組成
- Broker Cluster
- 作用:負責存儲Producter Cluster 釋出的消息,以友善消費者進行消費
- 内部結構:主題Topic+ 消息隊列Queue
- Producter Cluster
- 作用:負責接受使用者資料,然後将資料釋出到消息隊列中心Broker Cluster
- NameServer Cluster
- 管理Broker的資訊,包括有哪些Broker,Broker的位址和狀态等,以友善生産者擷取Broker資訊釋出消息,以及訂閱者根據Broker資訊擷取消息
- Consumer Cluster
- 負責從Broker 中擷取消息進行消費。Consumer 以叢集方式進行部署的好處是,提升消費者的消費能力,以避免消息隊列中心存儲溢出,消息被丢棄。
流程
-
首先啟動 NameServer,然後啟動 Broker。Broker 啟動後,會主動找 NameServer 建立連接配接,并将自己的資訊注冊到 NameServer 上。注冊完畢後,Broker 會周期性地給
NameServer 發送心跳包
- 建立主題,并确定這個主題的資料放入哪些 Broker 中
- 當 Producer 生産消息發送到主題時,需要先到 NameServer 查詢該主題存放在哪些Broker 中,擷取到相關 Broker 資訊後,将消息發送給這些 Broker 進行存儲
-
Consumer 要從主題消費消息,也需要首先到 NameServer 查詢一下該主題的消息存儲
在哪些 Broker 上,然後去相應的 Broker 擷取消息進行消費。
使用場景
購物交易,錢包充值,消息推送