筆記: 《分佈式系統:概念與設計》第一章 分佈式系統的特徵

1.1 簡介

分佈式系統概念:一個硬件或軟件組件分佈在連網的計算機上,組件之間通過傳遞消息進行通信和動作協調的系統

分佈式系統的特徵:

  1. 併發:用戶在各自的計算機上工作,請求某一類共享資源。系統處理共享資源的能力會隨着網絡資源(硬件或軟件)的增加而提高。
  2. 缺乏全局時鐘:網絡上的計算機與時鐘同步所達到的準確性是有限的,即沒有一個正確時間的全局概念。
  3. 故障獨立性:系統的每個組件會單獨出現故障,而其他組件還在運行。

構造和使用分佈式系統的主要動力來源於對共享資源的期望。

1.2 分佈式系統的例子

(1)Web搜索:Google
(2)大型多人在線遊戲
(3)金融交易
(4)分佈式多媒體系統

Google用於支持搜索的分佈式系統基礎設施的亮點:
(1)一個底層物理設施:由位於全世界的多個數據中心的聯網計算機組成
(2)一個分佈式文件系統
(3)一個相關的結構化分佈式存儲系統:提供對超大數據集的快速訪問
(4)一個鎖服務:提供分佈式加鎖和協定等功能
(5)一個編程模式:支持對超大並行和分佈式計算的管理

複雜事件處理(Complex Event Processing, CEP):提供一種方法來將一起發生的事件組成邏輯的、時序的或空間的模式。

防火牆:保護企業內部網,防止未授權的消息進出網絡。防火牆是通過過濾到達消息和外發消息來實現的,可在源或目的地進行過濾。

1.3 分佈式系統的趨勢

移動計算:指用戶在移動或訪問某個非常規環境時執行計算任務的性能。

雲被定義成一組基於互聯網的應用,並且足以滿足大多數用戶需求的存儲和計算服務的集合,這使得用戶能大部分或全部免除本地數據存儲和應用軟件的使用。

通常,雲實現在集羣計算機上,從而提供每個服務所要求的必要的伸縮性和性能。集羣計算機(cluster computer)是互連的計算機集合,它們緊密協作提供單一的、集成的高性能計算能力。集羣服務器的總目的是提供一系列的雲服務,包括高性能計算能力、大容量存儲,豐富的應用服務。

1.4 關注資源共享

服務:表示計算機系統中管理相關資源並提供功能給用戶和應用的一個單獨的部分。服務將資源訪問限制爲一組定義良好的操作。

客戶-服務器計算:指在連網的計算機上的一個運行程序,這個程序接收來自其他計算機上正在運行的程序的請求,這執行一個服務並適當地做出響應。發出請求的稱爲客戶,響應請求的程序服務器。

1.5 挑戰

(1)異構性

異構性,即存在多樣性和差別。以下幾個方面均存在異構性:

  • 網絡
  • 計算機硬件
  • 操作系統
  • 編程語言
  • 由不同開發者完成的軟件實現

中間件:指一個軟件層,它提供一個編程抽象,同時屏蔽了底層網絡、硬件、操作系統和編程語言的異構性。

移動代碼:指能從一臺計算機發送到另一臺計算機,並在目的計算機上運行的代碼。適合在一種計算機上運行的代碼未必適合在另一種計算機上運行,因爲可執行程序通常依賴於計算機的指令集和操作系統(例如Windows和Linux)

(2)開放性

分佈式系統的開放性主要取決於新的資源共享服務能被增加和供多種客戶程序使用的程度。

開放的分佈式系統特徵總結:

  1. 發佈系統的關鍵接口
  2. 開發的分佈式系統是基於一致的通信機制和發佈接口訪問共享資源的
  3. 開放的分佈式系統能用不同銷售商提供的異構硬件和軟件構造,但如果想讓系統正確工作,就要仔細測試和驗證每個組件與發佈的標準之間的一致性
(3)安全性

信息資源的安全性包括三個方面:

  1. 機密性:防止泄漏給未授權的人
  2. 完整性:防止被改變或被破壞
  3. 可用性:防止對訪問資源的手段的干擾

加密技術可解決的問題:

  1. 以安全的方式在網絡上通過消息發送敏感信息
  2. 正確地識別遠程用戶或其他代理的身份

尚未圓滿解決的安全問題:

  1. 拒絕服務攻擊:用大量無意義的請求攻擊服務,使得重要的用戶不能使用它。
  2. 移動代碼的安全:運行來自網絡上的可執行程序,其後果是不可預測的。
(4)可伸縮性

如果資源數量和用戶數量激增,系統仍能保持其有效性,那麼該系統就被稱爲可伸縮的。

可伸縮分佈式系統的設計面臨的挑戰:

  1. 控制物理資源的開銷:當對資源的需求增加時,應該可以花費合理的開銷擴展系統以滿足要求。
  2. 控制性能損失:合理的算法設計,採用層次結構的算法其伸縮性要好於使用線性結構的算法。
  3. 防止軟件資源用盡:比如IPv4地址即將用盡
  4. 避免性能瓶頸:算法應該是分散型,以避免性能瓶頸。緩存和複製可以用於提高頻繁使用的資源的性能。
(5)故障處理

分佈式系統的故障是部分的,即有些組件出了故障而有些組件運行正常。因此故障的處理相當困難。

故障處理技術:

  1. 檢測故障:有些故障通過一定的手段是可以被檢測的。

  2. 掩蓋故障:有些被檢測到的故障能被隱藏起來或降低它的嚴重程度。例如:

     (1)消息在不能到達時進行重傳
     (2)將文件數據寫入兩個磁盤,如果一個磁盤損壞,另一個磁盤的數據仍是正確的。
    
  3. 容錯:試圖檢測並隱藏所有的故障是不實際的,服務的客戶應該能被設計成容錯的。例如:瀏覽器不會一直等待與它的服務器建立連接,如果不能連接,則通知用戶嘗試稍後進行連接。

  4. 故障恢復:在服務器崩潰後,永久數據的狀態能被恢復或“回滾”。

  5. 冗餘:利用同於組件,服務可以實現容錯。

面對硬件故障,分佈式系統提供高可用性。系統的可用性是對系統可用時間的比例的一個度量指標。當分佈式系統中的一個組件出現故障時,僅僅是使用受損組件的那部分工作受到影響。如果用戶正在使用的計算機出現故障,用戶可以轉移到另一臺計算機上,並且服務器進程能在另一臺計算機上啓動。

(6)併發性

服務和應用通常運行併發地處理多個客戶請求。爲了使對象在併發環境中能安全使用,它的操作必須在數據保持一致的基礎上同步。這可通過標準的技術(信號量或鎖等等)來實現。

(7)透明性

定義:對用戶和應用程序員屏蔽分佈式系統的組件的分離性,使系統被認爲是一個整體,而不是獨立組件的集合。

訪問透明性:用相同的操作訪問本地資源和遠程資源。
位置透明性:不需要知道資源的物理或網絡位置就能夠訪問它們。
併發透明性:幾個進程能併發地使用共享資源進行操作而互不干擾。
故障透明性:屏蔽錯誤,無論是硬件還是軟件故障,用戶都能夠完成它們的任務。
性能透明性:當負載變換,系統能被重新配置以提高性能。
伸縮透明性:系統和應用能夠進行擴展而不改變系統結構或應用算法。

訪問透明性:例如具有文件夾的圖形界面,無論是本地資源還是遠程資源,文件夾的圖形用戶界面都是一樣的。

位置透明性:例如Web資源名或URL就是位置透明的,不需要知道資源的物理或網絡位置即可進行訪問。

網絡透明性(訪問透明性和位置透明性的統稱):例如電子郵件地址的使用。給用戶發送郵件不需要知道他們的物理位置或網絡位置,發送郵件信息的過程也不依賴於接收者的位置。

(8)服務質量

影響客戶和用戶體驗的服務質量是可靠性、安全性和性能。

1.6 實例研究:萬維網

Web基於以下三個主要的標準技術組件:

(1)超文本標記語言(HTML) :頁面在瀏覽器上顯示時指定其內容和佈局的語言。
(2)統一資源定位器(URL):用於識別文檔和保存成Web一部分的其他資源。
(3)具有標準交互規則(超文本傳輸協議,HTTP)的客戶-服務器體系結構。

HTTP URL有兩項主要的工作:

  1. 識別出哪一個Web服務器維護資源
  2. 識別出該服務器上的那些資源是被請求的

HTTP的主要特徵:

  1. 請求-應答交互:HTTP定義了一些能在一個資源上操作集合和方法。最常見的操作時POST和GET,它們從資源中檢索數據以及提供數據給資源。
  2. 內容類型:瀏覽器未必能處理每一種內容類型。可使用外部插件來識別處理特定的內容,因爲瀏覽器對指定的內容類型所採取的動作是可配置的。
  3. 一次請求一個資源:客戶的每個HTTP請求只指定一個資源。通常瀏覽器可同時發出幾個請求,以減少對用戶的整體延遲。
  4. 簡單的訪問控制:給發出請求的客戶回發一個“質詢”,要求證明其權限可以訪問某些資源。例如口令、密碼等。

Web服務器上運行的爲客戶生成內容的程序通常稱爲公共網關接口(Common Gateway Interface, CGI)程序。一個CGI程序可以具有任何特定應用的功能,只要它分析客戶提供給它的參數,產生所要求類型的內容。

可擴展標記語言(Extensible Markup Language, XML)是一種以標準的、結構化的、特定於應用的格式表示數據的方式。從原理上看,用XML表示的數據在不同的應用間是可移植的,因爲它是自描述的:它包含數據元素的名字、類型和結構。

第一章完,謝謝閱讀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章