儲存方案設計原則

來源:果殼範文吧 2.73W

設計是 把一種設想 通過合理的規劃 周密的計劃 通過各種感覺形式傳達出來的過程。以下是小編整理的儲存方案設計原則,希望能夠幫助到大家!

儲存方案設計原則

1、CAP理論

2000年Eric Brewer教授提出了著名的CAP理論,即:一個分散式系統不可能滿足一致性,可用性和分割槽容錯性這三個需求,最多隻能同時滿足兩個。

2002年MIT的Seth Gilbert 和 Nancy lynch兩人證明了CAP理論的正確性。

根據CAP理論,一致性(C),可用性(A),分割槽容錯性(P),三者不可兼得,必須有所取捨。

因此係統架構師不要把精力浪費在如何設計才能同時滿足CAP三者的完美分散式系統,而是應該研究如何進行取捨,滿足實際的業務需求。

C: Consistency(一致性),任何一個讀操作總是能讀取到之前完成的寫操作結果,也就是在分散式環境中,多點的資料是一致的;

A: Availability(可用性),每一個操作總是能夠在確定的時間內返回,也就是系統隨時都是可用的;

P: Tolerance of network Partition(分割槽容忍性),在出現網路分割槽(比如斷網)的情況下,分離的系統也能正常執行;

對於分散式儲存系統而言,分割槽容錯性(P)是基本需求,因此只有CP和AP兩種選擇。CP模式保證分佈在網路上不同節點資料的一致性,但對可用性支援不足,這類系統主要有BigTable, HBASE, MongoDB, Redis, MemcacheDB, Berkeley DB等。AP模式主要以實現"最終一致性(Eventual Consistency)"來確保可用性和分割槽容忍性,但弱化了資料一致性要求,典型系統包括Dynamo, Tokyo Cabinet, Cassandra, CouchDB, SimpleDB等。

2、Eventual Consistency(最終一致性)

簡而言之:過程鬆,結果緊,最終結果必須保持一致性。

從客戶端考慮資料一致性模型,假設如下場景:

儲存系統:它在本質上是大規模且高度分佈的系統,其建立目的是為了保證耐用性和可用性。

程序A:對儲存系統進行讀寫。

程序B和C:這兩個程序完全獨立於程序A,也讀寫儲存系統。客戶端一致性必須處理一個觀察者(在此即程序A、B或C)如何以及何時看到儲存系統中的一個數據物件被更新。

根據以上場景可以得到如下三種一致性模型:

強一致性:在更新完成後,(A、B或C進行的)任何後續訪問都將返回更新過的值。

弱一致性:系統不保證後續訪問將返回更新過的值,在那之前要先滿足若干條件。從更新到保證任一觀察者看到更新值的時刻之間的這段時間被稱為不一致視窗。

最終一致性:這是弱一致性的一種特殊形式;儲存系統保證如果物件沒有新的更新,最終所有訪問都將返回最後更新的值。如果沒有發生故障,不一致視窗的最大值可以根據下列因素確定,比如通訊延遲、系統負載、複製方案涉及的副本數量。

客戶端一致性模型的變體有:

因果一致性(Causal consistency):如果程序A通知程序B它已更新了一個數據項,那麼程序B的後續訪問將返回更新後的值,且一次寫入將保證取代前一次寫入。與程序A無因果關係的程序C的'訪問遵守一般的最終一致性規則。

“讀己之所寫”一致性(Read—your—writes consistency):這是一個重要的模型。當程序A自己更新一個數據項之後,它總是訪問到更新過的值,絕不會看到舊值。這是因果一致性模型的一個特例。

會話一致性(Session consistency):這是上一個模型的實用版本,它把訪問儲存系統的程序放到會話的上下文中。只要會話還存在,系統就保證“讀己之所寫”一致性,系統保證也不會延續到新的會話。

單調讀一致性(Monotonic read consistency):如果程序已經看到過資料物件的某個值,那麼任何後續訪問都不會返回在那個值之前的值。

單調寫一致性(Monotonic write consistency):系統保證來自同一個程序的寫操作順序執行。要是系統不能保證這種程度的一致性,就非常難以程式設計了。

3、BASE理論

BASE,即Basically Availble(基本可用)、Soft—state (軟狀態)、Eventual Consistency (最終一致性)。BASE的英文意義是鹼,而ACID是酸,有點水火不容的意思。

關係資料庫的ACID模型擁有高一致性和可靠性,喪失可用性。ACID,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、永續性(Durability)。其中的一致性強調事務完成時,資料庫處於一致的狀態。對於很多應用來說,一致性要求可以降低,而可用性(Availability)的要求則更為明顯。從而產生了弱一致性的理論BASE。 BASE模型反ACID模型,完全不同ACID模型,犧牲高一致性,獲得可用性或可靠性。它僅需要保證系統基本可用,支援分割槽失敗,允許狀態在一定時間內不同步,保證資料達到最終一致性即可。BASE思想主要強調基本的可用性,如果你需要高可用性,也就是純粹的高效能,那麼就要以一致性或容錯性為犧牲,BASE思想的方案在效能上還是有潛力可挖的。

4、I/O五分鐘法則

1987年,Jim Gray 與 Gianfranco Putzolu 發表了"五分鐘法則"的觀點,簡而言之,如果一條記錄頻繁被訪問,就應該放到記憶體裡,否則的話就應該待在硬碟上按需要再訪問。這個臨界點就是五分鐘。看上去像一條經驗性的法則,實際上五分鐘的評估標準是根據投入成本判斷的,根據當時的硬體發展水準,在記憶體中保持1KB的資料成本相當於硬碟中儲存400秒的開銷(接近五分鐘)。這個法則在 1997 年左右的時候進行過一次回顧,證實了五分鐘法則依然有效(硬碟、記憶體實際上沒有質的飛躍),而這次的回顧則是針對 SSD 這個"新的舊硬體"可能帶來的影響。

隨著快閃記憶體時代的來臨,五分鐘法則一分為二:是把 SSD 當成較慢的記憶體(extended buffer pool )使用還是當成較快的硬碟(extended disk)使用。小記憶體頁在記憶體和快閃記憶體之間的移動對比大記憶體頁在快閃記憶體和磁碟之間的移動。在這個法則首次提出的 20 年之後,在快閃記憶體時代,5 分鐘法則依然有效,只不過適合更大的記憶體頁(適合 64KB 的頁,這個頁大小的變化恰恰體現了計算機硬體工藝的發展,以及頻寬、延時)。

根據資料結構和資料特點的不同,對於檔案系統來說, 作業系統傾向於將 SSD 當作瞬時記憶體(cache)來使用。而對於資料庫,傾向於將 SSD 當作一致性儲存來用。

5、Amdahl定律和Gustafson定律

這裡我們以S(n)表示n核系統對具體程式的加速比,K表示序列部分計算時間比例。

Amdahl 定律的加速比:S(n) = 使用1個處理器的序列計算時間 / 使用n個處理器的平行計算時間,S(n) = 1/(K+(1—K)/n) = n/(1+(n—1)K)

Gustafson定律的加速比:S(n) = 使用n個處理器的平行計算量 / 使用1個處理器的序列計算量,S(n) = K+(1—K)n

通俗的講,Amdahl定律將工作量看作1,有n核也只能分擔1—K的工作量;

而Gustafson定律則將單核工作量看作1,有n核就可以增加n(1—K)的工作量。

這裡沒有考慮引進分散式帶來的開銷,如網路和加鎖。從效能價格比的角度看,並不是越分佈越好。

熱門標籤