學習筆記--間接通訊

什麼是間接通訊?

間接通訊被定義爲在分佈式系統中實體經過中介者進行通訊,沒有發送者和接收者之間的耦合。編程

間接通訊具備兩個特性:
(1)空間解耦:發送者不須要知道接收者是誰。
(2)時間解耦:發送者和接收者能夠有獨立的生命週期。安全

間接通訊的範型

1.組通訊分佈式

(1)概念
組通訊實現了組播通訊,經過一個操做,消息被髮送到組內的全部成員,與系統中的全部成員通訊。組通訊的一個重要特徵就是一個進程事項發起一個組播操做,而不是發起多個發送操做到每一個進程。spa

(2)分類
a.封閉組和開放組
封閉組:對封閉組的組成員來講,只有組成員才能組播給它。
開發組:對開放組的組成員來講,組外的成員也能組播給它。設計

b.重疊組和非重疊組
重疊組:實體(對象或進程)能夠成爲多個組的成員。
非重疊組:實體(對象或進程)至多隻能屬於一個組。3d

(3)實現對象

JGroups等。blog

2.發佈-訂閱系統生命週期

(1)概念隊列

在發佈-訂閱系統中,發佈者發佈事件到事件服務中,訂閱者經過訂閱表示對特定事件感興趣。發佈-訂閱系統的任務是把訂閱和發佈的事件匹配,保證事件通知正確傳遞。一個給定的事件會傳遞給多個訂閱者,因此發佈-訂閱系統是一個一對多的通訊範型。

發佈-訂閱系統

(2)訂閱模型

a.基於渠道

發佈者發佈事件到命名的渠道,訂閱者訂閱其中一個已命名的渠道,並接收全部發送到那個渠道的事件。

b.基於主題

每一個事件通知能夠定義多個主題,訂閱者根據本身感興趣的主題訂閱。

c.基於內容

基於內容的訂閱是基於主題訂閱的通常化。

d.基於類型

在基於對象的方法中,對象有指定的類型。在基於類型的方法中,訂閱根據事件類型來定義,根據給定的事件類型或者子類型來定義。

(3)發佈-訂閱系統的體系結構

發佈-訂閱系統的體系結構

3.消息隊列

(1)概念

生產者進程發送消息到特定隊列,消費者進程從隊列中接收消息。有如下三種接收方式:

a.堵塞接收:保持堵塞直到有合適的消息可用。
b.非堵塞接收(輪詢):檢查隊列的標誌,返回可用的消息,或是一個不可用的指示。
c.通知操做:當隊列中有可用的消息時,向消費者發送事件通知。

消息隊列

(2)JMS(Java消息服務)

JMS編程模型

4.分佈式共享內存

(1)概念

分佈式共享內存(DSM)是一種抽象,用於給不共享內存的物理機共享數據。分佈式共享內存使得不一樣計算機的進程能訪問不一樣進程的數據,就像訪問本身進程的數據同樣。

分佈式共享內存抽象

(2)與消息傳遞的比較

比較內容 分佈式共享內存 消息傳遞
序列化 相關進程直接共享變量,不須要序列化。 變量在發送進程序列化,在接收進程反序列化。
安全性 共享分佈式內存的進程可能錯誤的變動數據而致使其餘進程失效。 支持消息傳遞的進程由於擁有各自的私有地址空間而獲得保護。
持久性 經過DSM通訊的進程能夠在非重疊生命週期進行。 經過消息傳遞的進程須要在同一時刻進行消息傳遞。
同步 經過共享內存編程的常規組成成分,例如鎖和信號量實現的。 經過消息原語進行進程之間的同步。

(3)實現

Apollo Domain文件系統等。

5.元組空間

(1)概念

進程經過在元組空間放置元組間接進行通訊,其餘進程能夠從元組空間中讀或者刪除元組。元組由一個或多個帶類型的數據域組成。

(2)實現

JavaSpaces等等。

間接通訊風格總結
比較內容 發佈-訂閱系統 消息隊列 分佈式共享內存 空間組通訊
空間解耦
時間解耦 可能 可能
服務風格 基於通訊的 基於通訊的 基於通訊的 基於狀態的 基於狀態的
通訊模式 一對多 一對多 一對一 一對多 一對一或一對多
主要目的 可靠的分佈式計算 信息分發或EAI;移動和無處不在系統 信息分發或EAI;商業事務處理 並行和分佈式計算 並行和分佈式計算;移動和無處不在系統
可伸縮性 有限的 有限的 可能 可能 有限的
關聯性 基於內容的發佈-訂閱

參考資料

《分佈式系統概念與設計》

相關文章
相關標籤/搜索