行程間通訊(interprocess communication)是所有分散式系統的核心。分散式系統中的通訊永遠建立在底層網路提供的低階訊息傳遞(message passing)之上,而用訊息傳遞來表達通訊,比使用非分散式平台上的共享記憶體原語困難得多。

現代分散式系統往往由散布在不可靠網路(如網際網路)上的數千甚至數百萬個行程組成——若不把電腦網路的原始通訊設施換成更高階的抽象,大規模分散式應用的開發將極為困難。

本章先討論通訊行程必須遵守的規則——即協定(protocol)——並聚焦於以**分層(layer)**的方式組織協定;接著探討四種廣泛使用的通訊模型:

  • 遠端程序呼叫(Remote Procedure Call, RPC):隱藏訊息傳遞的大部分細節,最適合客戶端—伺服器型應用。
  • 訊息導向中介軟體(Message-Oriented Middleware, MOM):當通訊不遵循嚴格的客戶端—伺服器互動模式時,以訊息為思考單位更為合適;高階的訊息佇列模型,運作方式與電子郵件系統相仿。
  • 資料串流(data streaming):多媒體分散式系統需要支援音訊、視訊等連續媒體的通訊,串流讓連續的訊息流能在各種時間性限制下傳輸。
  • 多播(multicasting):把資料送給多個接收者的一般性問題;隨著對多播設施理解的進步,出現了新穎且優雅的資料散播解法。

本章重點#

  • 中介軟體的重要課題,是在傳輸層介面之上提供更高階的通訊抽象,讓行程間通訊更容易表達。
  • RPC 的本質:服務以程序實作、本體在伺服器端執行;客戶端只看到程序的簽章,由 stub 負責把參數包裝成訊息往返。RPC 提供同步通訊——客戶端會阻塞直到伺服器回覆。
  • 訊息導向模型的兩大軸線:通訊是否持久(persistent)、是否同步(synchronous)。訊息導向中介軟體通常提供持久非同步通訊,用在 RPC 不合適的場合,常見於整合分散各地的資料庫成大型資訊系統,也用於電子郵件與工作流程。
  • 串流通訊關注連續訊息之間的時間關係;連續資料串流對每則訊息規定最大與最小端對端延遲。抖動(jitter)是關鍵的複雜因素——即使平均效能可接受,傳遞時間的大幅變動仍可能讓效能無法接受。
  • 多播有兩類做法:從發送者到接收者建立散播樹(利用節點自我組織成點對點系統的能力,可去中心化地動態建樹),以及流行病協定(epidemic protocols)——簡單卻極為強健,除了散播訊息,也能有效率地聚合大型分散式系統中的資訊。