Google文件系统一致性模型

时间:2015-01-09 16:01:31

标签: concurrency filesystems distributed-system gfs

我正在阅读有关GFS及其一致性模型的内容,但我未能掌握其中的一些内容。 特别是,有人可以为我提供一个特定的示例场景(或解释为什么不可能发生):

  • 可能导致记录重复的并发记录追加
  • 可能导致未定义区域的并发记录追加
  • 并发写入(在单个块上)可能导致未定义的区域

2 个答案:

答案 0 :(得分:5)

我引用了http://research.google.com/archive/gfs.html。查看表1 ,这是写入/追加可能结果的摘要:

Table 1 from GFS whitepaper

  1. “如果任何副本上的记录追加失败,则客户端会重试 操作。因此,同一块的副本可能包含 不同的数据可能包括相同的重复 全部或部分记录。“因此,副本上的任何失败(例如超时)都会导致至少在其他副本上出现重复记录。这可能在没有并发写入的情况下发生。

  2. 导致重复记录的相同情况也会导致不一致(因此未定义)区域。如果副本未能确认突变,则可能未执行该突变。在这种情况下,当客户端重试附加时,此副本将必须添加填充来代替丢失的数据,以便可以在正确的偏移处写入记录。因此,一个副本将具有填充,而其他副本将具有此区域中先前写入的记录。

  3. 写入失败也会导致不一致(因此未定义)的区域。更有趣的是,成功的并发写入可能会导致一致但未定义的区域。 “如果应用程序的写入很大或跨越大块 边界,GFS客户端代码将其分解为多个 写操作。它们可以与并发交织和重写 来自其他客户的运营。因此,共享 文件区域可能最终包含来自不同的片段 客户,虽然复制品因个人而相同 操作成功完成 订购所有复制品。这使文件区域保持一致 但未定义的状态[...]。“

答案 1 :(得分:1)

我认为它与并发附加无关,而是与其系统的至少一次语义有关。

失败是大型分布式系统的基本问题。如果发生故障,发送方可能不知道网络另一端的计算机是否完全收到其消息。

对于这种情况,分布式系统保证消息最多一次至少一次

在这种情况下,GFS似乎决定至少一次交付到存储节点。