1. 程式人生 > >多機儲存原理與設計

多機儲存原理與設計

1 單機儲存與多機儲存:單機儲存的原理在多機儲存仍然可用,多級儲存基於單機儲存。
2, 多機資料分佈:區別於單機儲存,資料分佈在多個節點上,在多個節點之間需要實現負載均衡,資料分佈方式: 
· 靜態方式:取模,uid%32。 
· 動態方式:一致性hash,會有資料漂移的問題。 
負載均衡:多節點之間資料的均衡,負載高的節點遷移到負載低的節點(資料遷移)。
3,複製:分散式儲存多個副本,保證了高可靠和高可用,Commit Log。
4, 故障檢測:心跳機制、資料遷移、故障恢復。
 

分散式儲存系統面臨的需求比較複雜,大致可以分為三類:

非結構化資料:包括所有格式的辦公文件、文字、圖片、影象、音訊、視訊資訊等。
結構化資料:一般會儲存在關係型資料庫中,可用二位關係的表結構來對資料進行描述,資料的模式需要預先進行定義。
半結構化資料:介於結構化資料和半結構化資料直接,HTML文件就屬於半結構化資料。它一般是自描述的,與結構化資料的最大區別之處在於,半結構化的資料模式和內容混在一起,沒有明顯的界限和區分。
根據分散式系統面臨的各種需求,目前主要有四種分散式儲存系統:分散式檔案系統、分散式鍵值系統、分散式表格和分散式資料庫

分散式檔案系統

網際網路應用需要儲存大量的圖片、文字、照片和視訊等各種非結構化的資料物件,這類資料以物件的形式進行組織,物件之間沒有關聯關係,這樣的資料一般我們稱為Blob資料。 
分散式檔案系統用於儲存Blob資料物件,典型的系統有Facebook Haystack以及Taobao File System.另外,分散式檔案系統也常作為分散式表格系統以及分散式資料庫系統的底層儲存。 
總體上看,分散式檔案系統儲存三種資料:Blob物件、定長塊以及大檔案。在系統的實現層面,分散式檔案系統內部按照資料塊(chunk)來組織資料,每個資料塊的大小相同,每個資料可以包含多個Blob物件或者定長塊,一個大檔案也可以拆分成為多個數據塊。分散式檔案系統將這些資料塊分散儲存到分散式儲存叢集中去,處理資料的複製、一致性、負載均衡、容錯等分散式系統難題,並將使用者對Blob物件、定長塊以及檔案的操作對映成為對底層資料塊的操作。

分散式鍵值系統

分散式鍵值系統用於儲存關係簡單的半結構化資料,它只對外提供主鍵的CRUD操作,根據主鍵建立、讀取、更新或者刪除一條鍵值記錄。 
典型的分散式鍵值儲存系統有Amazon Dynamo以及Taobao Tair。從資料結構的角度來看,分散式鍵值儲存系統與傳統的hash表比較相似,不同的是,分散式鍵值系統支援將資料儲存到分散式叢集中的多個儲存節點。分散式鍵值系統是分散式表格系統的一種簡化的實現,一般用來對資料進行快取。一致性雜湊是分散式鍵值系統中常用的資料分佈技術。

分散式表格系統

分散式表格系統用於儲存關係比較複雜的半結構化資料,與分散式鍵值儲存系統相比,分散式表格儲存系統部僅僅支援簡單的資料CRUD操作,而且支援掃描整個主鍵範圍。分散式表格儲存系統以表格為單位組織資料,每個表格包括很多行,通過主鍵唯一標示一行資料,支援根據主鍵的CRUD功能以及範圍查詢的功能。 
分散式表格系統借鑑了很多關係型資料庫的技術,例如支援某種程度上的事務,比如單行事務。

分散式資料庫系統

分散式資料庫系統是從單機關係型資料庫擴充套件而來,用於儲存結構化資料。分散式資料庫採用二維表的形式組織資料,提供SQL關係查詢語言,支援多表關聯、巢狀子查詢等操作,並提供資料庫事務和併發控制。
 

原理:

FLP定理與設計

FLP:FLP Impossibility(FLP不可能性)是分散式領域中一個非常著名的結果,1985年Fischer、Lynch and Patterson三位作者發表論文,並獲取Dijkstra獎,在非同步訊息通訊場景,即使只有一個程序失敗,沒有任何方法能夠保證非失敗程序達到一致性。
FLP系統模型基於以下幾個假設: 
非同步通訊:與同步通訊最大區別是沒有時鐘、不能時間同步、不能使用超時、不能探測失敗、訊息可任意延遲、訊息可亂序
通訊健壯性:只要程序非失敗,訊息雖會被無限延遲,但最終會被送達,並且訊息僅會被送達一次(重複保證)
Fail-Stop模型:程序失敗不再處理任何訊息
失敗程序數量:最多一個程序失敗
FLP定理帶給我們的啟示: 
1985年FLP證明了非同步通訊中不存在任何一致性的分散式演算法(FLP Impossibility),人們就開始尋找分散式系統設計的各種因素,一致性演算法既然不存在,如果能找到一些設計因素,適當取捨以最大限度滿足實現系統需求成為當時的重要議題,出現了CAP定理。
CAP定理與設計

CAP定理:2000年Berkerly的Eric Brewer教授提出了一個著名的CAP理論,CAP是一致性(Consistency)、可用性(Availability)、分割槽可容忍性(Tolerance of network Partition)的首字母縮寫。在分散式環境下,三者不可能同時滿足。 
一致性(Consistency):Read的資料總是最新的(Write的結果),這裡指的是強一致性。
可用性(Availabilty):機器或者系統部分發生故障,仍然能夠正常提供讀寫服務。
分割槽容忍性(Tolerance of network Partition):機器故障、網路故障、機房故障等異常情況下仍然能夠滿足一致性和可用性。 
2. CAP設計:分散式儲存系統需要能夠自動容錯,也就是說分割槽容忍性需要保證。如果保證一致性,需要強同步複製,主副本之間網路異常,寫操作被阻塞,可用性無法保證。如果保證可用性,採取非同步複製機制,保證了分散式儲存系統的可用性,強一致性無法保證,設計時一致性和可用性需要折中權衡。金融行業中,不允許資料丟失,需要強一致性。
2PC協議與設計

2PC協議:Two Phase Commit(2PC),用於實現分散式事物,有兩類節點,協調者和事物參與者,每個節點都會記錄Commit Log,保證資料可靠性,兩階段提交由兩個階段組成: 
請求階段(Prepare Phase):協調者通知參與者準備提交或者取消事務,之後進入表決階段,每個參與者將告知協調者自己的決策:同意or不同意
提交階段(Commit Phase):收到參與者的所有決策後,進行決策:提交or取消,通知參與者執行操作:所有參與者都同意,提交 or 取消,參與者收到協調者的通知後執行操作
2PC協議與設計:2PC協議是阻塞式,事務參與者可能發生故障:設定超時時間,協調者可能發生故障:日誌記錄,備用協調者。
Paxos協議與設計

Paxos協議:用於解決多個節點之間的一致性問題,多個節點,只有一個主節點,主節點掛掉,如果選舉新的節點,主節點往往以操作日誌的形式同步備節點。角色:提議者(Proposer)和接受者(Acceptor)。Proposer傳送accept訊息到Acceptor要求接受某個提議者,如果超過一半的Acceptor接受,意味著提議值生效,Proposer傳送acknowledge訊息通知所有的Acceptor提議生效。
2PC與Paxos:作用不同:2PC協議保證多個數據分片上操作的原子性,Paxos協議保證一個數據分片多個副本之間的資料一致性。2PC最大缺陷無法處理協調者宕機,Paxos可以處理協調者宕機,兩者可以結合使用。
Paxos協議用法:實現全域性的鎖服務或者命名和配置服務,將使用者資料複製到多個數據中心。