分散式系統:系統模型

乌漆WhiteMoon發表於2024-03-12

目錄
  • 系統模型
  • 物理模型
  • 體系結構模型
    • 體系的元素
      • 通訊實體
      • 通訊範型
      • 角色和責任
      • 放置
    • 體系結構模式
    • 相關的中介軟體解決方案
  • 基礎模型
    • 互動模型
    • 故障模型
    • 安全模型

系統模型

在實際情況下,分散式系統存在各種困難和潛在的威脅,例如:

困難和威脅 說明
使用模式的多樣性 系統的元件會承受各種工作負載,有些部分可能斷線或連線不穩定,一些應用對通訊頻寬和延遲有特殊的需求
系統環境的多樣性 分散式系統必須能容納異構的硬體、作業系統和網路
內部問題 包括非同步的時鐘、衝突的資料更新、多種涉及系統單個元件的軟硬體故障模式
外部威脅 包括對資料完整性、保密性的攻擊以及服務拒絕攻擊

不同型別的分散式系統能體現出相似的基本特性,存在一些公共的設計問題。不同的模型將給出分散式系統的公共特性和設計問題,並對分散式系統設計的一個相關方面給出抽象、簡化但一致的描述。主要包括 3 種模型:

模型 說明
物理模型 從計算機及其互聯的網路方面考慮系統的硬體組成
體系結構模型 從系統執行的計算和通訊任務方面來描述系統
基礎模型 採用抽象的觀點描述分散式系統的某個方面

物理模型

物理模型是從計算機和所用網路技術的特定細節中抽象出來的分散式系統底層硬體元素的表示,基線物理模型也被稱為最小物理模型,是一組透過計算機網路進行訊息傳遞的,可擴充套件的計算機結點。基於基線模型,可以將分散式系統的發展分為 3 個世代:

分散式系統世代 說明
早期分散式系統 隨著區域網技術如乙太網的出現而出現,與網際網路的連線有限並支援少量的服務。單個的系統大部分是同構的,開放性不是主要的問題,服務質量提供還很少。
網際網路規模的分散式系統 該世代的系統的底層物理基礎設施由一個可擴充套件的結點集合組成,透過網際網路相互連線。該系統接入的結點具有明顯的異構性,導致開放標準和相關的中介軟體技術的重要性不斷增加。
當代的分散式系統 移動計算的出現導致結點在物理上可以移動,並引起了服務發現等新增功能的需要和對自發互操作的支援。無處不在計算的出現導致了體系結構從分立結點型轉向嵌入式,雲端計算的出現導致了從自治結點完成給定任務轉向一組結點一起提供一個給定的服務。

現在還有一種(物理體系結構叫做系統的系統,它被定義成一個由一系列子系統組成複雜系統,這些子系統本身也是系統,它們一起完成一個或多個特定的任務。
書中給出了三個時代的物理模型的總結:

分散式系統 早期 網際網路規模 當代
規模 超大
異構性 有限(相對同構的配置) 從平臺、語言和中介軟體方面來說都較大 維度增加,包括體系結構中完全不同的風格
開放性 不屬於優先考慮的事 相當重要,引入一系列標準 重要的研究挑戰,已有的標準不能包含複雜系統
服務質量 起步階段 相當重要,引入一系列服務 重要的研究挑戰,已有的服務不能包含複雜系統

體系結構模型

一個系統的體系結構是用獨立指定的元件以及這些元件之間的關係來表示的結構,整體目標是確保結構能滿足現在和將來可能的需求,主要關心的是系統可靠性、可管理性、適應性和價效比。

體系的元素

對於一個分散式系統的基礎構建塊,需要考慮分散式系統中的通訊實體、通訊範型、角色和責任、物理裝置的放置。

通訊實體

對於通訊實體而言,主要有程序、物件、元件、Web 服務這幾種抽象方式,如下表所示。其中對於程序來說,在實際情況下可能有些作業系統不支援程序抽象(例如感測器網路),此時的通訊的實體是結點,以及在一些分散式系統環境中使用了執行緒進行通訊。元件的合約化的方法鼓勵和促進第三方開發元件,也去除了一些隱含的依賴。

通訊實體 說明
程序 分散式系統可以看成是帶有恰當程序間通訊範型的多個程序
物件 在分散式物件導向的方法中,一個計算由若干互動的物件組成,代表分解給定問題領域的自然單元。透過介面被訪問,使用一個相關的介面定義語言(IDL)提供定義在一個物件上的方法的規約。
元件 元件類似於物件,關鍵的區別在於元件不僅能進一步給出關於其他元件/介面的假設,為系統的構造提供一個更完整的合約。
Web 服務 Web 服務透過利用Web標準表示和發現服務,本質上是被整合到全球資訊網中的。

通訊範型

分散式系統中可使用三種不同的通訊範型來實現通訊,其中 RPC 和 RMI 的底層細節對使用者而言是隱藏的。

通訊範型 說明
程序間通訊 分散式系統程序之間通訊的相對底層的支援,包括訊息傳遞原語、直接訪問 API、對多播通訊的支援。
遠端呼叫 覆蓋分散式系統中通訊實體之間基於雙向交換的技術,包括呼叫遠端操作、過程或方法。
遠端過程呼叫(RPC) 遠端計算機上程序中的過程能被呼叫,好像它們是在本地地址空間中的過程一樣。
遠端方法呼叫(RMI) 應用於分散式物件的環境,一個發起呼叫的物件能呼叫一個遠端物件中的方法。

上述技術的共同點在於通訊代表傳送者和接收者之間的雙向關係,目前也出現了一些技術支援間接通訊。間接通訊指透過第三個實體在傳送者和接收者之間的解耦合,傳送者不需要知道正在傳送給誰(空間解耦合),傳送者和接收者不需要同時存在(時間解耦合)。間接通訊的技術包括:

間接通訊技術 說明
組通訊 一個組在系統中用一個組識別符號表示,接收方透過加入組就能選擇性接收傳送到組的訊息,傳送者透過組識別符號傳送訊息給組。
釋出-訂閱系統 提供一箇中間服務,有效確保由生產者生成的資訊被路由到需要這個資訊的消費者。
訊息佇列 提供了點對點服務,生產者程序能傳送訊息到一個指定的佇列,消費者程序能從佇列中接收訊息。
元組空間 程序能把任意的結構化資料項(稱為元組)放到一個持久元組空間,其他程序可以指定感興趣的模式在元組空間讀或者刪除元組。
分散式共享記憶體 用於支援在不共享實體記憶體的程序之間共享資料,提供給程式設計師一種讀或寫的資料結構的抽象。

角色和責任

角色主要有兩種單個程序角色的體系結構風格:客戶機-伺服器和 P2P,在客戶-伺服器結構中程序扮演伺服器和客戶的角色,客戶程序可以與不同主機上的伺服器程序互動。

在 P2P 體系結構中,涉及一項任務或活動的所有程序扮演相同的角色,作為對等方進行協作互動,不區分客戶和伺服器。促使對等系統發展的主要觀點是:一個服務的使用者所擁有的網路和計算資源也能被投人使用以支援那個服務,此時可用於執行服務的資源隨使用者數而增加(例如迅雷)。

放置

諸如物件或服務這樣的實體需要對映到底層的物理分散式基礎設施,通常由大量的機器透過一個任意複雜的網路互聯組成。放置需要考慮實體間的通訊模式、給定機器的可靠性和它們當前的負載、不同機器之間的通訊質量等,主要包括四种放置策略:將服務對映到多個伺服器、快取、移動程式碼、移動代理。

放置策略 說明
將服務對映到多個伺服器 服務可實現成在一個單獨主機上的幾個伺服器程序,在必要時進行互動以便為客戶程序提供服務。
快取 快取用於儲存最近使用的資料物件,當使用者程序需要一個物件時,如果快取中有最新的複製可用就提供快取中的物件。
移動程式碼 將程式碼下載到本地進行執行,好處是能夠提供良好的互動響應,不受與網路通訊相關的延遲或頻寬變化的影響。
移動代理 是一種能透過網路在計算機之間移動的程式,完成諸如資訊蒐集之類的任務,最後返回結果。

例如在 Web 瀏覽器中會在客戶本地的檔案系統重快取最近的 Web 資源,Web 伺服器也會設定代理伺服器提供多個客戶機的快取資料。

對所訪問的計算機上的資源而言,移動代理和移動程式碼可能會帶來潛在的安全威脅。接收一個移動代理時,應該根據代理的角色對其可訪問的本地資源進行限制。同時移動代理是脆弱的,如果它們訪問所需資訊的要求被拒絕,就有可能完不成任務。

體系結構模式

體系結構模式構建在上體系結構元素之上,經典的體系結構模型包括分層體系結構(layering architecture)、層次化體系結構(tiered ar-chitecture)和瘦客戶。分層方法將一個複雜的系統被分成若干層,每層利用下層提供的服務進行工作。因此一個給定的層提供將向上層一個軟體抽象,更高的層不清楚下層的實現細節。就分散式系統而言,分層等同於把服務透過垂直的方式進行組織。一個分散式服務可由一個或多個伺服器程序提供,在程序之間、程序和客戶之間相互互動,在系統範圍內實現對資源一致的檢視的維護。

層次化體系結構與分層體系結構是互補的,層次化是一項組織給定層功能的技術,將具體功能放在合適的伺服器上。對於一個應用功能,可以按照下表進行功能分解。

應用程式功能 說明
表示邏輯 處理使用者互動和修改呈現給使用者的應用檢視
應用邏輯 與應用相關的詳細的應用特定處理
資料邏輯 應用的持久儲存,通常在一個資料庫管理系統中

在兩層架構中三種邏輯被分到兩個程序中,好處是具有互動的低延遲,僅有呼叫操作的訊息交換,不足是將應用邏輯分離到不同的程序,一部分邏輯不能被另一部分直接呼叫。在三層解決方案中,有從邏輯元素到物理伺服器的一對一對映,能提高軟體的可維護性。每一層也都有定義明確的角色,缺點是增加了管理三個伺服器的複雜性,也增加了與每個操作相關的網路流量和延遲。(當然本書的說明較為理論化,實踐中的應用顯然是清一色的使用 MVC 模式實現的三層架構)注意這個方案可以推廣到多層,一個給定的應用領域劃分為 n 個邏輯,每個邏輯元素對映到一個給定的伺服器元素。

分散式計算的趨勢是將複雜性從終端使用者裝置移向網際網路服務,使客戶裝置在較少的假設或需求下獲得對複雜網路化服務的訪問。術語瘦客戶指的是一個軟體層,在執行一個應用程式或訪問遠端計算機上的服務時,由該軟體層提供一個基於視窗的本地使用者介面。這種方法的好處是有可能透過大量的網路化服務和潛在能力,極大地對簡單的本地裝置增強。

瘦客戶體系結構的主要缺點是在互動頻繁的圖形活動中,使用者感受到的延遲會因為在瘦客戶和應用程序之間傳輸影像和向量資訊而增大到不可接受的程度。瘦客戶的概念導致虛擬網路計算(Virtual Network Computing, VNC),VNC 在概念上即為遠端訪問提供圖形使用者介面。這種低層方法確保協議能工作在任何作業系統或應用中,使用者能用不同裝置從任何地方訪問計算機設施。

相關的中介軟體解決方案

中介軟體的任務是為分散式系統的開發提供一個高層的程式設計抽象,並且透過分層,對底層基礎設施中的異構性提供抽象,從而提升互操作性和可移植性。下圖中介軟體的頂層分類是根據通訊實體和相關通訊範型而確定的,遵循五個主要的體系結構模型:分散式物件、分散式元件、釋出-訂閱系統、訊息佇列和 Web 服務。除了程式設計抽象之外,中介軟體也能提供分散式系統的基礎設施服務,供應用程式或其他服務使用,這些基礎設施服務與中介軟體提供的分散式程式設計模式是緊密繫結的。許多分散式應用完全依賴中介軟體提供的服務來支援應用的通訊和資料共享需求,依靠中介軟體支援的開發能大大簡化分散式系統的程式設計。

中介軟體的限制在於分散式程式正確的行為在很多層面上依賴檢查、錯誤校正機制和安全手段,其中有些要求訪問應用的地址空間的資料。任何企圖在通訊系統中單獨完成的檢查將只能保證部分正確性,因此在應用程式中可能重複同樣的任務,降低了程式設計效率並增加了不必要的複雜性並要執行冗餘的計算。

基礎模型

上面的各種系統模型具有一些基本特性,所有的模型都由若干程序組成,程序透過在計算機網路相互通訊。所有的模型都共享下列設計需求:實現程序及網路的效能和可靠性特徵,確保系統中資源的安全性。因此可以歸納出基於基本特性的模型,一個基礎模型應該僅包含要考慮的實質性成分。在基本模型中提取的分散式系統情況能解決下列問題:

基本模型 說明
互動 程序透過傳遞訊息互動,互動模型必須反映通訊帶來的延遲
故障 故障模型將對這些故障進行定義和分類,為分析它們潛在效果以及設計能容忍每種型別故障的系統奠定了基礎
安全 安全模型對發生攻擊的形式給出了定義和分類,為分析對系統的威脅以及設計能抵禦這些威脅的系統奠定了基礎

互動模型

分散式系統由多個以複雜方式進行互動的程序組成,每個程序執行的速率和程序之間訊息傳遞的時限通常是不能預測的。每個程序有它自己的狀態,該狀態由程序能訪問和更新的資料集組成,它不能被其他程序訪問或更新。因此影響程序互動有兩個重要因素:

  • 通訊效能經常是一個限制特性
  • 不可能維護一個全域性時間概念

在通訊通道的效能方面,可以使用計算機網路上的通訊的延遲、頻寬和抖動有關的效能特徵。

效能指標 說明
延遲 從一個程序開始傳送訊息到另一個程序開始接收訊息之間的間隔時間
頻寬 在給定時間內網路能傳遞的資訊總量,當大量通訊通道使用同一個網路時,它們就不得不共享可用的頻寬
抖動 傳遞一系列訊息所花費的時間的變化值,與多媒體資料有關

其中延遲由以下上述 4 種時延相加計算得出,在總時延中究竟是哪一種時延占主導地位,必須具體分析才能得知。

在時鐘和時序方面,分散式系統中的每臺計算機有自己的內部時鐘,本地程序用這個時鐘獲得當前時間值。漂移率指的是計算機時鐘偏離絕對參考時鐘的比率,由於計算機時鐘和絕對時間之間有偏移,兩個程序各自的本地時鐘也會提供不同的時間值。所以很難對程序執行、訊息傳遞或時鐘漂移所花的時間設定時間限制,基於對時間的假設嚴格與否,分別對應了同步分散式系統和非同步分散式系統。同步分散式系統滿足以下三個約束,這種系統是能夠被構造出來的,也就是要求程序用已知的資源需求完成任務,這些資源需求保證有足夠的處理器週期和網路能力,併為程序提供漂移率在一定範圍內的時鐘。

  • 程序執行每一步的時間有一個上限和下限的約束;
  • 透過通道傳遞的每個訊息將在一個已知的時間範圍內接收到;
  • 每個程序有一個本地時鐘,與實際時間的偏移率在一個已知的範圍內。

非同步分散式系統是對程序執行速度、訊息傳遞延遲、時鐘漂移率這 3 個因素沒有限制的系統,也就是對執行的時間間隔沒有任何假設。因為程序需要共享處理器,而通訊通道需要共享網路,所以實際的分散式系統經常是非同步的。因為在一個分散式系統中時鐘不能精確同步,需要使用邏輯時間模型為執行於不同計算機上的程序的事件提供順序。邏輯時間給每個事件賦予一個與它的邏輯順序相對應的數字,這樣後發生的事件的數字比早發生的事件的數字大。

故障模型

在分散式系統中程序和通訊通道都有可能出故障,故障模型定義了故障可能發生的方式,以便理解故障所產生的影響。遺漏故障類錯誤指的是程序或通訊通道不能完成它應該做的動作。

遺漏故障 說明
程序遺漏故障 主要是程序崩潰,當這個程序不能對呼叫訊息進行應答是,在同步系統中可以使用超時來檢測,非同步系統中的超時只能表明程序沒有響應
通訊遺漏故障 在傳送程序和外發訊息緩衝區之間的訊息丟失稱為傳送遺漏故障,在接收訊息緩衝區和接收程序之間的訊息丟失稱為接收遺漏故障,在兩者之間的訊息丟失稱為通道遺漏故障

隨機故障是可能出現的最壞的故障,此時可能發生任何錯誤。程序的隨機故障是指程序隨機地省略要做的處理步驟或執行一些不需要的處理步驟,它不能透過檢視程序是否應答呼叫來檢測。通訊通道也會出現隨機故障,但通訊軟體能識別這類故障並拒絕出錯的訊息(例如序列號或校驗和),整體而言通訊通道的隨機故障很少。

時序故障適用於同步分散式系統,這些故障中的任何一個均可導致在指定時間間隔內對客戶沒有響應。在非同步分散式系統中,一個負載過重的伺服器的響應時間可能很長,但不能說它有時序故障。實時作業系統是以提供時序保證為目的而設計的,但這種系統在設計上很複雜,大多數通用的作業系統不能滿足實時約束。

分散式系統中的每個元件通常是基於其他一組元件構造的,因此利用存在故障的元件構造可靠的服務是可能的,一個服務透過隱藏故障或者將故障轉換成一個更能接受的故障型別來遮蔽故障。對於一對一通訊也是如此,構造一個能遮蔽某些故障的通訊服務需要保證有效性和完整性:

  • 有效性:外發訊息緩衝區中的任何訊息最終能傳遞到接收訊息緩衝區;
  • 完整性:接收到的訊息與傳送的訊息一致,沒有訊息被傳遞兩次。

安全模型

透過保證程序和用於程序互動的通道的安全,以及保護所封裝的物件免遭未授權訪問,可實現分散式系統的安全。保護物件可由不同的使用者按不同的方式使用,這就需要將每個呼叫和每個結果均與對應的授權方相關聯,一個授權方稱為一個主體(principal)。一個主體可以是一個使用者或程序,伺服器負責驗證每個呼叫的主體的身份,檢查它們是否有足夠的訪問許可權完成操作,如果沒有許可權就拒絕它們的請求。客戶可以檢查伺服器的主體身份,以確保結果來自所請求的伺服器。
程序透過傳送訊息進行互動,因為使用的網路和通訊服務是開放的,所以這些訊息很容易於受到攻擊。為了給安全威脅建模,假定敵人能給任何程序傳送任何訊息,並讀取或複製一對程序之間的任何訊息。這些敵人可能來自合法或以非授權方式連線到網路的計算機,帶來的威脅包括對程序的威脅和對通訊通道的威脅。

安全威脅 說明
對程序的威脅 用於處理到達的請求的程序未必能確定傳送方的身份
對通訊通道的威脅 敵人在網路和閘道器上行進時能複製、改變或插人訊息,會對資訊的私密性和完整性構成威脅
拒絕服務 敵人透過超量地、無意義地呼叫服務或在網路上進行訊息傳送,干擾授權使用者的活動,導致物理資源的過載
移動程式碼 來自其他地方的程式程式碼可能帶有惡意攻擊的意圖,在程序接收和執行時對系統進行破壞

安全通道是基於密碼學和認證的,因此利用安全通道可解除這些威脅。

安全系統技術 說明
共享秘鑰 假設一對程序共享一個秘鑰,如果交換的訊息包括證明傳送方共享秘密的秘鑰就能實現確認。
密碼學 密碼學是保證訊息安全的科學,加密是將訊息編碼以隱藏其內容的過程。現代密碼學基於使用金鑰的加密演算法來傳輸資料,只能用相應的解密金鑰恢復。
認證 在訊息中包含加密部分,包含足夠的訊息內容以保證它的真實性。

利用加密和認證構造安全通道,作為已有的通訊服務層之上的服務層。安全通道是連線一對程序的通訊通道,每個程序代表一個主體。安全通道具備以下特性:

  • 每個程序確切知道其他正在執行的程序所代表的主體身份;
  • 確保在其上傳送的資料的私密性和完整性;
  • 每個訊息包括一個物理的或邏輯的時間戳以防訊息被重放或重排序。

相關文章