本期讓我們繼續(xù)走進(jìn)分布式數(shù)據(jù)管理另一核心功能——分布式文件系統(tǒng)的解讀蒜绽,看看分布式文件系統(tǒng)如何實(shí)現(xiàn)跨設(shè)備文件的訪問(wèn)。
分布式文件系統(tǒng)的定義及應(yīng)用場(chǎng)景
眾所周知衰琐,每個(gè)設(shè)備都會(huì)有自己的本地文件系統(tǒng)焙矛,用于存儲(chǔ)設(shè)備上用戶(hù)和應(yīng)用產(chǎn)生的包括圖片垛吗、視頻织堂、音頻、文檔等在內(nèi)的各種文件奶陈,每個(gè)設(shè)備上的本地文件系統(tǒng)彼此之間是互相獨(dú)立的捧挺。但隨著個(gè)人智能設(shè)備的增多,大家時(shí)常面臨多設(shè)備間文件共享問(wèn)題尿瞭,比如說(shuō)手機(jī)與PAD之間的文件傳輸分享問(wèn)題闽烙。
目前對(duì)于這種問(wèn)題常見(jiàn)做法是借助網(wǎng)絡(luò)傳輸工具例如華為share或微信,或者借助應(yīng)用云服務(wù)声搁,這當(dāng)中的實(shí)現(xiàn)非常復(fù)雜黑竞。分布式文件系統(tǒng)就是為了解決文件傳輸業(yè)務(wù)上的痛點(diǎn)而存在的。分布式文件系統(tǒng)將各個(gè)設(shè)備上孤立的本地文件系統(tǒng)進(jìn)行連通疏旨,組成一個(gè)“虛擬的超級(jí)文件系統(tǒng)”很魂,打破設(shè)備之間的存儲(chǔ)邊界,文件可以在多設(shè)備間完成自由檐涝、安全的流轉(zhuǎn)和訪問(wèn)遏匆。
我們來(lái)看一個(gè)常見(jiàn)的例子。很多人使用手機(jī)拍照后會(huì)借助PAD對(duì)圖片進(jìn)行編輯谁榜,畢竟PAD的界面更大幅聘,編輯能力也更強(qiáng),完成編輯后會(huì)將圖片從PAD重新發(fā)回到手機(jī)窃植,通過(guò)手機(jī)分享到朋友圈帝蒿,這中間至少需要完成手機(jī)—PAD—手機(jī)這樣復(fù)雜的傳輸操作及流程。
但是巷怜,如果通過(guò)分布式文件系統(tǒng)葛超,用戶(hù)可直接在PAD就可以看到該圖片,直接使用PAD打開(kāi)圖片進(jìn)行編輯延塑,編輯保存后的圖片仍然存在手機(jī)上原來(lái)的文件位置绣张,無(wú)需借助網(wǎng)絡(luò)傳輸工具或云服務(wù),即可方便地實(shí)現(xiàn)圖片在多設(shè)備上流轉(zhuǎn)編輯关带。**在這個(gè)過(guò)程中侥涵,PAD和手機(jī)操作的始終是同一個(gè)文件,都是在手機(jī)上拍攝到的那個(gè)圖片豫缨。
通過(guò)上述例子独令,我們不難看出分布式文件系統(tǒng)是一種系統(tǒng)能力,它可以為應(yīng)用提供跨設(shè)備的文件訪問(wèn)能力好芭,這使得應(yīng)用在多個(gè)設(shè)備間需要使用和編輯同一個(gè)文件時(shí)燃箭,無(wú)需在設(shè)備之間傳遞文件,使用起來(lái)非常方便舍败。
那么分布式文件系統(tǒng)究竟如何提供跨設(shè)備訪問(wèn)的能力招狸,下面讓我們來(lái)打開(kāi)它的架構(gòu)視圖和運(yùn)行視圖敬拓,深入了解一下。
分布式文件系統(tǒng)的架構(gòu)視圖
分布式文件系統(tǒng)采用的是一個(gè)堆疊式的設(shè)計(jì)裙戏,其堆疊在本地文件系統(tǒng)之上乘凸,本身沒(méi)有存儲(chǔ)能力。
分布式文件系統(tǒng)向下調(diào)用本地文件系統(tǒng)的存儲(chǔ)能力累榜,將分布式文件目錄樹(shù)和文件內(nèi)容存儲(chǔ)到本地文件系統(tǒng)上营勤,向上又是一個(gè)標(biāo)準(zhǔn)的文件系統(tǒng),負(fù)責(zé)管理和存儲(chǔ)文件信息壹罚,同時(shí)兼容POSIX接口葛作,減少開(kāi)發(fā)者學(xué)習(xí)成本。
在分布式文件系統(tǒng)中猖凛,各個(gè)模塊承擔(dān)了不同的職責(zé)赂蠢,從而實(shí)現(xiàn)文件跨設(shè)備訪問(wèn)的能力。
通信組件
通過(guò)內(nèi)核態(tài)的通信組件辨泳,分布式文件系統(tǒng)實(shí)現(xiàn)與其他設(shè)備上的分布式文件系統(tǒng)進(jìn)行互通虱岂,從而實(shí)現(xiàn)文件的跨設(shè)備訪問(wèn)。
存儲(chǔ)管理
通過(guò)存儲(chǔ)管理模塊菠红,分布式文件系統(tǒng)完成對(duì)于存儲(chǔ)“空間”的管理第岖。
Dentry管理
通過(guò)Dentry管理模塊,分布式文件系統(tǒng)實(shí)現(xiàn)對(duì)于文件夾及最終文件的目錄項(xiàng)管理途乃。所有目錄項(xiàng)將構(gòu)成一棵目錄樹(shù)绍傲,而Dentry管理就是對(duì)這棵大樹(shù)的管理扔傅。
Cache管理
通過(guò)Cache管理模塊耍共,分布式文件系統(tǒng)可以實(shí)現(xiàn)Cache的智能預(yù)讀跟管理,提高文件跨設(shè)備訪問(wèn)的性能猎塞。
分布式文件系統(tǒng)的運(yùn)行視圖
當(dāng)多個(gè)設(shè)備完成分布式組網(wǎng)之后试读,各個(gè)設(shè)備上的分布式文件系統(tǒng)就可以通過(guò)軟總線(xiàn)這一分布式設(shè)備的通信基座,實(shí)現(xiàn)互聯(lián)荠耽,組成一個(gè)“虛擬的超級(jí)文件系統(tǒng)”钩骇。
分布式軟總線(xiàn)介紹:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/harmonyos-features-0000000000011907#ZH-CN\_TOPIC\_0000001063953283\_\_section19559317185
通過(guò)“虛擬的超級(jí)文件系統(tǒng)”,各個(gè)設(shè)備上的應(yīng)用可以訪問(wèn)存儲(chǔ)在其他設(shè)備上的分布式文件铝量。我們用現(xiàn)實(shí)中的一個(gè)例子來(lái)做一下類(lèi)比倘屹,幫助大家理解一下:
各個(gè)設(shè)備就相當(dāng)于一個(gè)孤立的城市。單設(shè)備上的本地文件系統(tǒng)相當(dāng)于這座城市的一個(gè)倉(cāng)庫(kù)慢叨,文件相當(dāng)于這個(gè)倉(cāng)庫(kù)內(nèi)的一些貨物纽匙。應(yīng)用就相當(dāng)于這個(gè)城市里的一些工廠。工廠負(fù)責(zé)將這些貨物存儲(chǔ)在倉(cāng)庫(kù)里面拍谐,同時(shí)也會(huì)從倉(cāng)庫(kù)內(nèi)取出貨物并進(jìn)行加工處理烛缔,加工完畢后再存儲(chǔ)到這個(gè)倉(cāng)庫(kù)里馏段。
如上圖所示,設(shè)備A即城市A践瓷,設(shè)備B即城市B院喜,app1就是城市A當(dāng)中的工廠1,負(fù)責(zé)從城市A的倉(cāng)庫(kù)(本地文件系統(tǒng))中取出貨物并進(jìn)行加工處理和再存儲(chǔ)晕翠。app1和app2是城市B中的工廠1和工廠2兩座工廠喷舀。
由于城市A和城市B是相互孤立的,所以城市A中的工廠1不能接觸到城市B中的工廠1里面的貨物淋肾。軟總線(xiàn)的出現(xiàn)元咙,就相當(dāng)在城市A和城市B間建立了公路和鐵路,分布式文件系統(tǒng)就相當(dāng)于依托公路和鐵路建立起來(lái)的倉(cāng)庫(kù)物流系統(tǒng)巫员,有了這個(gè)物流系統(tǒng)庶香,城市A和城市B中的工廠就可以協(xié)同起來(lái),依靠這個(gè)物流系統(tǒng)來(lái)進(jìn)行調(diào)度简识。
如此一來(lái)赶掖,城市A中的工廠1也可以使用城市B中的工廠1的貨物,城市B中的工廠1也可以使用城市A中的工廠1中的貨物七扰,這個(gè)過(guò)程都是由分布式文件系統(tǒng)這個(gè)物流系統(tǒng)來(lái)進(jìn)行貨物的調(diào)度和運(yùn)輸奢赂。
有了這個(gè)物流系統(tǒng),城市A的工廠1使用其它城市的貨物颈走,就像使用本城市倉(cāng)庫(kù)的貨物一樣簡(jiǎn)單膳灶,因?yàn)樗帘瘟说讓拥牟町悺?/p>
既然文件可以跨設(shè)備訪問(wèn),那么到底如何保證訪問(wèn)安全呢立由?分布式文件系統(tǒng)已經(jīng)思考到這一點(diǎn)并提供了完備的安全模型轧钓,我們一起來(lái)看一下。
分布式文件系統(tǒng)的安全模型
我們都知道锐膜,在HarmonyOS的本地文件系統(tǒng)中毕箍,應(yīng)用是在一個(gè)獨(dú)立的沙箱中運(yùn)行,不同應(yīng)用的本地文件是分開(kāi)存放的道盏,都是存在自身的沙箱目錄下而柑,相互之間是隔離的,無(wú)法互相訪問(wèn)荷逞。也就是說(shuō)媒咳,微信不能訪問(wèn)支付寶沙箱里面的文件。
沙箱模型這個(gè)安全特性种远,在分布式文件系統(tǒng)里同樣有效涩澡。各應(yīng)用的分布式文件系統(tǒng)也是分開(kāi)存放的,相互之間也是不能訪問(wèn)的院促。應(yīng)用必須通過(guò)分布式文件系統(tǒng)提供的專(zhuān)用接口來(lái)獲取屬于自己的沙箱目錄筏养,將文件放在沙箱目錄里面斧抱。應(yīng)用既不能通過(guò)拼接路徑的方式將自己的文件放到其他應(yīng)用的沙箱目錄里面,也不能通過(guò)拼接路徑的方式在沒(méi)有權(quán)限的情況下訪問(wèn)其他應(yīng)用的分布式沙箱文件渐溶。
**這就保證分布式文件系統(tǒng)的安全性與本地文件系統(tǒng)的安全性是一致的
**
如上圖所示辉浦,同一設(shè)備的不同應(yīng)用間是相互隔離的,因此不能互相訪問(wèn)茎辐。如設(shè)備A上的app1宪郊,由于兩個(gè)應(yīng)用之間是隔離的,所以沒(méi)有權(quán)限訪問(wèn)設(shè)備A上的app2的分布式目錄和分布式文件拖陆。
而當(dāng)多個(gè)設(shè)備存在相同應(yīng)用時(shí)弛槐,它們的沙箱是互通的,也就是說(shuō)在不同設(shè)備上依啰,同一應(yīng)用的分布式文件視圖是一樣的乎串,使用的也是同一個(gè)分布式的沙箱。就像上面這個(gè)圖里所示設(shè)備A上的app1速警,與設(shè)備B上的app1叹誉,它們的沙箱是一樣的。因此闷旧,設(shè)備A上的app1能夠同時(shí)看到放在自身設(shè)備上的file1和放在設(shè)備B上的file2长豁,并且能夠訪問(wèn)到這兩個(gè)文件。同樣設(shè)備B上的app1也能同時(shí)訪問(wèn)這兩個(gè)文件忙灼。
需要注意的是這里說(shuō)的不同設(shè)備的相同應(yīng)用匠襟,指的是Bundle Name相同、華為簽名相同的應(yīng)用该园。如果僅僅是說(shuō)Bundle Name一樣酸舍,但是簽名不一樣,那它們之間的沙箱也是不同的爬范。
這樣的做法是為了防止單個(gè)設(shè)備上的應(yīng)用被仿冒之后父腕,通過(guò)分布式文件系統(tǒng)去訪問(wèn)其他設(shè)備上的被仿冒的那個(gè)應(yīng)用的分布式文件。比如說(shuō)別人寫(xiě)了一個(gè)假的微信青瀑,Bundle Name跟微信一樣,不法分子通過(guò)假微信去訪問(wèn)其他設(shè)備上真微信的數(shù)據(jù)萧诫。而通過(guò)Bundle Name+簽名的機(jī)制斥难,能從根本上杜絕跨設(shè)備仿冒應(yīng)用的訪問(wèn)。
看了以上解讀帘饶,大家是不是對(duì)分布式文件系統(tǒng)的架構(gòu)組成哑诊,如何運(yùn)行,怎樣實(shí)現(xiàn)安全訪問(wèn)有了深入了解及刻,那么到底如何才能使用分布式文件系統(tǒng)能力镀裤,將本地應(yīng)用升級(jí)為分布式應(yīng)用呢竞阐?