Arker容量存儲層
時間:2022-04-30 15:45:02 | 來源:行業(yè)動態(tài)
時間:2022-04-30 15:45:02 來源:行業(yè)動態(tài)
CDP數(shù)據(jù)需要按照粒度(Granu)進(jìn)行組織。根據(jù)業(yè)務(wù)需要,Granu被分為5種類型:journal、hour、day、base和snapshot,journal是秒級數(shù)據(jù),包含用戶的原始寫請求;hour代表小時級別的增量數(shù)據(jù);day代表天級別的增量數(shù)據(jù);base是CDP的最底層數(shù)據(jù);snapshot是用戶的手動快照數(shù)據(jù)。Granu會按照設(shè)定的備份策略進(jìn)行合并。以默認(rèn)的支持恢復(fù)到12小時內(nèi)任意一秒、24小時內(nèi)的任意整點以及3天內(nèi)的任意零點為例,journal至少會被保留12小時,超過12小時的journal會被合并為hour,此時數(shù)據(jù)的tick信息會被丟棄,之后的時間區(qū)間無法再恢復(fù)到秒級,超過24小時的hour會被合并為day,超過3天的day會和base合并為新的base,對于snapshot則會長久保留除非用戶主動刪除了快照。
作為方舟的容量存儲層,Arker為5類不同的Granu提供了統(tǒng)一的存儲;對于5種類型的Granu,又存在3種存儲格式:BASE Blob、CUT Blob和JOURNAL Bob。其中base和snapshot兩類Granu以BASE Blob格式存儲,day和hour兩類Granu以CUT Blob格式存儲,journal類型的Granu以JOURNAL Blob格式存儲。
對于journal、hour和day三類Granu,我們直接按分片進(jìn)行存儲,每個有數(shù)據(jù)存在的分片都唯一對應(yīng)了一個inode對象,這個inode對象關(guān)聯(lián)一個JOURNAL Blob或CUT Blob。對于base和snapshot兩類Granu,我們將分片中的數(shù)據(jù)進(jìn)一步細(xì)化,切分成一系列的TinyShard作為重刪單元,每個TinyShard也會唯一對應(yīng)一個inode對象,這個inode對象會關(guān)聯(lián)一個BASE Blob,數(shù)據(jù)相同的TinyShard會指向同一個inode對象,復(fù)用BASE Blob,由此達(dá)到了重刪的目的。
為了提高合并效率,我們還將索引和數(shù)據(jù)的存儲進(jìn)行分離,以上所有業(yè)務(wù)元數(shù)據(jù)(Granu、Shard/TinyShard、Inode)都以key-value的形式存儲在KVDevice中,Blob數(shù)據(jù)經(jīng)過壓縮后存儲在FSDevice中,數(shù)據(jù)壓縮算法采用zstd算法,比起原先使用的snappy算法,又節(jié)約了至少30%的存儲成本。