《大規模分佈式存儲系統》——基礎篇

分佈式存儲系統分類:


一、單機存儲系統:





1)、哈希存儲引擎——Bitcask系統結構:

Bitcask以哈希表爲存儲引擎,僅支持追加操作,及所有的寫操作只追加而不修改原有數據。在Bitcask中每個數據文件有大小限制,當文件增加到限制大小時,就產生一個新的活躍數據文件,而原文件變爲老數據文件。 老數據文件只讀不寫,所有的寫操作都在活躍數據文件中進行。  支持定期合併,刪除數據文件中的冗餘數據;系統掉電時,支持快速恢復,即直接讀取以保存的索引文件恢復到哈希表中即可,而不用掃描所有的數據文件。




2)、關係數據庫(B樹存儲引擎)——緩存算法

LRU緩存算法:

基本的LRU將近期訪問的item存到一個鏈表中,每次新訪問的item加到鏈表頭部,同時淘汰掉鏈表尾部item(即最近最少訪問到的item被淘汰掉)。

問題1(緩存鎖)如每次訪問item都要更新一次LRU鏈表,都需要對整個LRU加鎖

問題2:若果一次查詢中掃描了大量的item數據,則會導致緩存池LRU鏈表中的大部分或者全部數據被替換掉,從而污染緩存池。


改進的LRU:

對問題1:主要解決思路是“犧牲精度來減小鎖粒度”,如:

分段LRU鏈表(如Mysql:將LRU鏈表分爲前後兩部分,如果訪問的item在前部分則不進行任何操作,即不用將該item移動到  頭部。只有在後半部分時才加鎖,移動到頭部。

計時LRU鏈表(如memcached):鏈表的每個節點item都存儲一個最近訪問時間,每次訪問該item時,只有當距離上次訪問時間 操作某個設定值纔會移動該item到鏈表頭部。

塊LRU鏈表(如OceanBase)鏈表的每個節點不是單獨的一個item數據記錄而是以塊比如2MB的內存塊。每次移動或者淘汰都 以塊爲基本單位。每個塊保存一個訪問計數和最近訪問時間,每次訪問塊中的任何一個item都會將該塊的訪問計數加1,當該塊的訪問計數達到某個設定值(比如所有塊的平均訪問次數)時就更新該塊的最近訪問時間。按塊的最近訪問時間來淘汰塊。

對問題2:基本思想是“分級緩存

LIRS算法(如MySQL InnoDB):LIRS將數據分爲兩部分:LIR(Low Inner-reference Recency)和HIR(High Inner-reference Recency),其中,LIR中的 數據是熱點,在較短的時間內被訪問了至少兩次。LIRS可以看成是一種分級思想:第一級是HIR,第二級是LIR,數據先進入到第一級,當數據在較短的時間內被訪問兩次時成爲熱點數據則進入LIR,HIR和LIR內部都採用LRU策略。這樣,LIR中的數據比較穩定。類似的,如可以實現兩級cache,cache元素先進入第一級cache,當訪問頻率達到一定值(比如2)時升級到第二級,第一級和第二級均內部採用LRU進行替換。


3)、LSM樹存儲引擎——Google LevelDB

    LSM的基本思想就是將的數據的修改增量保存在內存中,當內存達到大小限制後將這些增量數據批量寫入磁盤,讀取時需要合併磁盤中的歷史數據和內存中的增量數據。(這與OceanBase的思想類似:基線數據存放在chunk Server中,增量數據放在Update Server中,讀取是合併基線與增量數據再返回給客戶端)。LSM的優勢在於,以批量寫入規避了磁盤的隨機寫入。

    LevelDb是一個持久化的K_V存儲系統,其基本架構可參考LevelDB源碼分析系列文章



二、分佈式系統:


數據分佈:



複製協議:


一致性與可用性:



容錯:



分佈協議:

兩階段提交協議2PC

保證跨多個節點操作的原子性,即要麼全部成功,要麼全部失敗,用於實現分佈式事務。  在兩階段協議中,系統包含兩類節點:一個協調者(coordinator),和多個事務參與者(workers)。其執行過程如圖所示。   兩階段協議爲阻塞協議,執行過程中需要加鎖,不能被其他事務中斷,且不能容錯,大多數分佈式系統都放棄該協議。

Paxos協議:

分佈式系統設計領域,Paxos是及其重要的一致性算法。有人如是說:All working protocols for asynchronous consensus we have so far encountered have Paxos at their core.”,因此後續將給出專門分析文章

Paxos協議用於解決多個節點間的一致性問題。主節點將操作日誌同步到其他備節點。如當主節點出現故障時,備節點(Propser)會提議自己成爲主節點,而Paxos協議就是保證所有的節點達成一致意見,選舉出唯一的新主節點。

參考:http://blog.csdn.net/anderscloud/article/details/7175209

維基百科:http://zh.wikipedia.org/zh-cn/Paxos%E7%AE%97%E6%B3%95



(轉載請註明出處http://blog.csdn.net/yuyixinye/article/details/43318993



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