Google File System翻译及笔记

2019-11-22  本文已影响0人  hugo54

0. QA

Question:GFS是建立在Linux文件系统之上,还是取代了它?

Answer:当然是建立在Linux文件系统之上啦!整个GFS系统都是用户级别的进程。此外,chunkserver还利用了Linux的文件缓存机制呢。

~

Question:GFS提供的接口和POSIX API处于同一层么?

Answer:

~

Question:chunk lease是什么?

Answer:chunk lease是用于维护多chunk副本一致性的机制。master向其中一个chunk副本授予lease,这个副本被称作primary,其余的副本都被称作secondary。primary为chunk的所有修改选择一个序列顺序,所有副本进行修改时遵循这个顺序。

~

Question:chunkserver怎么保证数据完整性?

Answer:chunkserver用checksum保证数据完整性。每个chunk都会被分解成64KB大小的块,每个块都有一个32位的checksum。对于读操作,chunkserver在数据返回给请求者之前,检查所有交叠部分的checksum。如果checksum不一致,chunkserver会向请求者返回错误向master报告数据缺失,请求者会转而请求其他chunk副本,master会从其他chunk副本复制发给缺失者。收到新的副本后,旧的损坏副本会被删除。

1. Introduction

Google File System借鉴了先前的分布式系统在性能、扩展性、可靠性、可用性的成果,并基于对Google应用程序的工作负载(workload)和技术环境(technological environment)的观察,做出了许多与传统设计相异的设计假设:

2. Design Overview

2.1 Assumptions

2.2 Interface

虽然Google File System没有实现标准API(例如POSIX),但它提供了熟悉的文件系统接口:createdeleteopenclosereadwrite

除此之外,GFS还提供了snapshotrecord append这两种操作。

2.3 Architecture

一个GFS集群由一个master、多个chunkserver和多个client组成,它们通常都是运行在商用Linux机器上的用户级别进程

文件被分割成固定大小的chunks,每个chunk通过一个不可变的全局唯一的64位chunk handle识别(在chunk创建时由master分配)。chunkserver以Linux文件的形式在本地硬盘上存储chunk,读写chunk数据需要使用chunk handle和byte range指明。用户可以为不同的命名空间指定不同的复制级别,默认情况下,我们存储三份文件的拷贝。

Master维护了所有的文件系统元信息,其中包括:命名空间、访问控制信息、文件到chunk的映射、chunk的当前位置。它也控制了全系统的活动,例如chunk租约管理、孤儿chunk的垃圾回收、chunkserver之间的chunk迁移。Master周期性地和chunkserver以心跳包的形式通信,给它们发送指示,并收集它们的状态。

与每个应用程序相连的GFS client代码实现了文件系统的API,并代表应用程序读写数据,与master和chunkserver通信。client与master交互以进行元数据操作,但所有的携带数据的通信都是直接与chunkserver进行。我们不提供POSIX API,因此不需要连接到Linux vnode层。

client和chunkserver都不缓存文件数据。client缓存收效甚微,因为大多数应用程序流经大文件或有太大的工作集以至于无法被缓存。因为无需实现client缓存,消除了缓存一致性问题,简化了client和整个系统的设计(但client还是要缓存元数据)。chunkserver也不需要缓存文件数据,因为chunk以本地文件的形式存储,所以Linux的缓存已经把最常访问的的数据缓存在内存里了。

2.4 Single Master

单个的master极大地简化了我们的设计,使得master可以使用全局信息来制定复杂的chunk放置决策和复制决策。但我们必须使它对读写操作的波及最小化,以确保它不会成为瓶颈。client不经由master读写文件,而是问master它需要联系哪个chunkserver。client在有限时间内缓存这个信息,在随后的操作中直接与chunkserver交互。

(下面两段是例子,就不翻译了)

2.5 Chunk Size

Chunk size是关键设计参数之一,我们选择64MB作为chunk size,这比典型的文件系统块大小更大。每个块复制品以普通Linux文件的形式存储在chunkserver上,它仅按需扩展。惰性空间分配避免了由于内部碎片而浪费空间,这可能是对如此大的块大小的最大反对意见。(?)

大chunk size有以下几点好处:

另一方面,大的chunk size(即便是惰性空间分配)也有其缺点。假如有一个小文件,它由几个chunk组成(可能只有一个)。如果客户端多次访问同一个文件,这些chunk会成为chunkserver中的热点。在实践中,热点通常不会成为主要问题,因为我们的应用多数是以大的多chunk顺序读取。

但是,当批处理队列系统首次使用GFS时,热点确实出现了:

2.6 Metadata

(暂时未翻译)

2.7 Consistency Model

这位博主写的GFS一致性模型文章解释得很清楚,可以参考一下。

Reference

上一篇 下一篇

猜你喜欢

热点阅读