「读书笔记」《大规模分布式存储系统:原理解析与架构实战》:四

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 「读书笔记」《大规模分布式存储系统:原理解析与架构实战》:四

4 分布式文件系统

4.1 GFS

4.1.1 系统架构

组件:

  1. GFS Master(主控服务器)
  2. GFS ChunkServer (CS 数据块服务器)
  3. GFS 客户端

GFS 文件被分为固定大小的数据库(chunk),主服务器在创建时分配一个 64 位全局唯一的 chunk 句柄。

chunk 在不同的机器中复制多份,默认为 3 份。

主控服务器 中维护了系统的元数据,包括文件及 chunk 命名空间、文件到 chunk 之间的映射、chunk 位置信息。也负责整个系统的全局控制,如 chunk 租约管理、垃圾回收无用 chunk、chunk 复制等。主控服务器会定期与 CS 通过心跳的方式交换信息。

客户端 是 GFS 提供给应用程序的访问接口,它是一组专用接口,不遵循 POSIX 规范,以库文件的形式提供。客户端访问主控节点,获取与之进行交互的 CS 信息,然后直接访问这些 CS,完成数据存取工作。

❗ 注意:

GFS 中的客户端不缓存文件数据,只缓存主控服务器中获取的元数据。

4.1.2 关键问题

租约机制

GFS 数据追加以记录为单位,每个记录大小为几十 KB 到几 MB 不等,如果每次记录追加都需要请求 Master,Master 会成为瓶颈,因此,GFS 系统中通过租约(lease)机制将 chunk 写操作授权给 ChunkServer。拥有租约授权的为 主 ChunkServer,其他副本所在的 ChunkServer 称为备 ChunkServer。租约授权针对单个 chunk,在租约有效期内,对该 chunk 的写操作都由 主 ChunkServer 负责,从而减轻 Master 的负载。一般来说,租约的有效期比较长,比如 60s,只要没异常,主 ChunkServer 可以不断向 Master 请求延长租约的有效期直到整个 chunk 写满。

GFS 通过对每个 chunk 维护一个版本号来解决,每次给 chunk 进行租约授权或主 ChunkServer 重新延长租约有效期,Master 会将 chunk 的版本号加 1. 如果过程中某个 A chunk 的副本 A2 下线,A2 的版本号会低,从而将 A2 标记为可删除的 chunk,Master 的垃圾回收任务会定时检查,并通知 ChunkServer 将 A2 回收掉。

一致性模型

GFS 主要是为了 追加 (append)而不是 改写(overwrite)而设计的。

追加模型

容错机制

Master 容错

通过操作日志加 checkpoint 的方式进行,并且有一台 「Shadow Master」实时热备。

Master 上保存了三种元数据信息:

  • 命名空间(NameSpace),也就是整个文件系统的目录结构以及 chunk 基本信息;
  • 文件到 chunk 之间的映射
  • chunk 副本的位置信息,每个 chunk 通常有 3 个副本

Master 操作总是先记录操作日志,后修改内存。

远程的实时热备将实时接收 Master 发送的操作日志并在内存中回放这些元数据操作。如果 Master 宕机,还可以秒级切换到实时备机继续提供服务。

Master 需要持久化 命名空间 和 文件到 chunk 之间的映射;chunk 副本的位置信息可以不持久化,因为 chunkserver 维护了这些信息。

ChunkServer 容错

多副本。对于每个 chunk,必须将所有的副本全部写入成功,才视为成功写入。

ChunkServer 会对存储的数据维持校验和。

GFS 以 64MB 为 chunk 大小来划分文件,每个 chunk 又以 block 为单位进行划分,Block 大小为 64KB,每个 Block 对应一个 32 位的校验和。当读取一个 chunk 副本时,ChunkServer 会将读取的数据和校验和进行比较,如果不匹配,就会返回错误,客户端将选择其他 ChunkServer 上的副本。

4.1.3 Master 设计

Master 内存占用

每个 chunk 的元数据小于 64 字节。那么 1PB 数据的 chunk 元数据大小不超过 1PB * 3 / 64MB * 64 = 3GB

Master 还对命名空间进行了压缩,每个文件在文件命名空间的元数据也不超过 64 字节。因此 Master 内存容量不会成为 GFS 的系统瓶颈。

负载均衡

创建副本有 3 种情况:

  1. chunk 创建
  2. chunk 复制(re-replication)
  3. 负载均衡(rebalancing)

如何选择 chunk 副本的初始位置:

  1. 新副本所在的 ChunkServer 的磁盘利用率低于平均水平
  2. 限制每个 ChunkServer 「最近」创建的数量
  3. 每个 chunk 的所有副本不能在同一个机架。

垃圾回收

延迟删除的机制。在元数据中将文件改名为一个隐藏的名字,并且包含一个删除时间戳(默认 3 天)。

垃圾回收一般在服务低峰期执行,如凌晨 1:00.

快照

使用标准的写时复制机制生成快照,「快照」只是增加 GFS 中 chunk 的引用计数,表示这个 chunk 被快照文件引用了,等到客户端修改 这个 chunk 时,才需要在 ChunkServer 中拷贝 chunk 的数据生成新的 chunk,后续的修改操作落到新生成的 chunk 上。

做快照,首先需要停止这个文件的写服务(通过租约机制收回),接着增加这个文件的所有 chunk 的引用计数,以后修改这些 chunk 时会拷贝生成新的 chunk。

4.1.4 ChunkServer 设计

保证 ChunkServer 尽可能均匀地分布在不同的磁盘中。删除 chunk 时可以只将对应的 chunk 文件移动到每个磁盘的回收站,以后新建 chunk 可以重用。

4.1.5 讨论

典型优势:大大降低成本,由于基础设施成本低,Gmail 服务能够免费给用户提供更大的容量。

4.2 Taobao File System

2007 年之前淘宝图片存储系统使用 NetApp 存储系统。

TFS:Blob 存储系统。

TFS 架构设计考虑以下 2 个问题:

  • Metadata 信息存储。图片数量巨大,单机放不下所有的元数据信息。
  • 减少图片读取的 IO 次数。

设计思路:多个逻辑图片文件共享一个物理文件

4.2.1 系统架构

TFS 不维护文件目录树,每个小文件使用一个 64 位的编号表示。

一个 TFS 集群由:

  • 2 个 NameServer 节点(一主一备)
  • 多个 DataServer 节点

NameServer 通过 心跳对 DataServer 进行检测。

每个 DataServer 会运行多个 dsp 进程,一个 dsp 对应一个挂载点,这个挂载点一般对应一个独立磁盘,从而管理多块磁盘。

在 TFS 中,将大量的小文件(实际数据文件)合并成一个大文件,这个大文件称为块(Block),每个 Block 拥有集群内唯一的编号(块 ID),通过 块 ID,文件编号 可以唯一确定一个文件。Block 数据大小一般为 64 MB,默认 3 份。

追加流程

TFS 是写少读多的,那么每次写操作都经过 NameNode 也不会有问题。

另外,TFS 不需要支持 GFS 的多客户端并发追加操作,同一时刻每个 Block 只能有一个写操作,多个客户端的写操作会被串行化。

NameServer

功能:

  1. Block 管理,包括创建、删除、复制、重新均衡;
  2. DataServer 管理,包括心跳、DataServer 加入及退出;
  3. 管理 Block 与所在 DataServer 之间的映射关系

与 GFS 相比,TFS NameServer:

  1. 不需要保存文件目录树信息;
  2. 不需要维护文件与 Block 之间的映射关系

4.2.2 讨论

  1. 图片去重:MD5 或 SHA1
  2. 图片更新于删除

4.3 Fackbook Haystack

  1. 目录(Directory)
  2. 存储(Store)
  3. 缓存(Cache)

4.4 内容分发网络

4.4.1 CDN 架构

相关文章
|
1月前
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
【10月更文挑战第14天】深入理解微服务架构:构建高效、可扩展的系统
84 0
|
8天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
44 4
|
19天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
57 4
|
18天前
|
前端开发 安全 关系型数据库
秒合约系统/开发模式规则/技术架构实现
秒合约系统是一种高频交易平台,支持快速交易、双向持仓和高杠杆。系统涵盖用户注册登录、合约创建与编辑、自动执行、状态记录、提醒通知、搜索筛选、安全权限管理等功能。交易规则明确,设有价格限制和强平机制,确保风险可控。技术架构采用高并发后端语言、关系型数据库和前端框架,通过智能合约实现自动化交易,确保安全性和用户体验。
|
26天前
|
存储 数据管理 调度
HarmonyOS架构理解:揭开鸿蒙系统的神秘面纱
【10月更文挑战第21天】华为的鸿蒙系统(HarmonyOS)以其独特的分布式架构备受关注。该架构包括分布式软总线、分布式数据管理和分布式任务调度。分布式软总线实现设备间的无缝连接;分布式数据管理支持跨设备数据共享;分布式任务调度则实现跨设备任务协同。这些特性为开发者提供了强大的工具,助力智能设备的未来发展。
79 1
|
1月前
|
存储 监控 负载均衡
|
1月前
|
传感器 存储 架构师
构建基于 IoT 的废物管理系统:软件架构师指南
构建基于 IoT 的废物管理系统:软件架构师指南
72 9
|
1月前
|
存储 前端开发 API
DDD领域驱动设计实战-分层架构
DDD分层架构通过明确各层职责及交互规则,有效降低了层间依赖。其基本原则是每层仅与下方层耦合,分为严格和松散两种形式。架构演进包括传统四层架构与改良版四层架构,后者采用依赖反转设计原则优化基础设施层位置。各层职责分明:用户接口层处理显示与请求;应用层负责服务编排与组合;领域层实现业务逻辑;基础层提供技术基础服务。通过合理设计聚合与依赖关系,DDD支持微服务架构灵活演进,提升系统适应性和可维护性。
|
1月前
|
存储 安全 开发工具
百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现
本文主要介绍了百度公共IM系统的Andriod端IM SDK的建设背景、IM SDK主要结构和工作流程以及建设过程遇到的问题和解决方案。
55 3
|
2月前
|
运维 持续交付 API
深入理解并实践微服务架构:从理论到实战
深入理解并实践微服务架构:从理论到实战
137 3

推荐镜像

更多