一個鬆散但實用的定義#
文獻中對分散式系統(distributed system)有各種定義,沒有一個令人滿意,彼此之間也互不一致。就本書的目的而言,給出一個鬆散的刻畫就足夠了:
分散式系統是一群獨立的電腦的集合,但在使用者眼中,它呈現為單一且一致的系統(a single coherent system)。
這個定義有幾個重要面向:
- 元件自主(autonomous):系統由各自獨立運作的電腦組成。
- 單一系統觀:使用者(無論是人還是程式)認為自己面對的是一個系統。這意味著這些自主元件必須以某種方式協同合作——如何建立這種合作,正是開發分散式系統的核心課題。
- 不預設電腦類型:原則上,同一個系統內的電腦可以從高效能大型主機(mainframe)到感測器網路中的小節點都有。
- 不預設互連方式:對電腦之間如何互相連接也不做任何假設。
重要特徵#
與其繼續糾結定義,不如聚焦在分散式系統的幾個重要特徵:
- 差異對使用者隱藏:各電腦之間的差異、它們的通訊方式,以及系統的內部組織,大多對使用者隱藏。
- 一致且統一的互動方式:無論在何時、何地互動,使用者與應用程式都能以一致、統一的方式與系統打交道。
- 相對容易擴展(scale):這是「元件獨立」加上「隱藏元件參與方式」的直接結果。
- 持續可用:即使部分元件暫時故障,系統通常仍持續可用。使用者與應用程式不應察覺到零件正在被替換、修復,或為了服務更多使用者而新增。
中介軟體(Middleware)#
為了在支援異質電腦與網路的同時提供單一系統觀,分散式系統常以一層軟體層來組織:
- 這一層在邏輯上位於上層(使用者與應用程式)與下層(作業系統與基本通訊設施)之間。
- 這樣組織的分散式系統,因此有時被稱為中介軟體(middleware)。
圖 1-1 描繪的情境是:四台以網路相連的電腦上執行三個應用程式,其中應用程式 B 分散在電腦 2 與電腦 3 上。

圖 1-1:以中介軟體形式組織的分散式系統。中介軟體層橫跨多台機器,並對每個應用程式提供相同的介面。
中介軟體的角色可以歸納為:
- 提供讓單一分散式應用程式的各元件彼此通訊的手段。
- 也讓不同的應用程式之間能夠通訊。
- 同時,在合理可行的範圍內,盡量對應用程式隱藏硬體與作業系統的差異。