什麼是間接通訊?
間接通訊被定義爲在分佈式系統中實體經過中介者進行通訊,沒有發送者和接收者之間的耦合。編程
間接通訊具備兩個特性:
(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消息服務)
4.分佈式共享內存
(1)概念
分佈式共享內存(DSM)是一種抽象,用於給不共享內存的物理機共享數據。分佈式共享內存使得不一樣計算機的進程能訪問不一樣進程的數據,就像訪問本身進程的數據同樣。
(2)與消息傳遞的比較
比較內容 | 分佈式共享內存 | 消息傳遞 |
---|---|---|
序列化 | 相關進程直接共享變量,不須要序列化。 | 變量在發送進程序列化,在接收進程反序列化。 |
安全性 | 共享分佈式內存的進程可能錯誤的變動數據而致使其餘進程失效。 | 支持消息傳遞的進程由於擁有各自的私有地址空間而獲得保護。 |
持久性 | 經過DSM通訊的進程能夠在非重疊生命週期進行。 | 經過消息傳遞的進程須要在同一時刻進行消息傳遞。 |
同步 | 經過共享內存編程的常規組成成分,例如鎖和信號量實現的。 | 經過消息原語進行進程之間的同步。 |
(3)實現
Apollo Domain文件系統等。
5.元組空間
(1)概念
進程經過在元組空間放置元組間接進行通訊,其餘進程能夠從元組空間中讀或者刪除元組。元組由一個或多個帶類型的數據域組成。
(2)實現
JavaSpaces等等。
間接通訊風格總結
比較內容 | 組 | 發佈-訂閱系統 | 消息隊列 | 分佈式共享內存 | 空間組通訊 |
---|---|---|---|---|---|
空間解耦 | 是 | 是 | 是 | 是 | 是 |
時間解耦 | 可能 | 可能 | 是 | 是 | 是 |
服務風格 | 基於通訊的 | 基於通訊的 | 基於通訊的 | 基於狀態的 | 基於狀態的 |
通訊模式 | 一對多 | 一對多 | 一對一 | 一對多 | 一對一或一對多 |
主要目的 | 可靠的分佈式計算 | 信息分發或EAI;移動和無處不在系統 | 信息分發或EAI;商業事務處理 | 並行和分佈式計算 | 並行和分佈式計算;移動和無處不在系統 |
可伸縮性 | 有限的 | 有限的 | 可能 | 可能 | 有限的 |
關聯性 | 無 | 基於內容的發佈-訂閱 | 無 | 無 | 有 |
《分佈式系統概念與設計》