近年來,隨各大互聯(lián)網(wǎng)公司大數(shù)據(jù)應(yīng)用的興起,分布式系統(tǒng)廣泛地被投入實踐當(dāng)中。互聯(lián)網(wǎng)公司的分布式系統(tǒng)相比傳統(tǒng)分布式系統(tǒng),具有兩大特點:規(guī)模大和成本低。不同的互聯(lián)網(wǎng)公司會根據(jù)自己業(yè)務(wù)的需求,設(shè)計出適合的方案。分布式系統(tǒng)底層起支撐作用的是分布式存儲系統(tǒng),本文總結(jié)分布式存儲系統(tǒng)的定義與分類。
分布式存儲概念
大量PC機通過網(wǎng)絡(luò)互聯(lián),對外作為一個整體提供存儲服務(wù)。
四大特性:
可擴展: 分布式存儲系統(tǒng)可以通過增加PC機的方式,使系統(tǒng)整體性能表現(xiàn)為線性增長。
低成本:分布式存儲系統(tǒng)的自動容錯、自動負(fù)載均衡機制都構(gòu)建在PC機上。
高性能:大數(shù)據(jù)時代對分布式存儲系統(tǒng)的整體要求。
易用:分布式存儲系統(tǒng)需要能提供易用的對外接口,還要具備完善的監(jiān)控、運維工具,并且能方便與其它系統(tǒng)集成。
分布式存儲系統(tǒng)主要涉及的技術(shù):
數(shù)據(jù)分布:怎么將數(shù)據(jù)均勻地分布到多臺PC機上?如何實現(xiàn)跨PC機讀寫操作?
一致性:如何將數(shù)據(jù)的多個副本分布在多臺PC機上,在出現(xiàn)異常的時候,怎么保證多個副本的數(shù)據(jù)的一致性?
容錯:如何檢測到PC機故障,怎么自動地將故障PC機的數(shù)據(jù)與服務(wù)遷移到其他PC機上?
負(fù)載均衡:新增PC機和集群中正常運行過程中如何實現(xiàn)自動負(fù)載均衡?數(shù)據(jù)遷移過程中如何保證不影響已有服務(wù)?
事務(wù)與并發(fā)控制:如何實現(xiàn)分布式事務(wù)?如何實現(xiàn)多版本并發(fā)控制?
易用:如何設(shè)計對外接口使得系統(tǒng)便于使用?如何設(shè)計監(jiān)控系統(tǒng)使系統(tǒng)內(nèi)部狀態(tài)以簡單的形式暴露給運維人員?
壓縮與解壓縮:如何根據(jù)數(shù)據(jù)特點設(shè)計合理的壓縮/解壓縮算法,如何權(quán)衡壓縮算法的存儲消耗和CPU計算消耗?
存儲的數(shù)據(jù)分類:
非結(jié)構(gòu)化數(shù)據(jù):如聲頻、圖像、文檔、視頻。
半結(jié)構(gòu)化數(shù)據(jù):一般是自描述的,如HTML文檔,模型結(jié)構(gòu)和內(nèi)容混在一起的數(shù)據(jù),數(shù)據(jù)模式不需要預(yù)先定義。
結(jié)構(gòu)化數(shù)據(jù):模型結(jié)構(gòu)和內(nèi)容是分開的,數(shù)據(jù)模式需要預(yù)先定義,一般存儲在關(guān)系數(shù)據(jù)庫中,可用二維關(guān)系表結(jié)構(gòu)表示。
分布式存儲分類
一、分布式文件系統(tǒng)
互聯(lián)網(wǎng)應(yīng)用需要存儲大量的圖片、視頻等非結(jié)構(gòu)化數(shù)據(jù)對象,這類數(shù)據(jù)以對象的形式組織,對象之間沒有關(guān)聯(lián),一般稱作Blob(Binary Large Object)數(shù)據(jù)。分布式文件系統(tǒng)用來存儲Blob對象,如Facebook Haystack、Taobao Flie System。
分布式文件系統(tǒng)主要存儲三種類型數(shù)據(jù):Blob對象、定長塊、大文件。分布式系統(tǒng)內(nèi)部按數(shù)據(jù)塊(chunk)來組織數(shù)據(jù),每個數(shù)據(jù)塊大小相同,每個數(shù)據(jù)塊可包含多個Blob對象或定長塊,而大文件可分成多個數(shù)據(jù)塊。分布式文件系統(tǒng)將這些數(shù)據(jù)塊分布到存儲集群中,處理數(shù)據(jù)復(fù)制、一致性、負(fù)載均衡、容錯等難題,并將用戶的數(shù)據(jù)操作映射為對底層數(shù)據(jù)塊的操作。
二、分布式鍵值系統(tǒng)
分布式鍵值系統(tǒng)用于關(guān)系簡單的半結(jié)構(gòu)化數(shù)據(jù)的存儲,只提供基于主鍵的CRUD功能。典型的系統(tǒng)如Amazon Dynamo、Taobao Tair。在數(shù)據(jù)結(jié)構(gòu)角度上,分布式鍵值系統(tǒng)與傳統(tǒng)的哈希表相似,特點是:分布式鍵值系統(tǒng),能將數(shù)據(jù)分布到集群中多個存儲節(jié)點。分布式鍵值系統(tǒng)是分布式表格系統(tǒng)的一種簡化實現(xiàn),一般用于緩存。
三、分布式表格系統(tǒng)
分布式表格系統(tǒng)用于關(guān)系較復(fù)雜的半結(jié)構(gòu)化數(shù)據(jù)的存儲。與分布式鍵值系統(tǒng)相比,功能更強大,比如單行事務(wù)、單個實體下的多行事務(wù),典型系統(tǒng)如Google Bigtable、Microsoft Azure Table Storge、Amazon DynamoDB。而與分布式數(shù)據(jù)庫相比,分布式表格系統(tǒng)主要針對單張表格的操作,不支持復(fù)雜的操作如多標(biāo)關(guān)聯(lián)、多表聯(lián)接。分布式表格系統(tǒng)介于分布式鍵值系統(tǒng)與分布式數(shù)據(jù)庫系統(tǒng)之間,是一種很好的折衷。
四、分布式數(shù)據(jù)庫
分布式數(shù)據(jù)庫由單機關(guān)系數(shù)據(jù)庫發(fā)展而來,用于存儲結(jié)構(gòu)化數(shù)據(jù)。分布式數(shù)據(jù)庫采用二維表格組織數(shù)據(jù),提供SQL關(guān)系查詢語言,多表關(guān)聯(lián),事務(wù)與并發(fā)控制,功能強大。典型系統(tǒng)如Mysql數(shù)據(jù)庫分片集群,Amazon RDS、Microsoft SQL Azure.分布式數(shù)據(jù)庫系統(tǒng)往往遇到擴展受限的問題,但并不是絕對的,如Google Spanner是一個支持多數(shù)據(jù)中心的分布式數(shù)據(jù)庫,它不但具有豐富的數(shù)據(jù)庫功能,還能擴展到多個數(shù)據(jù)中心。
SQL數(shù)據(jù)庫是目前最為成熟的存儲系統(tǒng),它也面對著巨大的挑戰(zhàn):傳統(tǒng)關(guān)系數(shù)據(jù)庫事務(wù)及二維關(guān)系模型難以高效地擴展到多個存儲節(jié)點上。為解決SQL數(shù)據(jù)庫面臨的可擴展、高并發(fā)、高性能問題,各種非關(guān)系數(shù)據(jù)庫風(fēng)起云涌,此類系統(tǒng)稱為NoSQL系統(tǒng)。
參考書目:《大規(guī)模分布式存儲系統(tǒng)》,楊傳輝著。