[心得]分散式系統概念與設計知識整理
前言
DISTRIBUTED SYSTEMS Concepts and Design Fifth Edition George Coulouris et al
因為學習推薦演算法的緣故,打算系統補習一下分散式系統相關的概念。
找到了這本書,第五版,中文名:分散式系統:概念與設計
花了整整1天讀下來,收穫很多,沒有浪費時間。確實如做這個叢書的編輯所言:計算機領域經典著作,被譽為是衡量所有其他分散式系統教材的標準,已被愛丁堡大學、伊利諾伊大學、卡內基-梅隆大學、南加州大學、得克薩斯A&M大學、多倫多大學、羅切斯特理工學院、北京大學等名校採納為高階作業系統、計算機網路、分散式系統課程的教材。華章從第3版就開始引進這本《分散式系統:概念與設計(原書第5版)》,每個版本翻譯版印量約為7000冊,影印版約為5000冊。雖然由於屬於高階課程,銷量有侷限性,但本書在高等院校的師生和研究人員中具有很高的知名度,對於華章教育品牌也具有較大的支撐作用,所以確定繼續做這本教材。
知識筆記
著重搞清楚三個問題:
- 分散式的定義
- 快取機制
- 訊息機制
分散式系統是元件分佈在網路計算機上且通過訊息傳遞進行通訊和動作協調的系統。
分散式系統具備3個特徵:
- 元件併發
- 缺乏全域性時鐘
- 元件故障獨立
服務表示計算機系統中管理相關資源併為使用者和應用提供功能的單獨組成部分。
構造分散式系統的挑戰是其元件的異構性、開放性(允許增加或替換元件)、安全性、可伸縮性(使用者數量增加時能正常執行的能力)、故障處理及元件的併發性和透明性。
互動模型處理訊息傳送等的效能問題,解決在分散式系統中設定時間限制的難題。
故障模型給出程序和通道故障的一個精確規約。
安全模型討論了對程序和通道的各種可能的威脅,它引入了安全通道的概念。
CORBA:公共物件請求代理體系結構
C-S服務模型:
- 資料分割槽或者複製
- 由代理伺服器和客戶進行資料快取
- 使用移動程式碼和移動代理
- 便利地增刪移動裝置
最底層的硬體和軟體層通常被稱為分散式系統和應用的平臺。
遮蔽異構性的軟體層稱為中介軟體。例如CORBA,RMI,DCOM
瘦客戶指在執行遠端應用程式時支援本地UI的軟體層,主要缺點是高度互動時,網路和作業系統延遲。例如X11。
分散式系統使用區域網,廣域網和網際網路進行通訊。計算機網路原理包括協議的7層分層,包交換,路由以及資料流。
程序間通訊主要有2種:
- C-S通訊模式:請求R和應答A訊息是RPC和RMI的基礎
- 組通訊模式:同一訊息被髮送到幾個程序
UDP和TCP都是用套接字抽象,一種源於BSD UNIX系統的概念。
UDP存在可能遺漏和亂序的故障。在UDP上構造可靠的C-S通訊請求-應答協議需要實現doOperation, getRequest and sendReply 3個原語,然後再根據應用做優化。DNS域名服務基於UDP。
在java中,序列化指的是將一個物件或一組有關聯的物件封裝成適合磁碟儲存或訊息傳送的序列格式。反序列化則是從序列格式中恢復物件或一組物件。
冪等操作是指能重複執行的操作。
RPC協議有3種:R,RA和RRA。
組播:單訊息從一個程序傳送到一組程序的每個成員。在應用層,IP組播僅通過UDP可用。
利用訊息標識和訊息重傳確保一個方法最終確實執行。
分散式應用是指由執行在不同程序中互相協作的程式組成的應用。
IDL:介面定義語言。它是的不同語言實現的物件能互相呼叫。典型的如protobuf和thrift。
持久物件:也叫鈍化物件,指那些在兩次啟用之間仍然保證存活著的物件。
在遠端方法呼叫RMI程式設計模型中,某個物件的遠端介面中的一個方法被同步地呼叫(呼叫者等待應答)。
在基於事件的程式設計模型中,每當關注的物件上發生一個已釋出事件,就把它通過非同步地傳送給多個訂閱者。
作業系統實現了在伺服器端的資源封裝和保護,同時它還支援用於訪問資源的呼叫機制,這其中包括通訊和排程。
網路作業系統的獨特特點是,運行於其上的結點能獨立地管理自己的程序資源。
分散式系統對系統中的所有資源只生成單一映像。
程序由執行環境和執行緒組成。執行環境包括地址空間、通訊介面和其他像訊號量這樣的本地資源
執行緒是執行環境中的活動抽象。
保密金鑰加密演算法更適合大量資料加密任務。混合型協議,例如SSL,安全套接字層,用公開金鑰加密演算法先建立一個安全通道,然後使用通道交換金鑰,並將此保密金鑰用於後繼的資料交換。
加密就是將訊息編碼以隱藏原有內容的一個過程。
安全機制基於公開金鑰或保密金鑰。密碼演算法以某種方式對訊息進行交換和混亂,使之在不知道解密金鑰情況下不可逆。
ACL:訪問控制列表
分散式檔案系統主要設計問題包括:
- 有效使用客戶快取
- 當更新檔案時,維持多個副本的一致性
- 出錯後的恢復
- 讀寫不同資料量的檔案的高吞吐量
- 可伸縮性
LDAP:輕量級目錄訪問協議
命名服務儲存了分散式系統中的物件的屬性,特別是它們的地址,並在用一個文字名查詢時,返回這些屬性。
命名服務的主要需求是處理任意數量的名字的能力,服務應具有長期性、高可用性、故障隔離性與不信任容忍性。
命名服務的主要設計問題:首先,名字空間的結構,名字管理的語法規則;其次,繫結名的集合必須被管理。再次,導航問題;最後,複製與快取的使用。
Lamport時鐘是一個計數器,它們依照事件之間的發生在先關係進行更新。時鐘向量是Lamport時鐘的改進,通過檢查時間戳向量,可以決定兩個事件是否是按發生在先關係排序或是併發的。
分散式互斥服務有3種演算法:
- 中央伺服器演算法
- 基於環的演算法
- 基於組播的使用邏輯時鐘的演算法
事務所伺服器上的一個操作序列,由伺服器保證這些操作序列在多個客戶併發訪問和伺服器出現故障情況下的原子性。
併發控制協議基於序列相等的標準,起源於用於解決操作間衝突的規則,主要有以下3種方法:
- 鎖用於在多個事務訪問同一個物件時,根據這些操作訪問同一個物件的先後次序給事務排序
- 樂觀併發控制不會阻塞事務執行,只是在提交時通過檢查來確定已執行的操作是否存在衝突
- 時間戳排序利用時間戳將訪問同一個物件的事務根據其起始時間進行排序
一個分散式事務是指涉及多個不同伺服器的事務。
利用兩階段加鎖方式的分散式事務會導致分散式死鎖。分散式死鎖檢測的目的是在全域性等待圖中尋找環路。一旦某個環路被發現,一個或者多個事務被放棄來解除死鎖。
在分散式系統中,複製是高可用和容錯的關鍵技術。
定義線性化和順序一致性作為容錯服務的正確準則。
在被動(主備份)複製中,通過直接將所有的請求傳送到一個選出的副本管理器,並在其出故障時選出一個備份代替它,可以獲得容錯。
在主動複製中,所有副本管理器獨立地處理所有的請求。
通過組通訊,可以方便地實現這兩種複製形式。
多媒體應用程式實時地生成和消耗連續的資料流,因而需要新的系統機制。這些機制中最重要的是服務質量管理。
QoS請求指定了多媒體資料流可接受的頻寬,延遲和丟失率。
DSM:分散式共享記憶體,它是在不共享實體記憶體的不同計算機程序之間共享資料的一個抽象。
DSM主要的設計問題和實現問題包括:
- DSM結構
- 應用程式實現同步的方法
- 記憶體一致性模型
- 使用寫-更新還是寫-失效協議
- 共享力度
- 系統顛簸