GFS 系统设计深度解析
了解推动GFS开发的需求,并学习其架构。
存储区域网络(SAN)系统由一组连接在一起的通用存储设备组成,通过网络向客户端提供块级数据存储。SAN系统可以通过添加更多存储设备轻松扩展。然而,由于存在第二层网络——光纤通道(FC)的复杂性,这类系统难以管理。要部署光纤通道,需要在每台主机服务器上安装专用的主机总线适配器(HBAs)、交换机以及特殊布线。在这种复杂的系统中,故障定位十分困难。此外,副本之间可能出现数据不一致的问题。在此架构下,对存储设备进行负载均衡也较为困难。
注意: SAN部署是独立于常规以太网之外的专用网络。虽然这种双网络结构有利于隔离存储流量,但在成本上非常昂贵。
**Google文件系统(GFS)** 是一种分布式文件系统,能够在由通用服务器组成的存储集群上存储和处理大量数据密集型应用的数据。GFS的功能与非功能需求如下所述。
功能需求
功能需求包括以下内容:
- 数据存储:系统应允许用户将数据存储在GFS中。
- 数据检索:当用户请求时,系统应能够将数据返回给用户。
非功能需求
非功能需求包括以下内容:
-
可扩展性:系统应能够存储不断增加的数据量(数百TB及以上),并支持大量客户端同时访问。
-
可用性:文件系统是许多大型系统用于数据存储与检索的核心组件。若该系统不可用,依赖它的系统运行将受到严重影响。因此,文件系统必须始终能够响应客户端请求。
-
容错性:在由通用硬件构成的大规模集群中,组件故障是常见现象。系统的可用性和数据完整性不应因此受损。
-
持久性:一旦系统向用户确认数据已存储,除非用户主动删除,否则数据不应丢失。
-
易于运维管理:系统应能轻松处理多GB及以上的文件。应便于执行数据复制、重新复制、垃圾回收、快照生成等全局管理操作。若某些数据过期,应具备简单机制检测并修复。系统应支持多个独立租户安全地使用GFS进行数据存储与检索。
-
性能优化:对于需要处理大规模数据集的应用,重点应放在高吞吐量而非低延迟。此外,GFS所服务的谷歌应用通常倾向于向文件追加数据,而非覆盖原有数据。因此,系统应针对追加操作进行优化。例如,日志应用会不断向日志文件追加新日志条目;网页爬虫则将新的爬取数据追加到爬取文件中,而不是覆盖原有数据。所有MapReduce输出均从头到尾通过追加键值对写入文件。
-
宽松的一致性模型:GFS无需遵循 #key# POSIX 标准:POSIX(可移植操作系统接口)是由IEEE计算机协会制定的一套标准,旨在支持不同操作系统之间的兼容性。它定义了系统级和用户级应用程序编程接口(API)、命令行外壳及工具接口,以促进软件在不同操作系统间的可移植性。应用和系统开发者被鼓励采用POSIX标准。[维基百科] #key#。但由于GFS所服务的应用场景具有独特特性,因此不需要完全符合POSIX规范。在POSIX中,随机写入是一项基本操作,而GFS中以追加操作为主,随机写入极少。因此,GFS不遵循POSIX,而是采用一种针对追加操作优化的宽松一致性模型。在分布式环境中保证数据一致性非常困难,GFS为此精心设计了一种自定义的一致性模型,以实现更好的可扩展性和性能。
接下来我们将深入探讨GFS的架构,正是这一架构使其能够满足上述各项要求。
与传统分布式文件系统类似,GFS也包含三个主要组件。
一个GFS集群由两类核心组件构成:一个管理节点和大量分块服务器(ChunkServers)。文件数据以 #key# 分块(chunks)的形式存储:分块是GFS中的数据存储单元。#key# 其架构如以下示意图所示。
- 每个文件被划分为固定大小的分块。管理节点为每个分块分配一个64位全局唯一ID,并指定该分块存储和复制所在的分块服务器。管理节点类似于管理员,负责管理文件系统元数据,包括命名空间、文件到分块的映射关系以及分块的位置信息。元数据存储在管理节点内存中以保证高性能。为了持久化记录元数据,管理节点将元数据变更记录到位于本地硬盘上的操作日志中,以便在重启后通过重放日志恢复状态。除了元数据管理外,管理节点还负责以下任务:
- 数据复制与负载均衡
- 操作锁以确保数据一致性
- 已删除数据的垃圾回收
注意: 尽管谷歌在其关于GFS的研究论文中称此节点为“master”,但本文将统一使用“GFS管理节点”、“管理节点”或简称“管理节点”来指代同一实体。
How does a single manager suffice to handle requests from hundreds of clients?
Does the in-memory approach for storing metadata put a limitation on the amount of data we can store? The more data, the more the metadata would be.
How can we reduce the amount of time required to replay the growing operation log to rebuild the manager state?
思考要点
宏观视角
在接下来的课程中,我们将设计并评估GFS。以下概念图是对GFS所解决的问题及其创新点的快速总结。
GFS
问题陈述
- 用于存储大规模数据的分布式文件系统,具备以下关键特征:
- 可扩展性
- 容错性
- 高可用性
- 数据完整性
- 高聚合性能
- 原子性与正确性
解决方案空间
- 大容量存储
- 单个集群支持100TB及以上存储
- 监控
- 错误检测
- 自动恢复
- 分块复制
- 管理节点复制
- 并发与可串行化
- 租约与变更顺序
- 原子记录追加
- 命名空间管理与锁机制
- 宽松的一致性模型
架构
-
客户端
- 操作
- 创建、打开、关闭和删除文件/目录
- 读写文件数据
- 生成快照
- 操作
-
单一管理节点
- 操作
- 元数据管理
- 命名空间
- 访问控制信息
- 文件到分块的映射
- 分块位置
- 集群级管理
- 分块服务器分配
- 复制策略
- 重新复制
- 负载均衡
- 分块租约管理
- 垃圾回收
- 分块服务器监控
- 元数据管理
- 优势
- 基于全局知识做出更优的分块放置与复制决策
- 设计简洁
- 挑战
- 读写请求可能成为瓶颈
- 维护多个分块服务器的状态
- 内存或服务器故障
- 连接器、网络或电源故障
- 解决方案
- 仅由管理节点负责文件位置信息,不参与实际数据传输
- 客户端缓存元数据
- 在响应中附带请求分块及后续分块的位置信息
- 管理节点将元数据存储在内存中
- 通过心跳协议收集分块服务器状态
- 管理节点的复制机制
- 操作
-
多个分块服务器(基于Linux文件系统)
- 操作
- 执行数据操作
- 向管理节点发送心跳消息报告当前状态
- 优势
- 硬件成本较低
- 易于增删机器
- 操作