Google 文件系统一致性模型

Google File System Consistency Model

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

我不认为它真的与并发追加有关,但与他们系统的至少一次语义有关。

故障是大型分布式系统的一个基本问题。在出现故障的情况下,发件人可能不知道网络另一端的计算机是否已完全接收到它的消息。

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

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

我引用自 http://research.google.com/archive/gfs.html。查看 Table 1,这是 writes/appends:

可能结果的总结

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

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

  3. 写入失败也会导致区域不一致(因此未定义)。更有趣的是,成功的并发写入会导致一致但未定义的区域。 "如果应用程序的写入很大或跨越一个块 边界,GFS 客户端代码将其分解为多个 写操作。它们 [...] 可能与并发交错并被并发覆盖 来自其他客户端的操作。因此,共享 文件区域可能最终包含来自不同的片段 客户,尽管副本将是相同的,因为个人 操作在同一成功完成 在所有副本上排序。这使文件区域保持一致 但未定义状态 [...]."