开发者学堂课程【分布式文件存储系统技术及实现:分布式系统功能设计-GC 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/368/detail/4383
分布式系统功能设计-GC
一、垃圾回收
1. 在什么场景会出现垃圾回收:
(1) 在数据被删除的时候(比如有用户对某些文件不再使用了,他就会把不用的文件删除。会使用异步删除,好处就是在删除的时候不用考虑是不是把磁盘的空间清除完了,在分布式的环境下很难保证。这时候如果删除大量的文件 mat ,由于删除物理空间造成的 IO 量也会降低,所以就做了异步删除,这是保证系统更稳定、更平滑的功能)
(2) 数据写入失败,脏数据留在磁盘上(用户如果接着写了新的数据后,这些数据在清理过程中也会用到 GC ,这个过程主要基于数据版本控制。比如目前数据版本是 2,那如果发现一个数据版本是 1,就可能决定这种数据是脏数据)
(3) 由于机器宕机造成的(在宕机过程中可能会发现数据拷贝数够,要发起复制,这时候就要发起复制,但是宕机可能不会引起数据丢失。比如这个机器一时间断电,如果把电力恢复的话,这些拷贝还能回来,在恢复后会发现,拷贝数多于要求的拷贝数,比如之前要求三份,由于宕机,复制完之后就变成了四份,在它恢复之后,要把它多余的部分删除。防止多个拷贝在系统中占用更多的空间)
2. 在动画中,第一种是一个异步的过程,是一个垃圾,可以被删除。
第二种灰色的三角已经变成了版本是 2,这时候发现有一个版本是 1 的数据,也可以证明它是一个垃圾数据,也可以删除。
第三种会发现要求的拷贝数是 2,实际上有的拷贝数是 3,这样会占用过多的存储空间,也会进行异步删除
3. 总结:在 GC 的过程中,有两个关键点:
(1) 异步删除
(2) 基于版本的回收(这样保证了删除过程既安全,系统又可以有平滑的性能,不影响用户的使用)