分布式对象存储学习笔记(九)——数据维护

分布式对象存储——原理、架构及Go语言实现 胡世杰

对象存储系统的长期运行离不开对系统的维护,系统维护包括3个方面

  • 硬件 硬件维护包括现有硬件的维修、更换和升级以及新硬件的添加等。
  • 软件 软件维护包括错误原因的调查和修复,软件的升级、回滚和全新的安装部署等。
  • 数据 数据维护则包括数据的修复、过期数据的删除等。

数据维护则主要通过软件执行预先设定的维护工作。本章将要介绍的就是一个对象存储系统通常都会需要哪些数据维护工作。

对象存储系统的数据维护工作

对象版本留存

存储空间不可能无限制增长,而用户的对象却是每天都会有新版本添加进来。这些数据很快就会变得过时,被更新的对象所替代。而用户通常也不需要长期保留所有的版本。所以我们需要提供一种留存策略,在保留用户更关注的版本的情况下清理一些不必要的版本。

版本留存策略就是一套决定哪些版本需要被保留的决策依据。

  • 数量限定策略会保留每个对象最后的若干个版本而将其余的删除。
  • 时间限定策略会将版本保留一段固定的时间,超过这个值的版本将被删除。

我们实现的是最简单粗暴的数量限定策略,对于每个对象仅保留最后5 个版本。

维护软件除了需要在元数据服务中删除对象旧版本的元数据以外,对于那些已经没有任何元数据引用的对象数据也需要进行清除。但是需要注意,这里存在一个可能会产生竞争条件的步骤序列。

  1. 维护软件检查某个对象散列值,没有任何元数据引用它。
  2. 有用户需要上传一个相同散列值的对象,由于SIS 检查该散列值存在,跳过了上传步骤。
  3. 维护软件删除了该对象散列值。
  4. 用户添加了新的版本引用了这个散列值。

这样的步骤序列一旦发生,意味着用户的对象数据就丢失了。为了避免这种情况,我们在删除对象散列值时并没有彻底删除文件,只是将对象文件移动到另外一个garbage 目录。隔了一段时间(比如一周或一个月)以后,再去真正删除。

数据定期检查和修复

我们讨论过数据的即时修复。但数据的修复不能只依靠即时修复技术来进行,因为有些对象可能长期没有发生GET 操作而始终得不到修复,最终由于损坏的数据片过多而无法修复。

在本章我们实现一种后台修复工具,能持续检查对象存储系统上所有对象并进行修复。

数据服务的REST接口

DELETE /objects/<hash>
删除对象散列值需要数据服务提供对象的 DELETE 操作,该接口不仅将对象文件移动至垃圾目录,且从数据服务的定位对象缓存中删除散列值。

小结

数据维护包括过期数据的清理以及当期数据的检查和修复。

没有什么系统是只进不出的,对象存储也一样。随着时间的推移会有越来越多的对象进入我们的系统,而我们的存储又不可能无限制增长,所以我们需要采取一定的对象版本留存策略以清理过期的对象。

当期数据可能由于硬件损坏,软件错误或数据降解等原因而被破坏,所以需要定期地进行检查和修复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值