2

我正在阅读 Google 文件系统论文,但不确定它如何处理副本的写入(不是原子记录追加)失败。如果它返回成功,那么它将等到下一个心跳让 master 获取世界的更新状态并检测损坏/陈旧的块版本并删除块。我猜当客户端询问副本位置时,master 可以验证所有副本的有效性,以防止客户端获取过时/损坏的数据。这是它处理副本写入失败的方式吗?

4

1 回答 1

1

无效块可以分为两类:陈旧和损坏的校验和。它们以两种不同的方式进行检查。

陈旧的块。块的版本不是最新的。主服务器在与块服务器的常规心跳期间检查陈旧的块。

损坏的校验和。由于不同的副本可能是合法的,因此不能保证跨 GFS 的副本是相同的。此外,出于性能考虑,校验和是在块服务器本身而不是在主服务器上独立执行的。

校验和可以分两个阶段进行检查:

  1. 当客户端或其他块服务器请求块时
  2. 当块服务器处于空闲期时,它们会扫描并验证非活动块以避免损坏的块被视为有效副本。

如果校验和损坏,块服务器会向主服务器报告该问题。主从具有健康副本的其他块服务器克隆副本。之后,master 指示上报问题的 chunk server 删除该 chunk。

回到你的问题,GFS 如何处理副本写入失败?

如果在复制过程中遇到任何错误,则向客户端报告突变失败。客户端必须处理错误并重试突变。不一致的块将在块服务器的定期扫描期间被垃圾收集。

于 2017-05-17T06:15:17.367 回答