互聯(lián)網(wǎng)分布式存儲入門
在Google、Amazon、騰訊等大型互聯(lián)網(wǎng)公司里,因為業(yè)務(wù)廣泛,有大量的用戶數(shù)據(jù)需要保存,因此分布式存儲系統(tǒng)往往成為該類公司的一個基礎(chǔ)設(shè)施。分布式存儲涉及到單機存儲引擎、分布式系統(tǒng)協(xié)議等眾多領(lǐng)域,該篇文章作為一個入門,帶領(lǐng)大家認識分布式存儲系統(tǒng)的基本概念。
分布式存儲應(yīng)該滿足的基本條件
- 可擴展
以微信朋友圈的圖片為例,隨著微信運營時間的增長,需要保存的朋友圈圖片必然是越來越多的,因此保存這些圖片的分布式存儲系統(tǒng)必須可擴展。
- 低成本
對于大型互聯(lián)網(wǎng)公司來講,要保存的數(shù)據(jù)量非常大,因此成本是考量一個存儲系統(tǒng)是否可上線運營非常重要的一個指標。
- 高性能
無論是對整個分布式存儲集群還是針對單機的存儲引擎,都需要高性能的保證,否則低成本就無從談起。
- 易用性
分布式存儲系統(tǒng)作為一個基礎(chǔ)設(shè)施,必須具備足夠的易用性,才能更好地服務(wù)于各個業(yè)務(wù)。比如Amazon的S3,接口形式統(tǒng)一,接入簡單。
分布式存儲系統(tǒng)面臨的主要技術(shù)挑戰(zhàn)
- 數(shù)據(jù)分布
整個存儲系統(tǒng)是一個集群,如何保證數(shù)據(jù)均勻分布到多臺服務(wù)器?假設(shè)某一數(shù)據(jù)被拆分存儲到多臺服務(wù)器后,又該如何實現(xiàn)跨服務(wù)器讀寫?
- 一致性
出于數(shù)據(jù)可靠性的考慮,同一份數(shù)據(jù)必然是保存多份的,如何保證這多份數(shù)據(jù)的一致性?
- 容錯
對于一個集群而言,機器出現(xiàn)故障是必然的。如何在出現(xiàn)故障時做到及時發(fā)現(xiàn),并且自動把故障機器上的數(shù)據(jù)和服務(wù)遷移到非故障機器?
- 負載均衡
任何一個集群系統(tǒng)都存在負載均衡的策略問題,分布式存儲系統(tǒng)自然不例外。
- 事務(wù)與并發(fā)控制
如果要求該分布式存儲系統(tǒng)支持事務(wù)和并發(fā)控制功能,該如何實現(xiàn)?
- 易用性
易用性前面有提,不再贅述。
- 壓縮/解壓縮
怎樣根據(jù)數(shù)據(jù)的特點設(shè)計、選用合理的壓縮/解壓縮算法以平衡壓縮帶來的空間節(jié)省和消耗的CPU計算資源。
分布式存儲系統(tǒng)存儲的數(shù)據(jù)分類
互聯(lián)網(wǎng)業(yè)務(wù)涉及的數(shù)據(jù)一般可以分為三大類:
1.非結(jié)構(gòu)化數(shù)據(jù)
典型的如圖片、音視頻文件等。
2.結(jié)構(gòu)化數(shù)據(jù)
傳統(tǒng)的用關(guān)系型數(shù)據(jù)庫保存的二維表結(jié)構(gòu)數(shù)據(jù)。
3.半結(jié)構(gòu)化數(shù)據(jù)
介于結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)之間,典型的比如HTML文檔。
分布式存儲系統(tǒng)分類
基于上述數(shù)據(jù)類型存儲的實際需要,分布式存儲系統(tǒng)逐漸演化為以下四種類型:
1.分布式文件系統(tǒng)
一般用于存儲非結(jié)構(gòu)化數(shù)據(jù)。比如HDFS、TFS(Taobao File System)、FastDFS等。
2.分布式鍵值系統(tǒng)
可以通俗地理解為hash表,如淘寶的Tair、Redis、memcached等,一般用于存儲半結(jié)構(gòu)化數(shù)據(jù)。
3.分布式表格系統(tǒng)
也用于存儲非結(jié)構(gòu)化數(shù)據(jù),相比分布式鍵值系統(tǒng),不單單提供基于主鍵的讀寫,還支持對某個主鍵范圍進行掃描,典型的比如Google的Big Table。
4.分布式數(shù)據(jù)庫
由單機數(shù)據(jù)庫發(fā)展而來,用于存儲結(jié)構(gòu)化數(shù)據(jù)。典型的如MySQL Sharding集群。