分散式系統是複雜的軟體,其元件天生就分散在多台機器上。要駕馭這種複雜度,關鍵在於系統必須被妥善地組織。觀察分散式系統的組織方式有兩個基本視角:

  • 軟體架構(software architecture):軟體元件在邏輯上如何組織、如何互動。
  • 系統架構(system architecture):把軟體元件實際安置到真實機器上的最終實例化結果。

本章先介紹幾種常見的架構風格(architectural style);接著討論系統架構的三大類組織:由單一伺服器承擔多數功能、遠端用戶端以簡單通訊方式存取的集中式架構,機器角色大致對等的去中心化架構,以及兩者混合的混合式組織

分散式系統的重要目標之一,是透過**中介軟體(middleware)層把應用程式與底層平台分離,以提供分散透明性。但透明性必須付出取捨,因此發展出多種讓中介軟體可調適(adaptive)的技術,這些技術也影響中介軟體本身的組織。更進一步,系統可以監控自身行為、在需要時自動採取對策——這類自主系統(autonomic systems)**經常組織成回饋控制迴圈(feedback control loop)的形式,是系統設計中重要的架構元素,本章以專節討論。

本章重點#

  • 架構風格以元件(component)、連接器(connector)、資料交換與整體配置來描述系統;對分散式系統最重要的風格是分層、物件式、資料中心式與事件式。
  • 主從式(client-server)架構是最重要的一類系統組織:用戶端送出請求,伺服器處理後回覆結果;它反映了「模組呼叫另一個模組」的傳統軟體模組化方式,把不同元件放到不同機器上就得到功能的自然實體分布。
  • 去中心化架構中,行程角色對等,組成覆蓋網路(overlay network):結構化覆蓋網可用確定性方式在行程間路由訊息;非結構化覆蓋網的鄰居清單近乎隨機,必須依賴搜尋演算法定位資料或行程。
  • 自我管理系統在一定程度上融合了系統架構與軟體架構的想法,一般組織成回饋控制迴圈:以監控元件量測系統行為、以分析元件判斷是否需要調整、再以各種機制改變行為。迴圈可以嵌入系統的許多位置,但如何開發與部署仍需大量研究才能形成共識。