阅读GFS论文时,发现有几个地方特别不容易理解,特记录如下。
一致性问题
GFS中的文件由块组成,同一个块有多个副本,副本分布在不同的节点上,如何保证数据的一致性?
论文中有“宽松的一致性模型”这种说法,一般的理解,“宽松”的意思就是不严格保证,为什么呢?原文中的说法是为了简化系统设计。
为什么会有一致性的问题?一致性问题产生的根源是什么?
写入操作失败,是导致不一致性的一个原因。
更普遍的原因是用户多路并发写操作,因为简化系统设计,又没有提供复杂的同步机制。
一致性涉及到的重要概念:
- consistent:对于文件中的一块区域,比如从某个偏移量开始到某个偏移量结束,如果客户端从任意副本读出的这块数据都相同,则认为文件的这块区域在系统中是consistent,也就是一致的,但一致并不等同于正确。
- defined:如果对于文件中的某一个区域,如果一个变更完成后,区域中的数据在保持一致性的同时,所有的客户端都能完整的看到这次变更,则说明这块区域是defined,也就是定义的,这是理解的状态。
接下来看下表:
| 随机写 | 记录追加写 | |
| 串行成功 | 定义的 | 定义但部分不一致 |
| 并发成功 | 一致但是未定义 | |
| 失败 | 不一致 | |
- 随机写串行成功

本文记录了阅读Google File System (GFS) 论文时遇到的难点,主要探讨了GFS中的一致性问题、变更顺序与租赁机制,以及记录追加的原子性。GFS通过编号和版本控制保证一致性,采用租赁机制减少Master节点的负担,确保并发追加数据时的数据顺序。记录追加操作在GFS中具有原子性,即使有碎片,也能保证至少一条正确记录的存在。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



