目前業(yè)界基于分布式 KVDB 系統(tǒng)來(lái)構(gòu)建大規(guī)模文件和對(duì)象存儲(chǔ)系統(tǒng)的元數(shù)據(jù)服務(wù)已形成流行趨勢(shì),如Google Colossus、Microsoft ADLS、HopsFS、JuiceFS等。這種趨勢(shì)出現(xiàn)的背景是現(xiàn)代分布式KVDB或NoSQL存儲(chǔ)系統(tǒng)技術(shù)發(fā)展的成熟。利用分布式KVDB的能力,能夠極大簡(jiǎn)化元數(shù)據(jù)服務(wù)的設(shè)計(jì),這已經(jīng)成為很多存儲(chǔ)系統(tǒng),尤其是云存儲(chǔ)的共識(shí)。分布式KVDB或NoSQL系統(tǒng)在分布式事務(wù)支持、擴(kuò)展能力、高并發(fā)性能等方面的優(yōu)勢(shì),使得基于其作為文件系統(tǒng)元數(shù)據(jù)的持久化層,來(lái)構(gòu)建海量分布式文件系統(tǒng)的開發(fā)過(guò)程大大簡(jiǎn)化。3FS采用的正是這種架構(gòu),它使用FoundationDB來(lái)持久化文件元數(shù)據(jù),包括文件路徑、屬性、目錄結(jié)構(gòu)等。其中核心鍵值對(duì)有兩種:

通過(guò)這樣的Schema設(shè)計(jì),即可在分布式KVDB中構(gòu)建出文件系統(tǒng)目錄樹的結(jié)構(gòu),文件路徑的增刪改查操作轉(zhuǎn)化為了分布式KVDB的單key或多key的增刪改查操作。

基于這種元數(shù)據(jù)服務(wù)架構(gòu)的分布式文件系統(tǒng)具體優(yōu)點(diǎn)如下:

1.高可擴(kuò)展性和可靠性

分布式KVDB系統(tǒng)天然支持水平擴(kuò)展,用于保存文件系統(tǒng)元數(shù)據(jù),以實(shí)現(xiàn)單一命名空間承載千億甚至更高量級(jí)文件或目錄數(shù)的規(guī)格。同時(shí),文件系統(tǒng)元數(shù)據(jù)服務(wù)的可靠性、均衡性可以由其保證。借助FoundationDB已實(shí)現(xiàn)的高可用及擴(kuò)展性,3FS的元數(shù)據(jù)服務(wù)(Meta Service)與元數(shù)據(jù)持久化存儲(chǔ)層實(shí)現(xiàn)了“存算分離”,Meta Service可以完全做到無(wú)狀態(tài),具備了獨(dú)立擴(kuò)展能力,Client請(qǐng)求也可以下發(fā)到任意節(jié)點(diǎn)。

此外,元數(shù)據(jù)的分散性也可以得以保證,傳統(tǒng)文件系統(tǒng)元數(shù)據(jù)服務(wù)器(MDS)經(jīng)常遇到的部分目錄的熱點(diǎn)問(wèn)題以及目錄分裂策略問(wèn)題也得以緩解。

2. 簡(jiǎn)化一致性模型

分布式KVDB本身支持強(qiáng)一致性事務(wù),基于其開發(fā)應(yīng)用的復(fù)雜度大大降低,關(guān)于文件系統(tǒng)元數(shù)據(jù)的所有一致性問(wèn)題可以下沉給KVDB去解決。3FS基于FoundationDB的 Serializable隔離級(jí)別,樂(lè)觀并發(fā)控制和分布式鎖等能力保證了各種元數(shù)據(jù)并發(fā)操作(如文件創(chuàng)建、刪除、Rename、目錄遍歷)時(shí)的ACID語(yǔ)義。以往文件系統(tǒng)的MDS服務(wù)中的經(jīng)典問(wèn)題,比如目錄樹節(jié)點(diǎn)的rename成環(huán)問(wèn)題、孤兒節(jié)點(diǎn)問(wèn)題,都可以通過(guò)FoundationDB的事務(wù)模型來(lái)解決,Meta Service只負(fù)責(zé)文件POSIX語(yǔ)義解析即可。

3FS利用 FoundationDB 的串行化隔離級(jí)別事務(wù)的元數(shù)據(jù)操作有:

3. 靈活的數(shù)據(jù)模型擴(kuò)展

支持動(dòng)態(tài)添加元數(shù)據(jù)字段(如自定義標(biāo)簽),無(wú)需修改底層存儲(chǔ)結(jié)構(gòu)。并且如果擴(kuò)展新的元數(shù)據(jù)字段,如3FS的Meta Service,客戶端、存儲(chǔ)服務(wù)等其他組件可以按需單獨(dú)升級(jí),大大提升在線集群維護(hù)靈活性。

然而,任何事物都是有兩面性的,在實(shí)際工程實(shí)踐中,使用分布式KVDB存儲(chǔ)文件系統(tǒng)元數(shù)據(jù)仍存在一些挑戰(zhàn):

1. 事務(wù)開銷大影響元數(shù)據(jù)性能

分布式KVDB在實(shí)現(xiàn)上通常都會(huì)把已保存的整個(gè)key空間按照從小到大的順序切分成相連但不交疊的區(qū)域,稱為分片。每個(gè)節(jié)點(diǎn)都承載一定數(shù)量的分片,跨分片更新多個(gè)key的數(shù)據(jù)時(shí)涉及的事務(wù)操作開銷較大:

注:3FS在實(shí)現(xiàn)上為減少事務(wù)沖突,選擇在文件創(chuàng)建時(shí)不更新父目錄屬性,以犧牲通用文件POSIX語(yǔ)義來(lái)?yè)Q取特定場(chǎng)景下的性能。

注:3FS采用支持非空目錄刪除與標(biāo)記刪除來(lái)盡力規(guī)避這種問(wèn)題,以犧牲通用文件POSIX語(yǔ)義來(lái)?yè)Q取特定場(chǎng)景下的性能。

2. 元數(shù)據(jù)的擴(kuò)展能力有限

因?yàn)镾SI的串行化隔離級(jí)別在KVDB的實(shí)現(xiàn)上依賴一個(gè)全局的單點(diǎn)TSO時(shí)鐘,這會(huì)成為擴(kuò)展的瓶頸。在大規(guī)模集群場(chǎng)景下,整個(gè)文件系統(tǒng)的并發(fā)能力的上限受到限制,并且TSO時(shí)鐘本身的授時(shí)開銷也會(huì)增加元數(shù)據(jù)訪問(wèn)的時(shí)延。

注:3FS通過(guò)FFrecord文件來(lái)規(guī)避這個(gè)問(wèn)題,通過(guò)在應(yīng)用層將小文件合并成大文件,保存在FoundationDB中的元數(shù)據(jù)量可以大幅減少。

杉巖AgileDB:元數(shù)據(jù)服務(wù)架構(gòu)的創(chuàng)新設(shè)計(jì)與高效實(shí)踐

杉巖非結(jié)構(gòu)化數(shù)據(jù)分布式統(tǒng)一存儲(chǔ)產(chǎn)品的元數(shù)據(jù)服務(wù)也采用了與3FS類似的架構(gòu),但使用的不是FoundationDB等通用分布式KVDB,而是全自研的分布式KV存儲(chǔ)——杉巖AgileDB。杉巖AgileDB與杉巖文件和對(duì)象存儲(chǔ)產(chǎn)品的網(wǎng)關(guān)層聯(lián)動(dòng)配合,繼承了基于分布式KVDB的文件系統(tǒng)元數(shù)據(jù)架構(gòu)的優(yōu)點(diǎn),同時(shí)克服了其局限性。相較于通用分布式KVDB(下表以FoundationDB和TiKV為例進(jìn)行說(shuō)明),杉巖AgileDB在特性的實(shí)現(xiàn)方式上做了一些取舍,并且實(shí)現(xiàn)了一些獨(dú)特功能,簡(jiǎn)單比較如下:

從前述章節(jié)可以看出,使用分布式KVDB作為文件系統(tǒng)的元數(shù)據(jù)底座,如何既做到POSIX語(yǔ)義盡量的兼容,又降低大規(guī)模場(chǎng)景下KVDB的事務(wù)開銷對(duì)性能的影響,是個(gè)難題,需要根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景作出合理取舍。杉巖數(shù)據(jù)在平衡這兩方面的過(guò)程中,自研的杉巖AgileDB發(fā)揮了重要作用,以下列舉其中兩個(gè)有代表性的實(shí)現(xiàn)機(jī)制:

1. 跨分片的元數(shù)據(jù)操作事務(wù)開銷優(yōu)化

杉巖AgileDB的元數(shù)據(jù)核心鍵值的設(shè)計(jì)與3FS整體類似但稍有不同,AgileDB的inode key和dentry key在普通文件和目錄下是合并的,只有硬鏈接場(chǎng)景才會(huì)分開。當(dāng)目錄下文件數(shù)量過(guò)多,可能會(huì)導(dǎo)致該目錄所有子項(xiàng)的key跨杉巖AgileDB的多個(gè)內(nèi)部分片,此時(shí)創(chuàng)建文件時(shí)更新父目錄的屬性信息(已用容量統(tǒng)計(jì)、文件數(shù)量統(tǒng)計(jì)等),必然需要 2PC 事務(wù)提交機(jī)制來(lái)保證 ACID;同時(shí),在同一個(gè)目錄下的不同文件、子目錄的并發(fā)創(chuàng)建、刪除等操作會(huì)對(duì)父目錄上計(jì)數(shù)等屬性信息的更新帶來(lái)大量沖突。

為解決這個(gè)問(wèn)題,杉巖設(shè)計(jì)了自適應(yīng)的虛擬目錄機(jī)制:

對(duì)于跨AgileDB分片的實(shí)際目錄,在每個(gè)分片中為其放置一個(gè)特殊的key(虛擬目錄屬性key)來(lái)標(biāo)記該分片與真實(shí)目錄的所屬關(guān)系,value則存放虛擬目錄的屬性信息。AgileDB可根據(jù)分片的分裂和合并自動(dòng)更新這個(gè)特殊key,業(yè)務(wù)無(wú)感知。

在創(chuàng)建文件的過(guò)程中,動(dòng)態(tài)去獲取該目錄下所有子項(xiàng)分布在哪些分片,找到虛擬目錄屬性key,如果創(chuàng)建文件的過(guò)程中分片正在分裂,則等待分裂完成且AgileDB生成新的虛擬目錄屬性key后,再獲取正確的虛擬目錄屬性key。創(chuàng)建文件的元數(shù)據(jù)的key和父目錄屬性信息(存入虛擬目錄屬性key)將被組成一個(gè)單分片事務(wù)提交(1PC)。

實(shí)際目錄屬性信息采用lazy的方式更新:僅當(dāng)應(yīng)用獲取實(shí)際目錄的屬性信息時(shí),AgileDB通過(guò)協(xié)處理能力將多個(gè)分片中的虛擬目錄屬性key信息以只讀事務(wù)獲取后合并信息并返回。

通過(guò)自適應(yīng)的虛擬目錄機(jī)制,將跨區(qū)域的實(shí)際目錄的2PC更新轉(zhuǎn)化為虛擬目錄的1PC更新,減少了事務(wù)的開銷,同時(shí)由于每個(gè)虛擬目錄包含的元數(shù)據(jù)是實(shí)際目錄的子集,這種分解方式進(jìn)一步縮小了沖突域,緩解了實(shí)際目錄下并發(fā)更新操作帶來(lái)的沖突問(wèn)題。

2. 單行多列族事務(wù)特性,支持文件系統(tǒng)高級(jí)功能

文件系統(tǒng)的一些高級(jí)功能均依賴按時(shí)間序保存的元數(shù)據(jù)Change log,比如異常場(chǎng)景下元數(shù)據(jù)的回放、跨站點(diǎn)的數(shù)據(jù)復(fù)制、元數(shù)據(jù)推送至其它大數(shù)據(jù)平臺(tái)進(jìn)行數(shù)據(jù)分析與檢索等高級(jí)功能,這些功能要求Change log與文件元數(shù)據(jù)在寫入KVDB時(shí)是強(qiáng)一致的。

全局Change log不能通過(guò)在KVDB中簡(jiǎn)單的增加以粗粒度時(shí)間戳為key的Change log記錄來(lái)解決,這樣在文件元數(shù)據(jù)更新時(shí)為保證原子性,就必須通過(guò)事務(wù)同步更新它,如此以來(lái)又會(huì)導(dǎo)致2PC提交而增加延遲,同時(shí)也會(huì)給多并發(fā)場(chǎng)景下的元數(shù)據(jù)更新操作引入性能瓶頸點(diǎn)。杉巖AgileDB通過(guò)支持多列族的行事務(wù)來(lái)解決這類問(wèn)題:

單行多列族特性的設(shè)計(jì)使得元數(shù)據(jù)的更新和Change log記錄在同一個(gè)事務(wù)中提交時(shí),不需要跨分片走2PC提交即可保證原子性,在AgileDB分片因擴(kuò)縮容等導(dǎo)致的分裂、合并等場(chǎng)景下也不受影響,在不增加事務(wù)開銷的同時(shí),很好的支持了通用文件系統(tǒng)的站點(diǎn)同步等高級(jí)功能。

基于AgileDB的杉巖分布式存儲(chǔ)系統(tǒng)的優(yōu)勢(shì)

元數(shù)據(jù)是非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)系統(tǒng)的“靈魂”,杉巖數(shù)據(jù)的下一代融合對(duì)象存儲(chǔ)產(chǎn)品、面向工業(yè)質(zhì)檢大數(shù)據(jù)存儲(chǔ)的IDM產(chǎn)品都使用AgileDB作為元數(shù)據(jù)底座。杉巖融合對(duì)象存儲(chǔ)產(chǎn)品融合了CIFS/NFS/FTP/FUSE/S3協(xié)議,提供了比傳統(tǒng)分布式文件系統(tǒng)和對(duì)象存儲(chǔ)系統(tǒng)更大規(guī)模的存儲(chǔ)能力和并發(fā)性能,并且實(shí)現(xiàn)了文件和對(duì)象協(xié)議的原生無(wú)損互通。集成AgileDB的杉巖融合對(duì)象存儲(chǔ)系統(tǒng)有以下特點(diǎn):

總結(jié)

3FS的技術(shù)實(shí)現(xiàn)架構(gòu)及相關(guān)性能數(shù)據(jù)證明,存儲(chǔ)系統(tǒng)的產(chǎn)品中處處存在trade off。只有真正了解自身需求,在整個(gè)系統(tǒng)端到端的設(shè)計(jì)中做出細(xì)粒度的解構(gòu),在分布式文件系統(tǒng)的核心組件——元數(shù)據(jù)服務(wù)上,這種服務(wù)無(wú)狀態(tài)、數(shù)據(jù)下沉至第三方分布式KVDB的“存算分離”式設(shè)計(jì),才不會(huì)因?yàn)榉蛛x帶來(lái)的網(wǎng)絡(luò)開銷以及分布式KVDB的事務(wù)開銷而拉低整個(gè)系統(tǒng)的性能。

杉巖數(shù)據(jù)針對(duì)客戶的應(yīng)用場(chǎng)景,自研了AgileDB分布式KVDB系統(tǒng),并且將其應(yīng)用于自研海量對(duì)象與文件融合存儲(chǔ)產(chǎn)品上,拓展了分布式KVDB作為大型存儲(chǔ)系統(tǒng)元數(shù)據(jù)底座這一技術(shù)架構(gòu)的應(yīng)用邊界。

分享到

nina

相關(guān)推薦