GFS阅读笔记(二)

3.系统交互
原则:最小化与master节点的交互
3.1lease与写操作顺序
写操作会改变chunk内容,或者元数据内容,如果进行写操作,会改变chunk的所有副本;
(1)使用lease保证多副本间写入顺序的一致性:
master为chunk的一个副本创建一个lease,使之成为主chunk;
主chunk对所有写入操作进行序列化;
所有其他副本遵从主副本的序列化操作;
lease机制是为了最小化master的负担,主chunk对lease的持有有超时设置;
在chunk被修改时,主chunk可以申请延长lease持有时间;
master可以取消lease,例如master要取消文件上的修改;
(2)写操作的流程

图二:写操作控制流与数据流
step1.客户端向master询问,哪个chunkserver持有lease,以及chunk的位置;如果没有chunk持有lease,则指定一个;
step2.master将主chunk,其他chunk的位置反馈给客户端,客户端会缓存这些元信息;
step3.客户端将数据传给chunkserver,数据流一定要推送给主chunk;
step4.数据传递给所有chunkserver后,控制流发往主chunk,主chunk对操作进行序列化;
step5.将序列化后的“操作序列”发往其他chunkserver;
step6.其他chunkserver执行完后返回主chunkserver;
step7.所有chunkserver执行完后返回客户端;

3.2数据流
(1)为了提高网络消息,数据流与控制流分离;
(2)为了避免延时,每台机器会选择一台“最近”的机器作为数据推送目标,“最近”可简单的由IP地址计算出;
(3)服务器间数据传递使用TCP长连接;
经验结论是,1M的数据约80ms就能分发完毕。

3.3原子性记录追加操作
多个客户端同时写入一个文件,原子性实现有以下两种方法:
(1)分布式锁;
(2)使用多个生产者,单个消费者的队列系统,合并多个客户端的写入;
GFS使用了方法(2)。

3.4快照
如同AFS(Andrew File System)一样,使用标准的copy-on-write技术实现快照:
(1)收到快照请求时,master会取消所有文件的chunk租约;
(2)master将操作日志刷到硬盘上(元数据的写操作日志,量是很小的);
(3)master备份多份操作日志,完成快照;

4.master的操作
master的职能:
(1)所有名字空间操作;
(2)管理chunk副本元信息,包括决定chunk位置,创建chunk等;
(3)实现chunk负载均衡,回收垃圾chunk;

4.1名字空间管理和锁
(1)GFS不支持文件或目录的链接,逻辑上,名字空间就是目录树;
(2)每个目录是一个节点,对应一个读写锁;
(3)操作某个文件,必须递归获取各上级目录的锁;
例如:要操作文件/d1/d2/d3/file1,就必须先获取/d1/d2/d3,/d1/d2,/d1三把锁。
(4)读写锁的冲突方式,与普通数据库读写锁,文件读写锁的冲突方式一致;
优点:
(1)支持同一目录下多个文件的并行操作;
(2)使用全局锁视野避免死锁;

4.2副本的位置
副本放置的三大目标:
(1)最大化数据可靠性;
(2)最大化数据可用性;
(3)最大化网络带宽利用率;
副本放置方式:
(1)一个副本多份;
(2)每份副本在不同机器上;
(3)机器尽量分布在不同机架上;

4.3副本的创建、复制与均衡
master创建副本将考虑的因素:
(1)均衡chunkserver磁盘使用率;
(2)均衡chunkserver写操作频率;
(3)均衡各机架的chunkserver;

副本的复制:
(1)某chunkserver不可用了,master会复制其上的chunk到其他机器;
(2)增加了副本数配置也会引起副本的复制;
(3)复制策略与创建策略相同;

4.4垃圾回收
(1)文件被删除时,master会将删除日志记录下来,但并不马上回收资源;
(2)被删除的chunk会记录时间戳,并置删除标记(所以删除是高效的,删除后chunk未被写入前,恢复是可行的);
(3)独立任务扫描chunk,孤儿chunk将被删除,同时向master发消息以删除元数据;

评论关闭。