分布式文件系統(tǒng)JuiceFS測(cè)試總結(jié)
?前言
2021年開(kāi)始,開(kāi)源社區(qū)出現(xiàn)了一款名為JuiceFS的云原生分布式文件系統(tǒng)。這是一款由國(guó)內(nèi)公司開(kāi)源的分布式文件系統(tǒng),2021年1月在GitHub上開(kāi)源,支持k8s原生適配及多種應(yīng)用場(chǎng)景。本文通過(guò)一系列的測(cè)試,評(píng)估分布式文件系統(tǒng)JuiceFS是否滿足G行應(yīng)用場(chǎng)景的需求。
1.主流分布式文件系統(tǒng)技術(shù)參數(shù)對(duì)比
分布式文件系統(tǒng)首先是一個(gè)文件系統(tǒng),應(yīng)該具備的基本要素包括:?
①遵循POSIX標(biāo)準(zhǔn),提供標(biāo)準(zhǔn)的文件系統(tǒng)API接口;
②數(shù)據(jù)強(qiáng)一致性,元數(shù)據(jù)組織形式可靠性以及性能;
③支持的文件存儲(chǔ)及訪問(wèn)量級(jí)。
結(jié)合上述要點(diǎn),對(duì)NAS、CephFS、GlusterFS、JuiceFS分布式文件系統(tǒng)技術(shù)參數(shù)進(jìn)行簡(jiǎn)要對(duì)比:
圖1 主流分布式技術(shù)對(duì)比
從上表可看出,GlusterFS和JuiceFS技術(shù)參數(shù)都不錯(cuò)。GlusterFS是Gluster公司以GPL開(kāi)源的POSIX分布式文件系統(tǒng),2007年發(fā)布第一個(gè)公開(kāi)版本,2011年被RedHat收購(gòu)。實(shí)現(xiàn)的基本思路就是通過(guò)一個(gè)無(wú)狀態(tài)的中間件把多個(gè)單機(jī)文件系統(tǒng)組合成一個(gè)統(tǒng)一的命名空間提供給用戶。
圖2 GlusterFS示意圖
GlusterFS中間件由一組轉(zhuǎn)換器實(shí)現(xiàn),每個(gè)轉(zhuǎn)換器實(shí)現(xiàn)一個(gè)功能,如:鎖、緩存、復(fù)制、分布數(shù)據(jù)等,使用者可以根據(jù)應(yīng)用場(chǎng)景進(jìn)行靈活配置。最大優(yōu)點(diǎn)是:文件最終以相同的目錄結(jié)構(gòu)保存在單機(jī)文件系統(tǒng)上,這樣,即使GlusterFS本身故障也不會(huì)導(dǎo)致數(shù)據(jù)無(wú)法讀出。而這個(gè)結(jié)構(gòu)最大的缺點(diǎn)是:缺乏獨(dú)立的元數(shù)據(jù)節(jié)點(diǎn),要求所有存儲(chǔ)節(jié)點(diǎn)都有完整的數(shù)據(jù)目錄結(jié)構(gòu),導(dǎo)致整個(gè)文件系統(tǒng)的可擴(kuò)展性有限。而數(shù)據(jù)一致問(wèn)題更加復(fù)雜,文件目錄遍歷操作效率低下,缺乏全局監(jiān)控管理功能。
現(xiàn)在,對(duì)象存儲(chǔ)作為低成本、高持久海量的存儲(chǔ)服務(wù)在云時(shí)代廣泛使用。如果分布式文件系統(tǒng)能和對(duì)象存儲(chǔ)結(jié)合,不管是成本還是使用門檻上都將大大降低。原生GlusterFS并不支持對(duì)象存儲(chǔ),后來(lái)集成了Swift對(duì)象存儲(chǔ)技術(shù),將Gluster文件系統(tǒng)(Volume)作為Swift的后端文件存儲(chǔ)系統(tǒng),用于管理磁盤級(jí)數(shù)據(jù)存儲(chǔ),并提供了基于對(duì)象存儲(chǔ)的REST訪問(wèn)接口。
相比之下,JuiceFS的核心思想是在對(duì)象存儲(chǔ)的基礎(chǔ)之上,實(shí)現(xiàn)獨(dú)立的基于內(nèi)存的元數(shù)據(jù)引擎組織和管理文件,對(duì)象存儲(chǔ)用來(lái)存放文件數(shù)據(jù)本身。這種實(shí)現(xiàn)方式兼容POSIX、HDFS、S3API訪問(wèn)接口,對(duì)應(yīng)用透明,無(wú)需應(yīng)用大改造,使用方便。可能存在的問(wèn)題是元數(shù)據(jù)引擎的可靠性,理論上存在元數(shù)據(jù)引擎損壞而導(dǎo)致數(shù)據(jù)無(wú)法讀出的場(chǎng)景,因此生產(chǎn)環(huán)境中必須做高可用和兜底設(shè)計(jì)。
圖3 JuiceFS架構(gòu)圖
2.JuiceFS分布式文件系統(tǒng)調(diào)研方案
從文檔介紹看,除了支持文件共享場(chǎng)景外,JuiceFS也支持非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)、管理與分析場(chǎng)景。但是是否適合G行的使用場(chǎng)景和技術(shù)需求呢?
(1)調(diào)研目標(biāo):文件共享場(chǎng)景
1)一次寫(xiě)多次讀的情況(非交易數(shù)據(jù)),比如日志、備份等。
2)對(duì)于一個(gè)文件多次讀寫(xiě)場(chǎng)景(非交易數(shù)據(jù)),區(qū)分下面2種情況:
①1個(gè)writer多次寫(xiě)入同一個(gè)文件
沒(méi)有并發(fā),也不存在寫(xiě)鎖,writer按open-write-close操作。
②存在多個(gè)writer并發(fā)寫(xiě)入同一個(gè)文件
即多個(gè)文件先搶占鎖文件,獲得鎖后再對(duì)數(shù)據(jù)文件進(jìn)行open-write-close操作,此種方式風(fēng)險(xiǎn)較高,每個(gè)客戶端上的JuiceFS進(jìn)程open文件的fd中會(huì)保留文件長(zhǎng)度,極端情況下存在覆蓋的可能性(Bug或操作不規(guī)范),不建議此場(chǎng)景使用分布式文件系統(tǒng)。
(2)測(cè)試方案設(shè)計(jì)
測(cè)試方案的設(shè)計(jì)基于社區(qū)版JuiceFS 0.17.1+redis元數(shù)據(jù)引擎,針對(duì)標(biāo)準(zhǔn)化功能、性能及運(yùn)維需求,從元數(shù)據(jù)備份、引擎宕機(jī)、引擎恢復(fù)、引擎遷移、POSIX規(guī)范、解壓文件、生成海量小文件、并行讀寫(xiě)、并發(fā)讀寫(xiě)、網(wǎng)絡(luò)異常、后端對(duì)象存儲(chǔ)異常等方面進(jìn)行測(cè)試。
因?yàn)镚行強(qiáng)一致性場(chǎng)景要求,測(cè)試不開(kāi)啟JuiceFS cache功能。JuiceFS對(duì)接對(duì)象存儲(chǔ)obj bucket并mount到本地/mnt/juicefs-load目錄。所有測(cè)試驗(yàn)證操作均在juicefs-load目錄進(jìn)行。
1)元數(shù)據(jù)備份
2)標(biāo)準(zhǔn)POSIX文件系統(tǒng)壓測(cè)
方法一:Linux Test Project是社區(qū)標(biāo)準(zhǔn)的Linux操作系統(tǒng)測(cè)試套件,對(duì)應(yīng)接口、定義、實(shí)現(xiàn)進(jìn)行驗(yàn)證和壓測(cè)。抽取其中文件系統(tǒng)相關(guān)的測(cè)試案例進(jìn)行測(cè)試。
方法二:精簡(jiǎn)的POSIX文件系統(tǒng)測(cè)試套件Pjdfstest,用于測(cè)試POSIX兼容性。
3)引擎宕機(jī)
4)引擎恢復(fù)、引擎遷移
5)網(wǎng)絡(luò)異常
6)后端對(duì)象存儲(chǔ)異常測(cè)試
(3)測(cè)試詳細(xì)數(shù)據(jù)
1)LTP POSIX文件系統(tǒng)壓測(cè)
Pjdtest精簡(jiǎn)POSIX測(cè)試套件全部通過(guò)。
2)解壓文件
3)并行讀寫(xiě)場(chǎng)景
多個(gè)協(xié)程并行寫(xiě)不同的文件
4)并發(fā)讀寫(xiě)場(chǎng)景
多個(gè)進(jìn)程并發(fā)讀寫(xiě)同一個(gè)文件,讀無(wú)特殊要求;測(cè)試結(jié)果符合預(yù)期。
并發(fā)寫(xiě)需要先locklockfile并嚴(yán)格遵循open-write-close流程,寫(xiě)入的內(nèi)容在其他客戶端可見(jiàn),測(cè)試結(jié)果符合預(yù)期。
5)海量小文件
6)異常場(chǎng)景
7)與現(xiàn)有對(duì)象存儲(chǔ)FIO性能數(shù)據(jù)對(duì)比
(4)初步調(diào)研結(jié)論
1)存在2個(gè) POSIX壓測(cè)失?。篺test04, fs_fill;
2)存在不穩(wěn)定現(xiàn)象(latency波動(dòng)、內(nèi)存吃緊時(shí)的現(xiàn)象);
3)并行讀性能落后于本地fs、NAS;
4)并行寫(xiě)性能落后于本地fs、NAS;
5)海量文件場(chǎng)景下跨不同類型引擎做備份恢復(fù)時(shí)間較長(zhǎng)。
(5)展望
當(dāng)前版本的JuiceFS在整體并發(fā)性、文件讀寫(xiě)性能等方面暫時(shí)還無(wú)法滿足G行對(duì)共享存儲(chǔ)的需求,但是這種構(gòu)建中對(duì)象存儲(chǔ)上,兼容對(duì)象存儲(chǔ)接口又提供基于FUSE的標(biāo)準(zhǔn)POSIX文件系統(tǒng)接口,還實(shí)現(xiàn)了元數(shù)據(jù)引擎來(lái)保障數(shù)據(jù)強(qiáng)一致性,其設(shè)計(jì)理念值得點(diǎn)贊。雖然目前與G行應(yīng)用場(chǎng)景尚不能完全匹配,但整體而言,分布式文件系統(tǒng)是一個(gè)值得長(zhǎng)期跟蹤的技術(shù)。期待在元數(shù)據(jù)安全、數(shù)據(jù)強(qiáng)一致性下的讀寫(xiě)性能等方面有適合G行應(yīng)用場(chǎng)景的分布式文件系統(tǒng)出現(xiàn)。