分佈式存儲概述

分佈式存儲是相對於單機存儲而言,之因此要分佈天然是由於互聯網時代信息數據大爆炸,單機已經難以知足大型應用的數據存儲需求。 數據庫

存儲系統的關注點 後端

關於存儲系統,通常咱們關注下面幾個方面: 服務器

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,相對性能損失較小。 

而本來由磁陣控制程序負責得數據在磁盤中的分佈、負載均衡策略和一致性保障, 在分佈式存儲中都須要軟件在整個機器集羣層面去考慮,複雜度大大提升。 

總結 

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

相關文章
相關標籤/搜索