已定义的一定一致
- 通常,它是由一些来自多个修改操作的、混合的数据碎片组成的 。
一致的未必已定义,因为数据一致,但有些操作可能未成功或成功了一半
数据修改操作可能是写入 write 或记录追加 append 操作 。一个写操作会将数据写入到应用指定的文件位置 。偏移位置将被返回给客户端,并标明包含这个记录的已定义区间的开始位置 。
- 如果有多个并发修改操作,一个记录追加操作会将数据(记录)至少一次的原子性的追加到文件,而具体的偏移量是由GFS选定的 。
- 一个通常的追加操作仅仅是将数据追加到客户端认为是当前文件结尾的位置 。
在一系列成功的修改操作后,被修改的文件区域被保证为是已定义的,并且包含了最后一次修改操作写入的数据 。GFS通过以下步骤完成上面行为:
- 在所有副本上按相同的顺序执行一个块上的修改操作(3.1)
- 使用版本号来检测并复制过期文件(4.5)
- 这种过期可能是由于块服务器宕机而造成了部分修改丢失引起的 。过期的副本不会再涉及修改操作,主节点也不会将该副本返回给客户端 。它们会尽快的进行垃圾回收操作 。
在一个修改操作成功执行完一段时间后,组件的失效依然能损坏或删除数据 。
- GFS通过在主节点和所有块服务器间定期的握手来标识失效的块服务器,并通过校验和来探测数据损坏(5.2) 。
- 一旦问题被发现,数据将会尽快的利用有效副本进行恢复(4.3) 。
2.7.2 应用的实现GFS 基于一些简单的技术实现了一个宽松的一致性模型:
- 依赖追加而不是覆盖 。
- 检查点
- 写入时自验证 。
- 自标识的记录 。
实际中,我们所有的应用都是通过 append 而不是 overwriting 来修改文件 。在一个典型的例子中,一个写操作生成一个文件,并从头到尾的写入数据 。它将写入完数据的文件原子地重命名为一个不变的名字,或者周期性的创建检查点来记录有多少执行成功的写操作 。
经验总结扩展阅读
- google发送的通知在哪 谷歌发送的通知在哪里找
- JAVA的File对象
- Codeforces 1670 E. Hemose on the Tree
- 二 沁恒CH32V003: Ubuntu20.04 MRS和Makefile开发环境配置
- 驱动开发:内核监控FileObject文件回调
- 伤感英文句子带翻译 英文扎心短句大全
- 齐博X1-栏目的调用2
- Blazor组件自做十一 : File System Access 文件系统访问 组件
- How to get the return value of the setTimeout inner function in js All In One
- System.IO.FileSystemWatcher的坑