分散式儲存概述

工程師WWW發表於2016-01-27

分散式儲存是相對於單機儲存而言,之所以要分佈自然是因為網際網路時代資訊資料大爆炸,單機已經難以滿足大型應用的資料儲存需求。

儲存系統的關注點

關於儲存系統,一般我們關注下面幾個方面:

  1. 資料分佈與負載均衡
  2. 資料儲存的可靠性與一致性
  3. 資料訪問效能
  4. 系統容錯能力
  5. 系統擴充套件能力

在單機儲存系統中有一種獨立磁碟冗餘陣列(RAID,redundant array of independent disks)技術, 
是把相同的資料儲存在多個硬碟不同地方的方法。通過把資料放在多個硬碟上,輸入輸出操作能以平衡的方式交疊,改良效能。 
這個技術基本解決了我們上面提到的前三點,資料可以通過磁碟陣列控制程式均勻分佈在多個硬碟上, 
以實現負載均衡,並通過冗餘來保障可靠性。類似單機掛載多磁碟,資料在磁碟陣列上的冗餘副本要保持一致也容易。 
儲存系統的訪問效能基本受制於磁碟的效能,通過分散到多磁碟確實達到了提升效能的效果。

真正的問題難點在於後兩點: 
磁碟陣列解決了單一磁碟的脆弱性,但並不能提升儲存子系統整體的可用性,或者說容錯能力。 
同理擴充套件能力同樣受制於磁碟陣列的物理擴充套件槽的限制。

分散式儲存的定義與分類

所以分散式儲存應運而生,作為儲存系統它同樣需要面對上述問題。 
先來看下它的定義: 
分散式儲存系統是大量普通 PC 伺服器通過網路互聯,對外作為一個整體提供儲存服務。 
從上面的定義看,更多時候我們把分散式儲存作為一種服務面向各種不同的資料儲存需求。

從資料儲存模型上,我們可以進一步分類分散式儲存服務為:

  1. 檔案模型: 對應分散式檔案系統,如:GFS、HDFS
  2. 關係模型: 對應分散式資料庫系統,如:Google Spanner、Taobao OceanBase
  3. 鍵值模型: 很多 NoSQL 系統採用,如:Redis

分散式儲存的得與失

面對單機儲存系統面對兩個難點,分散式儲存系統通過叢集方式擴充套件到幾百甚至幾千臺叢集規模來解決系統擴充套件能力, 
通過軟體層面對單機伺服器的硬體容錯能力大大提升了整體叢集的容錯能力。

在獲得這些好處時,自然也有所犧牲,所謂有得必有失。 
說到儲存不得不提單機資料庫儲存的事務特性:A(原子性)C(一致性)I(隔離性)D(永續性), 
而擴充套件到分散式儲存後,受限於分散式 C(一致性)A(可用性)P(分割槽容忍性)理論,幾乎不可能滿足完整得事務特性。 
各種分散式儲存服務實現都對單機儲存的事務特性作了權衡取捨,滿足特定的服務場景需求。

另外分散式儲存系統是基於網路互聯的,所以除了基本得磁碟訪問效能開銷,還多了網路效能開銷。 
通常一般機械硬碟得平均尋道時間為 10ms,而機房內網得網路訪問開銷一般小於 0.5 ms,相對效能損失較小。 
而原本由磁陣控制程式負責得資料在磁碟中的分佈、負載均衡策略和一致性保障, 
在分散式儲存中都需要軟體在整個機器叢集層面去考慮,複雜度大大提高。

總結

最近打算對後端分散式架構設計領域知識做一個梳理,形成一個完善的知識體系,本文算一個開始吧。 
上面對分散式儲存服務進行了總體綜述,瞭解了分散式儲存服務的分類及其架構設計的關注點。 
後續將進一步展開,深入到具體型別的分散式儲存服務架構設計要點與實現細節。

相關文章