討論架構,先從分散式系統的邏輯組織談起——也就是把系統組織成軟體元件的方式,稱為軟體架構(software architecture)。這個領域的研究已相當成熟,如今普遍認同:設計或採用一個架構,是大型系統能否成功開發的關鍵。
元件、連接器與風格#
**架構風格(architectural style)**由四個要素構成:元件、元件之間的連接方式、元件間交換的資料,以及這些要素如何共同配置成一個系統。
- 元件(component):具有定義明確的必要(required)與提供(provided)介面的模組化單位,可以在其環境中被替換。對分散式系統而言,元件最重要的性質就是「只要遵守介面,就能換掉它」。
- 連接器(connector):比較抽象的概念,一般描述為在元件之間居中協調通訊、協調(coordination)或合作的機制。例如(遠端)程序呼叫、訊息傳遞(message passing)、資料串流等設施都可構成連接器。
元件與連接器組合出各種配置,這些配置再被歸類成不同的架構風格。對分散式系統最重要的四種風格是:分層架構、物件式架構、資料中心式架構、事件式架構。
四種主要風格#
分層架構(layered architectures)#
- 基本想法很簡單:元件分層組織,第 Li 層的元件只能呼叫其下層 Li-1 的元件,反之不行。
- 網路社群廣泛採用這個模型。
- 關鍵觀察:控制流通常逐層流動——請求沿階層往下走,結果往上流。
物件式架構(object-based architectures)#
- 組織上寬鬆得多:每個物件對應一個元件,元件之間透過(遠端)程序呼叫機制連接。
- 這種軟體架構恰好與主從式(client-server)系統架構相匹配。
- 分層與物件式至今仍是大型軟體系統最重要的兩種風格。

圖 2-1:(a) 分層式與 (b) 物件式架構風格。
資料中心式架構(data-centered architectures)#
- 核心想法:行程透過一個共同的(被動或主動)儲存庫溝通。
- 對分散式系統而言,其重要性不亞於分層與物件式。例如大量網路應用建立在共享的分散式檔案系統之上,幾乎所有通訊都經由檔案進行;Web 式分散式系統在很大程度上也是資料中心式的——行程透過共享的 Web 資料服務溝通。
事件式架構(event-based architectures)#
- 行程基本上透過事件的傳播來溝通,事件可以選擇性地攜帶資料。
- 在分散式系統中,事件傳播通常與**發佈/訂閱系統(publish/subscribe systems)**連結:行程發佈事件,中介軟體確保只有訂閱了該事件的行程才會收到。
- 主要優點是行程鬆散耦合:原則上彼此不需明確指涉對方,稱為**空間解耦(decoupled in space)**或指涉解耦(referentially decoupled)。
延伸:事件式+資料中心式=共享資料空間
事件式架構可以與資料中心式架構結合,形成所謂共享資料空間(shared data spaces):
- 行程除了空間解耦,還進一步時間解耦(decoupled in time)——通訊發生時,雙方不必同時在線。
- 許多共享資料空間對共享儲存庫提供類似 SQL 的介面:資料用「描述」來存取,而不是像檔案那樣用明確的參照。

圖 2-2:(a) 事件式與 (b) 共享資料空間架構風格。
這些風格為何重要#
這些軟體架構之所以對分散式系統重要,是因為它們都以(合理程度地)達成**分散透明性(distribution transparency)**為目標。但透明性需要在效能、容錯、易寫程度等面向之間做取捨——沒有單一解法能滿足所有可能的分散式應用,研究者已經放棄「用單一分散式系統涵蓋九成使用情境」的想法。