協調式系統(coordination-based systems)方法的關鍵,在於計算(computation)與協調(coordination)的乾淨分離。若把分散式系統看成一群(可能是多執行緒的)行程:
- 計算部分由各個行程構成,每個行程專注於特定的計算活動,原則上獨立於其他行程的活動進行。
- 協調部分處理行程之間的通訊與合作,是把各行程的活動黏合成一個整體的「膠水」(Gelernter 與 Carriero, 1992)。
在分散式協調式系統中,焦點就放在行程之間如何進行協調。
協調模型的分類#
卡布里等人(Cabri et al., 2000)為行動代理人(mobile agents)提出了一套協調模型分類法,同樣適用於許多其他類型的分散式系統。將其術語調整到一般的分散式系統後,可以沿著兩個維度來區分模型:
- 時間(temporal)維度:通訊雙方是否必須同時在線上執行。
- 參照(referential)維度:通訊時是否必須明確指名對方(名稱或識別碼)。
兩個維度的耦合/解耦組合,產生四種協調模型:
| 參照耦合 | 參照解耦 | |
|---|---|---|
| 時間耦合 | 直接協調 | 會面導向協調 |
| 時間解耦 | 信箱協調 | 生成式通訊 |

圖 13-1:協調模型的分類(改編自 Cabri et al., 2000)。
直接協調(direct coordination)#
行程在時間與參照上都耦合時,協調以直接的方式進行:
- 參照耦合通常表現為通訊中的明確指名——行程只有在知道對方的名稱或識別碼時才能與之交換資訊。
- 時間耦合表示通訊雙方必須都在執行中。
- 這類似第 4 章討論的暫時性訊息導向通訊(transient message-oriented communication)。
信箱協調(mailbox coordination)#
時間解耦、但參照耦合的情況:
- 兩個通訊行程不必同時執行,通訊透過把訊息放入(可能共享的)信箱完成。
- 這類似第 4 章的持久性訊息導向通訊(persistent message-oriented communication)。
- 必須明確指定存放訊息的信箱,因此仍存在參照耦合。
會面導向協調(meeting-oriented coordination)#
參照解耦、但時間耦合的模型群:
- 行程彼此不認識:想與其他行程協調活動時,無法直接指涉對方。
- 取而代之的是**會面(meeting)**的概念:行程暫時聚集在一起協調活動,且模型規定參與會面的行程必須同時執行。
- 會面式系統常以**事件(events)**實作,如物件式分散式系統所支援的那種。本章討論另一種實作會面的機制:發佈/訂閱系統(publish/subscribe systems)——行程可以訂閱含有特定主題資訊的訊息,其他行程則產生(發佈)這類訊息。多數發佈/訂閱系統要求通訊行程同時活躍(時間耦合),但通訊行程彼此可以保持匿名。
生成式通訊(generative communication)#
最廣為人知的協調模型是參照與時間皆解耦的組合,代表是 Linda 程式設計系統(Gelernter, 1985)引入的生成式通訊:
- 核心想法:一群獨立的行程共用一個持久的共享資料空間(shared dataspace),其中存放元組(tuples)。
- 元組是帶標籤的資料紀錄,由若干(可能為零個)有型別的欄位組成。行程可以把任何型別的紀錄放進共享資料空間(亦即「生成」通訊紀錄)。
- 與黑板(blackboard)不同,不需要事先協議元組的結構,只用標籤來區分代表不同資訊種類的元組。
共享資料空間的一個有趣特性是實作了元組的**關聯式搜尋(associative search)**機制:行程要取出元組時,只需指定它感興趣的(部分)欄位值;任何符合該描述的元組就會從資料空間移除並交給該行程。若找不到符合者,行程可以選擇阻塞(block)直到出現符合的元組。
生成式通訊與共享資料空間常也被視為發佈/訂閱系統的一種形式,本章採納這種共通觀點。關於發佈/訂閱系統較全面(且視角相當廣)的綜覽可見 Eugster et al. (2003)。本章採取的立場是:這類系統至少要有行程間的參照解耦,最好也有時間解耦。