分佈式存儲概述
分佈式存儲是相對於單機存儲而言,之所以要分佈自然是因爲互聯網時代信息數據大爆炸,單機已經難以滿足大型應用的數據存儲需求。
存儲系統的關注點
關於存儲系統,一般我們關注下面幾個方面:
- 數據分佈與負載均衡
- 數據存儲的可靠性與一致性
- 數據訪問性能
- 系統容錯能力
- 系統擴展能力
在單機存儲系統中有一種獨立磁盤冗餘陣列(RAID,redundant array of independent disks)技術,
是把相同的數據存儲在多個硬盤不同地方的方法。通過把數據放在多個硬盤上,輸入輸出操作能以平衡的方式交疊,改良性能。
這個技術基本解決了我們上面提到的前三點,數據可以通過磁盤陣列控制程序均勻分佈在多個硬盤上,
以實現負載均衡,並通過冗餘來保障可靠性。類似單機掛載多磁盤,數據在磁盤陣列上的冗餘副本要保持一致也容易。
存儲系統的訪問性能基本受制於磁盤的性能,通過分散到多磁盤確實達到了提升性能的效果。
真正的問題難點在於後兩點:
磁盤陣列解決了單一磁盤的脆弱性,但並不能提升存儲子系統整體的可用性,或者說容錯能力。
同理擴展能力同樣受制於磁盤陣列的物理擴展槽的限制。
分佈式存儲的定義與分類
所以分佈式存儲應運而生,作爲存儲系統它同樣需要面對上述問題。
先來看下它的定義:
分佈式存儲系統是大量普通 PC 服務器通過網絡互聯,對外作爲一個整體提供存儲服務。
從上面的定義看,更多時候我們把分佈式存儲作爲一種服務面向各種不同的數據存儲需求。
從數據存儲模型上,我們可以進一步分類分佈式存儲服務爲:
- 文件模型: 對應分佈式文件系統,如:GFS、HDFS
- 關係模型: 對應分佈式數據庫系統,如:Google Spanner、Taobao OceanBase
- 鍵值模型: 很多 NoSQL 系統採用,如:Redis
分佈式存儲的得與失
面對單機存儲系統面對兩個難點,分佈式存儲系統通過集羣方式擴展到幾百甚至幾千臺集羣規模來解決系統擴展能力,
通過軟件層面對單機服務器的硬件容錯能力大大提升了整體集羣的容錯能力。
在獲得這些好處時,自然也有所犧牲,所謂有得必有失。
說到存儲不得不提單機數據庫存儲的事務特性:A(原子性)C(一致性)I(隔離性)D(持久性),
而擴展到分佈式存儲後,受限於分佈式 C(一致性)A(可用性)P(分區容忍性)理論,幾乎不可能滿足完整得事務特性。
各種分佈式存儲服務實現都對單機存儲的事務特性作了權衡取捨,滿足特定的服務場景需求。
另外分佈式存儲系統是基於網絡互聯的,所以除了基本得磁盤訪問性能開銷,還多了網絡性能開銷。
通常一般機械硬盤得平均尋道時間爲 10ms,而機房內網得網絡訪問開銷一般小於 0.5 ms,相對性能損失較小。
而原本由磁陣控制程序負責得數據在磁盤中的分佈、負載均衡策略和一致性保障,
在分佈式存儲中都需要軟件在整個機器集羣層面去考慮,複雜度大大提高。
總結
最近打算對後端分佈式架構設計領域知識做一個梳理,形成一個完善的知識體系,本文算一個開始吧。
上面對分佈式存儲服務進行了總體綜述,瞭解了分佈式存儲服務的分類及其架構設計的關注點。
後續將進一步展開,深入到具體類型的分佈式存儲服務架構設計要點與實現細節。
參考
[1] 楊傳輝. 大規模分佈式存儲系統. 機械工業出版社(2013-09), pp. 7-52
轉載自:http://www.cnblogs.com/mindwind/p/4833103.html