前言
前篇文章,笔者已经大致介绍了目前HDFS对象存储服务Ozone内部的基本架构。本篇文章,笔者继续带领大家学习Ozone。今天笔者所主要阐述的主题是:Ozone的对象版本管理。版本管理是一个很实用的需求,用户往往对于一份数据会有历史版本保存的需求,不仅仅说只是为了防止未来的时候会回退到这个版本的数据。本文我们就来看看Ozone是如何支持这个功能的。目前此功能尚未开发,还处于初始设计阶段,但是并不妨碍我们对这套设计做一个预先学习。
数据历史版本管理简单方案
在这里,我们假设脱离于本文内容,做这样一个思考:如果我们要做数据的版本管理,我们可以怎么做?下面是笔者想到的一种比较直接又显得比较low的方法:
每次全量存储写入新的数据,并分配一个唯一标识版本号。
以上这种方式是偏简单暴力的。它有一个很致命的缺点:完全不考虑写入数据是否与现有历史数据是重复的情况。这会带来使用空间浪费的现象。当然,有人可能会说笔者的这种想法完全是杞人忧天,我们这里的一个假设是基于用户每次存入的数据是不同的。但是话说回来,做一个完整的系统设计,我们还是需要考虑很多因素的。
类似数据版本管理方案:HDFS快照
在HDFS内部,有一个类似的数据版本管理功能:HDFS快照。笔者前面提到的可能出现重复数据的问题就是源于快照对这方面的处理。HDFS快照功能在这方面的实现可谓是下了功夫的,它的一个特点是只存入差异的数据,即发生过变更的数据文件。如果数据没有发生过没变,则快照数据返回的则是当前文件数据。这么做是有道理的,如果