天天看點

分布式技術原理與算法解析-學習筆記(四)分布式通訊技術遠端調用釋出訂閱消息隊列

分布式通訊技術

  • 遠端調用
    • 遠端過程調用(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 擷取消息進行消費。

使用場景

購物交易,錢包充值,消息推送

繼續閱讀