咱们心愿分布式文件系统下的回收站是一个高效的回收站零碎。在实现的时候须要思考性能问题,不能去影响失常的 io 申请,在复原的时候是一个比拟轻的操作,并且须要有肯定的扩展性。
应用 Windows 的用户对回收站并不生疏,它给了咱们一剂“后悔药”。回收站保留了您删除的文件、文件夹、图片、快捷方式和 Web 页等。这些被删除的我的项目将始终保留在回收站中,直到您清空回收站。许多被咱们误删除的文件都是从这外面找到的。灵便地利用各种技巧能够更高效地应用回收站,使之更好地为咱们服务。
回收站是一个非凡的文件夹,默认在每个硬盘分区根目录下的 RECYCLER 文件夹中,而且是暗藏的。当你将文件删除并移到回收站后,本质上只是把删除的文件放在了这个文件夹里,依然是占用磁盘的空间。只有在回收站里删除它或清空回收站能力使文件真正地删除,能力为电脑开释出更多的磁盘空间。
惯例的回收站解决的是单机存储、甚至单硬盘层面的问题,并不波及数据的分片寄存、冗余策略等场景,所以在以后宽泛应用的分布式存储的场景下,回收站须要有更多的特点,让它更加适宜分布式存储的数据行为。
01 分布式存储场景下回收站 VS 传统回收站
在传统的 linux 零碎之中,常见的解决方案就是将 rm 操作转化为 rename 操作。而在分布式系统中,文件都随机散布在各个节点,跨节点挪动文件是很耗费资源的。特地是在大批量删除的状况下,可能会造成零碎卡顿。所以咱们须要针对分布式的场景设计一套删除流程,让被删除文件落到回收站中来,但不须要挪动文件。
大量的文件寄存在回收站,咱们须要有一个策略那就是从回收站中回收空间,删除过期的数据。在分布式系统中,文件数量会很多,海量的文件删除都是须要放到回收站中,这样咱们在清理的时候就不能去扫描目录构造,而是须要有一个索引依照一些规定来疾速地查找指定的文件。
通常状况下,一个分布式文件系统有大量的用户在同时应用,这须要咱们针对不同的用户目录设置不同的回收站,不同的用户视角都能看到本人的回收站。大家晓得,分布式文件系统下元数据和数据是离开保留的,这是一个劣势,咱们能够在删除文件的时候只将元数据放入回收站中,而复原的时候只须要将对应的元数据恢复就能够了。
下面是分布式文件系统和传统文件系统在实现回收站时的一些次要因素。咱们心愿分布式文件系统下的回收站是一个高效的回收站零碎。在实现的时候须要思考性能问题,不能去影响失常的 io 申请,在复原的时候是一个比拟轻的操作,并且须要有肯定的扩展性。
02 YRCloudFile 分布式文件系统是如何设计回收站的?
咱们在将文件删除的时候,依据门路匹配到对应的回收站,将对应的元数据信息放入以后元数据节点的 rocksdb 中,依据肯定的规定来建设索引。文件复原的时候只须要将对应的元数据还原到指定地位。而当彻底删除文件时,咱们会将文件的元数据放到后盾 gc 工作队列里,而后由 gc 线程去异步的清理数据。咱们用一张示意图来看下这个过程:
在回收站的性能中,为了实现指定目录复原 / 清理,指定工夫复原 / 清理,咱们在回收站中增加了以下两个表。咱们会依赖 rocksdb 的 key 排序功能,能够依据指定目录 / 删除工夫,疾速的过滤文件,保障复原以及过期清理时的效率。而且不同的文件会散布在不同 id 的回收站中去,实现了回收站资源之间的隔离。而且因为 rocksdb 优越的程序读写性能,在查找的场景下性能体现会十分的好。
以上设计能解决在分布式场景下,海量的数据删除 / 复原,在只解决元数据的计划状况下,回收站的性能齐全能够满足大型分布式文件系统的需要。分布式文件存储是一个非常复杂的零碎,这外面有着许许多多的问题期待咱们去解决,回收站只是其中一个,前面咱们还须要一直地学习去解决更多的问题。