作者:Sanjay Ghemawat
          Howard Gobioff
          Shun-Tak Leung
翻译:tinyfool

4.4.2 讨论

虽然分布垃圾回收在编程语言领域是一个需要复杂解决方案的难题,它在我们这里非常简单。我们可以很容易的识别所有块的引用:他们都在服务器独立掌握的文件到块的映射表中。我们也可以轻易的找到所有块的副本:在每个块服务器上他们都是指定目录下的Linux文件。所有主服务器不知道的副本都是"垃圾"。

垃圾回收在恢复存储空间的同时,提供直接删除无法得到的几个好处。首先,这样对于组件经常失效的大规模分布系统简单而且可靠。块创建可能在某些块服务器成功,某些服务器上失败,留着那些失败的副本反正主服务器也不知道。副本删除信息可能丢失,主服务器必须记得重新发送失败传递的目标,它自己的和块服务器的。垃圾回收提供了统一无依赖的途径,来清除那些不知道用处的副本。其次,它把存储回收操作合并到主服务器规律性的后台活动,如例行扫描以及跟块服务器握手。这样,操作会被批量的执行,开销会被分散。而且,操作会在主服务器相对空闲的时候完成。这样主服务器可以给那些需要快速反应的客户机请求提供更快捷的响应。三,有延迟的存储回收比随机、不可逆转的删除,更加安全。

在我们的经验中,主要的缺点是,在存储空间紧张的时候,这样的延迟有时候会阻碍用户去更好的调节存储空间的使用情况。应用程序重复创建和删除临时文件夹,存储空间不会马上恢复。我们解决这个问题的方式是,如果一个已删除文件明确的再次被删除,会加速空间回收速度。我们还允许用户为命名空间的不同部分设定不同的复制和回收策略。例如,用户可以指定某些目录树下面的文件没有任何副本,删除立即执行,从文件系统移除后无法恢复。


<< 4.1.1 机制 | 4.5 过期副本检测 >>