[分布式系统学习] 6.824 LEC3 GFS 笔记
Google File System
第三课的准备是阅读论文GFS。该论文是分布式系统中经典论文之一。
读完做一点小总结。
GFS的feature
1. 非POXIS接口API,支持对文件和文件夹的创建,读,写,增加,重命名和创建快照操作。
2. 有多个商用Linux机器做节点,称为chunk server,数据存放在chunk server上。
3. 有一个master节点,用于发送控制指令。
4. client通过调用API,和master做控制命令交换,和check server 做数据交换。
5. 对Append操作友好,对小文件随机读写不友好。
6. 重命名和Recore Append是原子操作。
7. 读操作可能返回不一致数据。
GFS的一些实现细节
1. 读写最小单位是所谓的64M大小的chunk。chunk存放在chunk server上。
2. 每个chunk 用64位唯一的handle表示。
3. master节点存放控制信息/chunk位置在内存中,同时持久化operation log用于recover。
4. master节点以一定策略决定chunk 的replacement,保证chunk均匀分布。
5. chunk server在restart的时候发送其本机上chunk信息。
6. chunk server随时可能宕机,master节点通过heartbeat消息报活。
7. 每个chunk有三份拷贝。其中一个称为primary。对chunk数据的更改顺序,统一由primary统筹,然后apply到其他拷贝。
8 每个chunk又分为64KB的block,每个block包含checksum,用于数据完整性检查。
GFS的读操作

1. client 把文件名和要读取的byte位移,通过API,映射成该文件中的chunk 序号。
2. client 发送包含文件名和chunk序号的请求信息给master,master返回chunk handle和所有拷贝所在的位置。
3. client会cache master返回的信息。
4. client发送请求到其中一个拷贝,根据策略,可能是离client较近的一个。
5. 拷贝所在的chunk server根据chunk handle和offset返回数据给client。
6. 接下来的读操作无需master介入,除非cache失效或者文件重新打开。
GFS的写操作
写操作很类似2PC。

1. client 询问master 某chunk的primary 位置,以及其他replica位置。
2. master 返回primary和sencondary replica的位置,图中的A,B和C。client会cache这些信息,除非与primary失联,或者primary告知自己以及失去primary地位。
3. client发送所有要写的数据到A,B和C。这些chunk server会暂存这些数据,直到被下面的步骤用到或者过期。注意这时候写操作依然进行中,并没有生效。
4. 当A,B和C表示暂存完成,client发送正式的写请求给primary,告知暂存完成。primary于是给其收到的所有数据更改赋予一个序列号,然后依次应用到本地拷贝。
5. primary 发送写请求到其他拷贝,并要求按同样序列应用到各自拷贝中。
6. secondary拷贝向primary表示,应用成功。
7. primary向client表示,写完成。
在遇到写错误时,3)-7)可能会多次重试。失败后将重新从1)开始。
写操作是不安全的。如果有多个client同时写同一个地方,该区域将变成“Consistent but undefined”,就是说所有client最终看到同样的结果,但是数据乱了。
但是所谓的“Record Append”是安全的。在Record Append中,client仅仅指明这是一个Append操作,并不指明offset。GFS选择一个offset写入数据,并返回该offset给client。
和普通写一样,client把数据推送到所有的拷贝,然后发送写请求给primary。
primary 检查 append是否会使当前chunk超过最大64M限制。如果是,当前chunk pad到最大size,然后告知其他拷贝做同样操作,并回复client,表示操作应在下一个chunk重试。
如果并没有超过64M限制,primary 把数据放入拷贝,并告知其他拷贝,数据要写在“exact the same offset as primary”,也就是说,必须和我primary保持绝对一致的offset。
如果上面任意一步错误,client将重试。这种行为可能造成拷贝之间并不是完全一致。chunk中可能包含record中的一些重复数据。GFS在这里通过重试能保证的是,数据存在所有拷贝中的某些chunk中,有同样的offset,并且只有当所有步骤完成后,primary返回的offset被认为是该Record的“defined start”。这中间可能包含无定义的,不一致信息。
而client在读取的时候,可以通过checksum来判断数据的重复性和一致性。
[分布式系统学习] 6.824 LEC3 GFS 笔记的更多相关文章
- [分布式系统学习] 6.824 LEC1 MapReduce 笔记
什么是Map-Reduce呢? Map指的是一个形如下面定义的函数. def Map(k, v): //return [(k1, v1), (k2, v2), (k3, v3), ...] pass ...
- [分布式系统学习] 6.824 LEC2 RPC和线程 笔记
6.824的课程通常是在课前让你做一些准备.一般来说是先读一篇论文,然后请你提一个问题,再请你回答一个问题.然后上课,然后布置Lab. 第二课的准备-Crawler 第二课的准备不是论文,是让你实现G ...
- 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案
国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- 前端程序员学习 Golang gin 框架实战笔记之一开始玩 gin
原文链接 我是一名五六年经验的前端程序员,现在准备学习一下 Golang 的后端框架 gin. 以下是我的学习实战经验,记录下来,供大家参考. https://github.com/gin-gonic ...
- [分布式系统学习]阅读笔记 Distributed systems for fun and profit 之三 时间和顺序
这是阅读 http://book.mixu.net/distsys/time.html 的笔记,是该系列的第三章. 为什么时间和顺序很重要呢?为什么我们关系事件A发生在事件B之前? 因为分布式系统要解 ...
- [分布式系统学习]阅读笔记 Distributed systems for fun and profit 抽象 之二
本文是阅读 http://book.mixu.net/distsys/abstractions.html 的笔记. 第二章的题目是"Up and down the level of abst ...
- [分布式系统学习]阅读笔记 Distributed systems for fun and profit 之一 基本概念
因为工作的原因,最近打算看一些分布式学习的资料.其中这个http://book.mixu.net/distsys/就是一篇非常适合分布式入门的介绍. 这个短小的材料有下面5个小的章节,图文并茂,也没有 ...
- [分布式系统学习]阅读笔记 Distributed systems for fun and profit 之四 Replication 拷贝
阅读http://book.mixu.net/distsys/replication.html的笔记,是本系列的第四章 拷贝其实是一组通信问题,为一些子问题,例如选举,失灵检测,一致性和原子广播提供了 ...
随机推荐
- eclipse中断点不生效
摘录自:http://blog.sina.com.cn/s/blog_496117520100kw6b.html Eclipse下Debug时弹出错误“Unable to install breakp ...
- 跨域、跨服务器调用时候session丢失的问题
最近新进一个公司,做的项目是手机支付系统.由于涉及到金钱相关的,所以安全性要求特别的高.项目分了很多个子系统,在部署(测试)的时候是每个Tomcat上面只放一个子系统.比如现在有5个子系统,那么就会对 ...
- Docker安装指南
Ubuntu 14.04 16.04 (使用apt-get进行安装) # step 1: 安装必要的一些系统工具 sudo apt-get -y update sudo apt-get -y inst ...
- 详解js中的apply与call的用法
前言 call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向.call 和 apply二者的作用完全一样,只是接受 ...
- ios的单元測试OCUnit以及更新了之后的XCTestCase
1.像一般创建项目的步骤一样.创建一个用于測试的项目或者打开一个待測试的项目. (oc是5.0之前所使用的測试,如今用的是XCtestCase,默认会创建一个主的測试类.曾经版本号可能非常多步骤省去) ...
- scala中to和util操作
// Range:to:默认步进为1 val to1 = 1 to 10 println(to1) // 定义一个不进为2的Range val to2 = 1 to 10 by 2 println(t ...
- Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:25:5-27:41 to override.
记录下来少走些坑吧 一:不管用 tools:replace="android:icon,android:theme" xmlns:tools="http://schema ...
- 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习
嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...
- Xshell 5 免费版本安装过程
发现本机的Xshell 5过期了用不了.在百度里搜索,下载安装后还是不可以使用.需要购买注册,后寻的一方法,分享给大家. 1.官网 进入官网,然后点击Download下方的Free License菜单 ...
- EXCEL数据匹配:The 'Microsoft.Jet.Oledb.4.0' provider is not registered on the local machin
百度的处理结果: 作者:LisenYang http://blog.csdn.net/lisenyang/article/details/52106492 这篇博文里面说的,默认设置修改[启动32应用 ...