GFS论文阅读笔记

2020-07-26  本文已影响0人  睡不醒的大橘

论文链接

Architecture

Master

Metadata

数据更改

  1. write:写数据到应用程序指定的file offset
  2. append:将数据(record)至少一次原子性的append到文件中,offset由GFS选择(通常是将data append到某个文件的尾部)。 这个offset会返回给客户端
  1. client向master查询chunk的primary和secondary所在的chunkserver,如果没有一个replica拥有lease,master会选择一个replica并授予lease(需要等待lease过期,以防止脑裂)
  2. master返回primary和secondary的信息。client会cache返回的信息。直到primary不拥有lease(默认持有lease 60秒)或不可访问,client将需要再次请求master。
  3. client将数据发送给所有的replica,顺序可以是任意的。每个chunkserser会将数据存储在内存的LRU buffer cache中。
  4. 当所有的副本都返回已经接收数据成功后,client会向primary发送一个写请求。primary会为每一个数据更改的请求附加一个序列号,primary按照序列号顺序执行本地数据更改。
  5. primary传递数据更改请求到secondary中,这些replica也按照序列号顺序执行本地数据更改。
  6. secondary完成数据更改后,回复primary
  7. primary回复client。期间发生的所有错误都会报给client,表示请求失败。客户端会重试,直到成功。

Data Flow

Atomic Record Append

Snapshot

  1. 当master收到snapshot的请求时,会收回snapshot涉及的文件的chunk的lease,之后client对相关文件进行写操作时,primary将回复client它已经不再hold lease,使其必须与master进行交互。
  2. master执行snapshot操作,即将chunk的引用计数+1,复制源文件或者目录树相关的元数据,这份元数据也指向相同的chunk
  3. snapshot操作过后,当client对chunk C进行写操作时,它询问master哪个replica持有chunk C的lease,这时,master发现chunk C的引用计数大于1,master将推迟回复客户端并
    选出一个新的chunk handle C'。然后让有chunk C replica的chunkserver 在本地复制出chunk C'出来,这个chunk就叫做C'
  4. master授予lease给其中一个replica,最后回复客户端。后续的操作就和之前相同了。

命名空间管理和锁

创建,再次复制,重新负载均衡

  1. chunkserver上面磁盘的利用率,尽量将replica放到低磁盘利用率的机器上
  2. 限制chunkserver机器最近的创建的数目,为了防止单个chunkserver压力过大
  3. 尽可能将replicas散布在不同的机架
  1. 当前replica数量离目标数量的差距
  2. 趋向于复制live file的chunk,而不是deleted file的chunk
  3. 为了最小化失败对应用程序的影响,可能会阻塞客户端过程的chunk的优先级更高。

垃圾回收

过期失效的replica检测

数据完整性(Data Integrity)

上一篇下一篇

猜你喜欢

热点阅读