分布式存儲是相對於單機存儲而言,之所以要分布自然是因為互聯網時代信息數據大爆炸,單機已經難以滿足大型應用的數據存儲需求。
存儲系統的關注點
關於存儲系統,一般我們關注下面幾個方面:
- 數據分布與負載均衡
- 數據存儲的可靠性與一致性
- 數據訪問性能
- 系統容錯能力
- 系統擴展能力
在單機存儲系統中有一種獨立磁盤冗余陣列(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
下面是我自己開的一個微信公眾號 [瞬息之間],除了寫技術的文章、還有產品的、行業和人生的思考,希望能和更多走在這條路上同行者交流,有興趣可關注一下,謝謝。
版權聲明:本文為博主原創文章,未經博主允許不得轉載。