前言
上一篇博客中总结了gfs一部分内容,剩下的一致性模型和容错性机制在这篇博客中结束
三、Fault Tolerance
GFS的容错性主要是通过以下几个机制实现的。这部分没有什么好说的,简单记录如下。
3.1 高可用性
这部分主要包括
(1)、快速恢复:Master和Chunk服务器宕机之后都可以在数秒中恢复其状态
(2)、Chunk 复制:每个chunk多个备份
(3)、Master 服务器的复制:为了保证 Master 服务器的可靠性, Master 服务器的状态也要复制。 Master 服务器所有的操作日志和checkpoint 文件都被复制到多台机器上。
3.2 数据完整性
有关数据的完整性主要指的是GFS通过Checksum来检查保存的数据是否损坏。
四、Consistancy Model
分布式一致性算法一直是一个非常大,非常难于理解和设计的point. GFS中的一致性模型也不例外。
GFS的一致性包括两方面内容,一个是元数据的一致性,其主要通过锁机制来实现。另一个就是副本数据之间的一致性。下面涉及的主要是后者。
从某种程度上来说,GFS使用WARO(Write-all-read-one)机制来读写副本,即如果更新所有副本成功则认为成功,一旦更新成功,则可以选取任意一个副本读取数据(刚刚写入的数据)。如果写入某个副本失败,则更新失败,副本之间即处于不一致的状态。如果这个时候client来读取的话,可能会读到不正确的数据。GFS不保证异常状态时副本的一致性,GFS系统需要上层应用通过Checksum等机制自行判断数据是否合法。
以上只是对GFS一致性机制做了一个相当笼统的介绍。要想深刻理解GFS的一致性模型,
首先要理解paper中出现的这个表。
这个博客中做了比较好的阐述。
其次要理解普通写操作和append操作在跨越chunk时造成了不一致现象,及其原因。
这个博客中解释的比较清楚。
最后,你会发现GFS在一致性上做的并不是很完美,甚至说不太好。所以后面有了代替平(HDFS)。
五、总结
设计并实现一个好的系统可能需要好几个月,甚至是好几年的时间,读一篇论文可能只需要几天,但是充分理解它,几天甚至几个星期甚至几个月都困难(尤其是在没有基础的情况下),哎,好吧,GFS,我理解的还不是很深刻。
参考
[1]. GFS 阅读笔记
[2]. GFS一致性总结
[3]. 从 GFS 失败的架构设计来看一致性的重要性