當前比較適用的海量小文件係統架構方(fāng)案
現在的網站越做越大了,存儲的(de)東西越來越多,如何解決這些文件存儲(chǔ)也成了新的難題。如果把這些文件都完全采用大硬盤(pán)存儲來解決,並不是一個好主意(yì),因為數據量越大(dà)風險就越高,雖然文件能存得下,但是故(gù)障率相應(yīng)會較高,另外重建耗費(fèi)時間也比較長。所以最(zuì)好的辦法是盡可能考慮分布式(shì)存儲(chǔ),把文件想辦法利(lì)用網絡分散(sàn)到多個機器上。
從我所了解的存儲結構來看,分布式存儲大致可以分為幾種:
1、類googlefs的分布式文件係統
因為目前googlefs沒有開源,所以網上出現的分布式文件係統都是(shì)利用google的方案自行實現(xiàn)的。這個方案的優點是可用性比較高(gāo),基本上基於硬盤的應用都(dōu)可以處理,可用範(fàn)圍就比較廣泛。我看了gfs、gfs2、ocfs2、FastDFS、MogileFS的一(yī)些相關介紹,大致有一些認(rèn)識。
首先是文檔比較少(shǎo)而出(chū)現的問(wèn)題倒不少;然後(hòu)是目前這些還沒有一個能稱(chēng)得上是穩定版本,如果有的話(huà),估計(jì)也(yě)就是其中一些收費的版本。因(yīn)為磁盤存儲乃是致(zhì)關重要(yào),所以目前建議還是不要輕易把這些東西部署(shǔ)到重要的地方。假如非常想使用的話,最好是做好充分測試,確保它的功能完全能夠滿足需(xū)要;然後還要想辦法在傳統的(de)文件係統中做好(hǎo)完全的備份,以免造成損失。
另外可以提的一個(gè)東西是memcached,這個東西實現了內存的分布式共享,穩定度貌似比以(yǐ)上這些分布式文件(jiàn)係(xì)統要穩定。不(bú)過是(shì)完全(quán)基於內存的,如果數據量不是很大,可以一(yī)試。
2、手工使(shǐ)用(yòng)文件路徑分散存儲
這個結構(gòu)通常使用在web靜態文(wén)件中,就以(yǐ)這種情形作為例子。
如果這些文件數量比較大,可以通過(guò)分散文件路徑,把某個文件的訪問(wèn)指定到特定的一台或幾台(tái)服務器上。例(lì)如:
1)采用域名的分散策略
例如使用a.xxx.com/b.xxx.com...來區分標記為a或(huò)b的一係列文件,這些文件存儲的時候,依然按照標記,存到a或b的服務器上。這個策略將區分機器的(de)任務交由dns服務器來(lái)執行,擴容時會相應輕鬆。這需要web項目初期就規劃好這些東(dōng)東,後期才(cái)轉用域名策略的成本比較高甚至不可以實現。
2)采用目錄的分散策略
假如域名(míng)初期並沒有(yǒu)規劃使用域名策略,那麽可(kě)以采用代理服務器來進行目錄級的劃分。比如一般存(cún)儲大量(liàng)文件時(shí),因為(wéi)文件係統的限製以及效率問題,都會按照(zhào)一定規則劃分了(le)很多級的目錄,按這些目錄拆分機器也並不是困難的事情。這種架(jià)構的問題在於代理服務器的性能和可靠性問題,需要在這點上稍(shāo)下一點功夫。
以上這兩個方案,都要自(zì)行製定策略實現分散同(tóng)步傳輸,傳(chuán)輸一般可以歸納為推送和抓取兩種辦法,同步的話可以采用日誌同步(把要同步的數據記入日誌,通過日誌記錄來傳輸(shū)相應文件)、比較同步(使用rsync等同步(bù)軟件)或即時同步(有新的修改就(jiù)立刻傳輸);另外要實現單點故障剔(tī)除的話,首先找一個策略把文件存儲到多個節點(diǎn)上,例如,a.xxx.com或目錄a的(de)文件相應也存到b和c節點;然後在環境中使用故障剔除技術(lvs或nginx等),就可以解決(jué)問題,例如:采用域(yù)名的話,可以采用lvs,缺點是(shì)使用的機器就會成倍增加;亦可再用一級代理服務器,缺點是會犧牲性能。采用目錄的話,因(yīn)為本身(shēn)就用到了代理(lǐ)服務器,所以隻要存儲得當,實現比較容易。
關鍵詞:係統(tǒng)架構
閱讀本文(wén)後您(nín)有什麽(me)感想? 已有 人給出評價!
- 1
- 1
- 1
- 1
- 1
- 1