Arker容量存储层
时间:2022-04-30 15:45:02 | 来源:行业动态
时间:2022-04-30 15:45:02 来源:行业动态
CDP数据需要按照粒度(Granu)进行组织。根据业务需要,Granu被分为5种类型:journal、hour、day、base和snapshot,journal是秒级数据,包含用户的原始写请求;hour代表小时级别的增量数据;day代表天级别的增量数据;base是CDP的最底层数据;snapshot是用户的手动快照数据。Granu会按照设定的备份策略进行合并。以默认的支持恢复到12小时内任意一秒、24小时内的任意整点以及3天内的任意零点为例,journal至少会被保留12小时,超过12小时的journal会被合并为hour,此时数据的tick信息会被丢弃,之后的时间区间无法再恢复到秒级,超过24小时的hour会被合并为day,超过3天的day会和base合并为新的base,对于snapshot则会长久保留除非用户主动删除了快照。
作为方舟的容量存储层,Arker为5类不同的Granu提供了统一的存储;对于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,我们直接按分片进行存储,每个有数据存在的分片都唯一对应了一个inode对象,这个inode对象关联一个JOURNAL Blob或CUT Blob。对于base和snapshot两类Granu,我们将分片中的数据进一步细化,切分成一系列的TinyShard作为重删单元,每个TinyShard也会唯一对应一个inode对象,这个inode对象会关联一个BASE Blob,数据相同的TinyShard会指向同一个inode对象,复用BASE Blob,由此达到了重删的目的。
为了提高合并效率,我们还将索引和数据的存储进行分离,以上所有业务元数据(Granu、Shard/TinyShard、Inode)都以key-value的形式存储在KVDevice中,Blob数据经过压缩后存储在FSDevice中,数据压缩算法采用zstd算法,比起原先使用的snappy算法,又节约了至少30%的存储成本。