一替裆、分布式存儲(chǔ)
分布式系統(tǒng)是大量普通的PC通過(guò)網(wǎng)絡(luò)互連薯定,對(duì)外提供一個(gè)整體的存儲(chǔ)服務(wù)
- 分布式存儲(chǔ)系統(tǒng)有以下的特性:
- 可擴(kuò)展性:分布式存儲(chǔ)系統(tǒng)可以擴(kuò)展到幾百臺(tái)的集群規(guī)模,而且隨著集群規(guī)模的增長(zhǎng),系統(tǒng)的整體性能呈線性增長(zhǎng)齿拂;
- 低成本:分布式存儲(chǔ)系統(tǒng)的自動(dòng)容錯(cuò)或南、自動(dòng)負(fù)載均衡機(jī)制使其可以構(gòu)建在普通的PC機(jī)器上孩等,另外,線性擴(kuò)展的能力也使得增加采够、減少機(jī)器非常的方便肄方,可以實(shí)現(xiàn)自動(dòng)運(yùn)維;
- 高性能:無(wú)論是針對(duì)整個(gè)集群還是單臺(tái)服務(wù)器蹬癌,都要求分布式存儲(chǔ)系統(tǒng)具備高性能权她;
- 易用:分布式存儲(chǔ)系統(tǒng)需要對(duì)外提供易用的接口虹茶,另外,也要求具備完善的運(yùn)維隅要、監(jiān)控工具蝴罪,并可以方便的和系統(tǒng)進(jìn)行集成。
- 分布式存儲(chǔ)系統(tǒng)的主要挑戰(zhàn)在于數(shù)據(jù)拾徙、狀態(tài)信息的持久化洲炊,要求在自動(dòng)遷移、自動(dòng)容錯(cuò)尼啡、并發(fā)讀寫(xiě)的過(guò)程中保證數(shù)據(jù)的一致性暂衡。分布式存儲(chǔ)涉及的技術(shù)主要來(lái)自兩個(gè)領(lǐng)域:分布式系統(tǒng)以及數(shù)據(jù)庫(kù),如下所示:
- 數(shù)據(jù)分布:如何將數(shù)據(jù)分布到多臺(tái)機(jī)器上并保證數(shù)據(jù)分布均勻崖瞭?數(shù)據(jù)分布到多臺(tái)服務(wù)器之后如何實(shí)現(xiàn)跨服務(wù)器讀寫(xiě)操作狂巢?
- 一致性:如何將數(shù)據(jù)的多個(gè)副本復(fù)制到多臺(tái)服務(wù)器,即使在異常的清空下书聚,也能夠保證數(shù)據(jù)在不同副本之間的一致性唧领?
- 容錯(cuò):如何檢測(cè)到服務(wù)器故障?如何自動(dòng)將出現(xiàn)故障的機(jī)器上的數(shù)據(jù)和服務(wù)遷移到別的機(jī)器上雌续?
- 負(fù)載均衡:新增服務(wù)器和集群正常運(yùn)行的過(guò)程中如何實(shí)現(xiàn)自動(dòng)負(fù)載均衡斩个?數(shù)據(jù)遷移的過(guò)程中如何保證不影響已有的服務(wù)?
- 事務(wù)和并發(fā)控制:如何設(shè)計(jì)對(duì)外接口使得系統(tǒng)更容易使用驯杜?如何設(shè)計(jì)監(jiān)控系統(tǒng)并將系統(tǒng)的內(nèi)部系統(tǒng)狀態(tài)以方便的形式暴露給運(yùn)維人員受啥?
- 壓縮、解壓縮算法:如何根據(jù)數(shù)據(jù)的特點(diǎn)設(shè)計(jì)合理的壓縮和解壓縮算法鸽心?如何平衡壓縮算法節(jié)省的空間存儲(chǔ)和對(duì)CPU資源的消耗滚局?
1. 存儲(chǔ)的分類
本地存儲(chǔ)(系統(tǒng)級(jí)文件系統(tǒng))
ext4,xfs顽频,ntfs藤肢。網(wǎng)絡(luò)存儲(chǔ)(網(wǎng)絡(luò)級(jí)文件系統(tǒng))
共享的都是文件系統(tǒng):
網(wǎng)絡(luò)文件系統(tǒng):nfs
分布式網(wǎng)絡(luò)文件系統(tǒng):hdfs
分布式網(wǎng)絡(luò)文件系統(tǒng):glusterfs共享的是裸設(shè)備:
塊存儲(chǔ):cinder,ceph(塊存儲(chǔ) 對(duì)象存儲(chǔ) 網(wǎng)絡(luò)文件系統(tǒng)-分布式)
存儲(chǔ)區(qū)域網(wǎng):SAN
分布式存儲(chǔ)(集群)
client | namenode (元數(shù)據(jù)服務(wù)器) | ------------------------------------ | | | datanode datanode datanode
二糯景、分布式存儲(chǔ)種類及其對(duì)比
1. Hadoop HDFS(大數(shù)據(jù)分布式文件系統(tǒng))
Hadoop分布式文件系統(tǒng)(HDFS)是一個(gè)分布式文件系統(tǒng)嘁圈,適用于商用硬件上高數(shù)據(jù)吞吐量對(duì)大數(shù)據(jù)集的訪問(wèn)的需求。
該系統(tǒng)仿效了谷歌文件系統(tǒng)(GFS)蟀淮,數(shù)據(jù)在相同節(jié)點(diǎn)上以復(fù)制的方式進(jìn)行存儲(chǔ)以實(shí)現(xiàn)將數(shù)據(jù)合并計(jì)算的目的丑孩。
該系統(tǒng)的主要設(shè)計(jì)目標(biāo)包括:容錯(cuò),可擴(kuò)展性灭贷,高效性和可靠性温学。
HDFS采用了MapReduce,不遷移數(shù)據(jù)而是以將處理任務(wù)遷移到物理節(jié)點(diǎn)(保存數(shù)據(jù))的方式降低網(wǎng)絡(luò)I/O甚疟。HDFS是Apache Hadoop的一個(gè)子項(xiàng)目并且安裝在Hadoop仗岖。
2. OpenStack的對(duì)象存儲(chǔ)Swift
OpenStack Swift提供一個(gè)類似Amazon S3的對(duì)象存儲(chǔ)逃延。其主要特點(diǎn)為:
- 所有的存儲(chǔ)對(duì)象都有自身的元數(shù)據(jù)和一個(gè)URL,這些對(duì)象在盡可能唯一的區(qū)域復(fù)制3次轧拄,而這些區(qū)域可被定義為一組驅(qū)動(dòng)器揽祥,一個(gè)節(jié)點(diǎn),一個(gè)機(jī)架等檩电。
- 開(kāi)發(fā)者通過(guò)一個(gè)RESTful HTTP API與對(duì)象存儲(chǔ)系統(tǒng)相互作用拄丰。
- 對(duì)象數(shù)據(jù)可以放置在集群的任何地方。
- 在不影響性能的情況下俐末,集群通過(guò)增加外部節(jié)點(diǎn)進(jìn)行擴(kuò)展料按。這是相對(duì)全面升級(jí),性價(jià)比更高的近線存儲(chǔ)擴(kuò)展卓箫。
- 數(shù)據(jù)無(wú)需遷移到一個(gè)全新的存儲(chǔ)系統(tǒng)载矿。
- 集群可無(wú)宕機(jī)增加新的節(jié)點(diǎn)。
- 故障節(jié)點(diǎn)和磁盤(pán)可無(wú)宕機(jī)調(diào)換烹卒。
- 在標(biāo)準(zhǔn)硬件上運(yùn)行闷盔,例如戴爾,HP和Supermicro旅急。
3. 公有云對(duì)象存儲(chǔ)
公有云大都只有對(duì)象存儲(chǔ)逢勾。例如,谷歌云存儲(chǔ)是一個(gè)快速藐吮,具有可擴(kuò)展性和高可用性的對(duì)象存儲(chǔ)敏沉。而且云存儲(chǔ)無(wú)需一種模式也就是圖像,視頻文件就可以存儲(chǔ)海量數(shù)據(jù)炎码。
Amazon類似產(chǎn)品就是S3: http://aws.amazon.com/s3
微軟類似產(chǎn)品Azure Blob:https://azure.microsoft.com/en-us/services/storage/blobs/
阿里類似的有OSS:https://www.aliyun.com/product/oss/
4. Facebook用于圖片存儲(chǔ)的Haystack
Facebook Haystack擁有大量元數(shù)據(jù),適用于圖片的對(duì)象存儲(chǔ)秋泳,采用每張圖片一個(gè)文件的方式取代NFS文件系統(tǒng)潦闲。
https://www.usenix.org/legacy/event/osdi10/tech/full_papers/Beaver.pdf
此外,F(xiàn)acebook著眼于長(zhǎng)尾服務(wù)迫皱,因此傳統(tǒng)緩存和CDN(內(nèi)容發(fā)布網(wǎng)絡(luò))的表現(xiàn)并不甚佳歉闰。一般正常的網(wǎng)站有99%CDN點(diǎn)擊量,但Facebook只有約80%CDN點(diǎn)擊率卓起。
5. Facebook的暖性BLOB存儲(chǔ):f4
Haystack最初是用于Facebook圖片應(yīng)用的主要存儲(chǔ)系統(tǒng)和敬。到2016年已有近8年的歷史。
這期間它通過(guò)比如減少磁盤(pán)數(shù)設(shè)法讀取一個(gè)BLOB到1戏阅,跨地理位置通過(guò)復(fù)制(3個(gè)復(fù)制因子即文件副本數(shù))實(shí)現(xiàn)容錯(cuò)等更多優(yōu)化而運(yùn)作良好昼弟。在此期間Facebook雖然服務(wù)良好但依然進(jìn)行了演變。
截止2014年2月奕筐,Haystack存儲(chǔ)了約4000億張圖片舱痘。
https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-muralidhar.pdf
目前变骡,f4存儲(chǔ)了超過(guò)65PB的本地BLOB,而且將其有效復(fù)制因子從3.6降低到任意2.8或2.1芭逝。
f4提供低延遲塌碌,可恢復(fù)磁盤(pán),主機(jī)旬盯,機(jī)柜和數(shù)據(jù)中心故障并為暖性BLOB提供足夠的吞吐量台妆。
PS:f4僅存儲(chǔ)“暖性”圖片
6. OpenStack塊存儲(chǔ)Cinder
OpenStack(類似商業(yè)云)還可以作為一個(gè)Linux訪問(wèn)的文件系統(tǒng)提供傳統(tǒng)塊存儲(chǔ)。Cinder能虛擬化塊存儲(chǔ)設(shè)備池并向需要和消費(fèi)這些資源的終端用戶提供一個(gè)自助服務(wù)API胖翰,而無(wú)需了解存儲(chǔ)部署的實(shí)際位置或是存儲(chǔ)設(shè)備的類型接剩。
OpenStack Cinder類似于亞馬遜EBS(Elastic Block Storage)和微軟Azure Files以及谷歌Persistent Storage。
7. Lustre
Lustre是一個(gè)并行分布式文件系統(tǒng)泡态,通常用于大規(guī)模集群計(jì)算搂漠。它的名字取自Linux和cluster(集群)的組合詞。Lustre文件系統(tǒng)軟件遵循GPL2認(rèn)證協(xié)議并為(各類規(guī)模)計(jì)算機(jī)集群提供高性能文件系統(tǒng)某弦。
因?yàn)長(zhǎng)ustre文件系統(tǒng)擁有高性能的能力和開(kāi)放式認(rèn)證桐汤,所以經(jīng)常應(yīng)用于超級(jí)計(jì)算機(jī)。
Lustre文件系統(tǒng)具有可擴(kuò)展性靶壮,可支持在數(shù)百臺(tái)服務(wù)器上配置數(shù)萬(wàn)客戶端節(jié)點(diǎn)怔毛,PB級(jí)容量的多個(gè)計(jì)算機(jī)集群,并超出TB級(jí)聚合I/O吞吐量腾降。
這讓Lustre文件系統(tǒng)受到擁有大型數(shù)據(jù)中心企業(yè)的青睞拣度,其中也包括例如氣象,虛擬螃壤,石油天然氣抗果,生命科學(xué),多功能媒體和金融行業(yè)奸晴。Lustre曾輾轉(zhuǎn)過(guò)幾家企業(yè)冤馏,最近的三個(gè)所有者(時(shí)間先后排序)依次為甲骨文,Whamcloud和英特爾寄啼。
8. Gluster
GlusterFS遵循Infiniband RDMA或TCP/IP協(xié)議創(chuàng)建塊集中存儲(chǔ)逮光,在單一全局命名空間內(nèi)集中磁盤(pán)和內(nèi)存資源并管理數(shù)據(jù)。
對(duì)于公有云部署墩划,GlusterFS提供了一個(gè)AWS AMI(亞馬遜機(jī)器鏡像)涕刚。它不是在物理服務(wù)器上部署,而是在Elastic Compute Cloud(EC2)實(shí)例上部署乙帮,并且地層存儲(chǔ)空間是Amazon的Elastic Block Storage(EBS)杜漠。
在這樣的環(huán)境里,容量通過(guò)部署更多EBS存儲(chǔ)設(shè)備進(jìn)行擴(kuò)展,性能則通過(guò)部署更多EC2實(shí)例進(jìn)行增強(qiáng)碑幅,而可用性通過(guò)AWS可用區(qū)域之間進(jìn)行多方復(fù)制來(lái)提升戴陡。
9. FUSE(Filesystem in Userspace 用戶空間文件系統(tǒng))
FUSE GPL/LGPL認(rèn)證是一個(gè)操作系統(tǒng)機(jī)制,針對(duì)類Unix計(jì)算操作系統(tǒng)沟涨,讓用戶無(wú)需編輯內(nèi)核代碼即可構(gòu)建自身文件系統(tǒng)恤批。這雖然是通過(guò)在用戶空間內(nèi)運(yùn)行文件系統(tǒng)代碼實(shí)現(xiàn),但FUSE模塊僅提供了一個(gè)到達(dá)真正內(nèi)核接口的一架“橋梁”裹赴。
FUSE最初是作為一個(gè)可加載的核心模塊來(lái)實(shí)現(xiàn)的喜庞,通過(guò)GlusterFS使用,尤其適用于編寫(xiě)虛擬文件系統(tǒng)棋返。但與傳統(tǒng)文件系統(tǒng)延都,尤其是可存儲(chǔ)數(shù)據(jù)和從磁盤(pán)上檢索數(shù)據(jù)的系統(tǒng)不同,虛擬文件系統(tǒng)檢索實(shí)際上無(wú)法存儲(chǔ)自身數(shù)據(jù)睛竣。它們充當(dāng)一個(gè)現(xiàn)有文件系統(tǒng)或存儲(chǔ)設(shè)備的視圖或翻譯晰房。
10. Ceph
Ceph是紅帽的,Ceph是一個(gè)遵循LGPL協(xié)議的存儲(chǔ)平臺(tái)射沟,它可以在單個(gè)分布式節(jié)點(diǎn)上同時(shí)支持對(duì)象存儲(chǔ)殊者,塊存儲(chǔ)和文件存儲(chǔ)。
Cphe主要設(shè)計(jì)的初衷是變成一個(gè)可避免單節(jié)點(diǎn)故障的分布式文件系統(tǒng)验夯,EB級(jí)別的擴(kuò)展能力猖吴,而且是一種開(kāi)源自由軟件,許多超融合的分布式文件系統(tǒng)都是基于Ceph開(kāi)發(fā)的挥转,作為開(kāi)源軟件在超融合商業(yè)領(lǐng)域的應(yīng)用海蔽,Ceph因?yàn)樾阅艿葐?wèn)題被詬病,但不乏許多廠商在Ceph上不斷優(yōu)化和努力绑谣。
11. IBM General Parallel File System(GPFS通用并行文件系統(tǒng))
這個(gè)專有GPFS是一個(gè)由IBM開(kāi)發(fā)的高性能集群文件系統(tǒng)党窜。它可以在共享磁盤(pán)或非共享分布式并行模式中進(jìn)行部署。
GPFS-SNC借宵,其中SNC代表Shared Nothing Cluster(非共享集群)幌衣,它是2012年12月正式發(fā)布的GPFS 3.5版本,如今被稱為GPFS-FPO(文件配置優(yōu)化)暇务。這讓GPFS可以在一個(gè)聯(lián)網(wǎng)服務(wù)器的集群上采用本地連接磁盤(pán),而不需要配置共享磁盤(pán)的專用服務(wù)器(例如使用SAN)怔软,GPFS-FPO可充當(dāng)HDFS兼容的文件系統(tǒng)垦细。
GPFS時(shí)常通過(guò)調(diào)用計(jì)算集群上的MPI-IO(Message Passing Interface)進(jìn)行訪問(wèn)。功能包括:
分布式元數(shù)據(jù)處理挡逼。包括目錄樹(shù)括改。沒(méi)有單獨(dú)的“目錄控制器”或“索引服務(wù)器”管理文件系統(tǒng)。
對(duì)非常大的目錄進(jìn)行高效索引目錄項(xiàng)家坎。很多文件系統(tǒng)被限制在單一目錄(通常嘱能, 65536或類似的小二進(jìn)制數(shù)中的少數(shù)文件內(nèi)吝梅,而GPFS并沒(méi)有這樣的限制。
分布式鎖定惹骂。該功能考慮了完整的Posix文件系統(tǒng)語(yǔ)義苏携,包括鎖定文件進(jìn)行獨(dú)占訪問(wèn)。
12. Global Federated File System(GFFS全局聯(lián)合文件系統(tǒng))
XSEDE文件系統(tǒng)在美國(guó)弗吉尼亞大學(xué)Genesis II項(xiàng)目的一部分对粪。
GFFS的出現(xiàn)是源于一個(gè)對(duì)諸如文件系統(tǒng)的資源以一種聯(lián)合右冻,安全,標(biāo)準(zhǔn)化著拭,可擴(kuò)展和透明化的方式進(jìn)行訪問(wèn)和遠(yuǎn)程操作的需求纱扭,而無(wú)需數(shù)據(jù)所有者或應(yīng)用程序開(kāi)發(fā)者和用戶改變他們存儲(chǔ)和訪問(wèn)數(shù)據(jù)的任何方式。
GFFS通過(guò)采用一個(gè)全局基于路徑的命名空間實(shí)現(xiàn)儡遮,例如/data/bio/file1乳蛾。
在現(xiàn)有文件系統(tǒng)中的數(shù)據(jù),無(wú)論它們是否是 Windows文件系統(tǒng)鄙币, MacOS文件系統(tǒng)肃叶,AFS,Linux或者Lustre文件系統(tǒng)都可以導(dǎo)出或鏈接到全局命名空間爱榔。
例如被环,一個(gè)用戶可以將它 “C” 盤(pán)上一個(gè)本地根目錄結(jié)構(gòu),C:\work\collaboration-with-Bob導(dǎo)出到全局命名空間详幽,/data/bio/project-Phil筛欢,那么用戶 “C” 盤(pán)\work\collaboration-with-bob 內(nèi)的文件和目錄將會(huì)受到訪問(wèn)限制,用戶可以通過(guò)/data/bio/project-Bob路徑在 GFFS上訪問(wèn)唇聘。
13. 最常見(jiàn)的GPFS和HDFS有什么區(qū)別版姑?
GPFS和Hadoop的HDFS系統(tǒng)對(duì)比起來(lái)相當(dāng)有趣,它設(shè)計(jì)用于在商用硬件上存儲(chǔ)類似或更大的數(shù)據(jù)——換言之就是迟郎,不配置 RAID 磁盤(pán)的數(shù)據(jù)中心和一個(gè)SAN剥险。
HDFS還將文件分割成塊,并將它們存儲(chǔ)在不同的文件系統(tǒng)節(jié)點(diǎn)內(nèi)宪肖。
HDFS對(duì)磁盤(pán)可靠性的依賴并不高表制,它可以在不同的節(jié)點(diǎn)內(nèi)存儲(chǔ)塊的副本。保存單一副本塊的一個(gè)節(jié)點(diǎn)出現(xiàn)故障是小問(wèn)題控乾,可以再?gòu)?fù)制該組其它有效塊內(nèi)的副本么介。相較而言,雖然GPFS支持故障節(jié)點(diǎn)恢復(fù)蜕衡,但它是一個(gè)更嚴(yán)重的事件壤短,它可能包括數(shù)據(jù)(暫時(shí)性)丟失的高風(fēng)險(xiǎn)。
GPFS支持完整的Posix文件系統(tǒng)語(yǔ)義。 HDFS和GFS(谷歌文件系統(tǒng))并不支持完整的Posix語(yǔ)義久脯。
GPFS跨文件系統(tǒng)分布它的目錄索引和其它元數(shù)據(jù)纳胧。相反, Hadoop將它們保留在主要和次要Namenode中帘撰,大型服務(wù)器必須在RAM內(nèi)存儲(chǔ)所有的索引信息跑慕。
GPFS將文件分割成小塊。Hadoop HDFS喜歡64MB甚至更多的塊骡和,因?yàn)檫@降低了Namenode的存儲(chǔ)需求相赁。小塊或很多小的文件會(huì)快速填充文件系統(tǒng)的索引,因此限制了文件系統(tǒng)的大小慰于。
說(shuō)到分布式文件系統(tǒng)钮科,不得不提到許多超融合廠商,一部分是基于Ceph的婆赠,還有一部分是完全自主研發(fā)的绵脯。