Colossus under the hood: a peek into Google’s scalable storage system——文章泛读

Web page 分布式元数据论文阅读笔记整理

本文工作

介绍为谷歌云提供支持的基础存储系统Colossus。

所有 Google 都由一组通用的可扩展服务组成,每个存储服务都使用三个主要构建块:

  • Colossus 是集群级文件系统,是 Google 文件系统 (GFS) 的后继者。

  • Spanner 是全球一致、可扩展的关系数据库。

  • Borg 是一个可扩展的作业调度程序,可以启动从计算到存储服务的所有内容。

Borg 提供所需的资源,Spanner 存储有关访问权限和数据位置的所有元数据,Colossus 管理、存储并提供对所有数据的访问。

Colossus 介绍

  • Client library:客户端库是应用程序或服务与 Colossus 交互的方式。根据应用程序的要求,客户端可以使用许多功能,例如软件 RAID。基于 Colossus 构建的应用程序使用各种编码来针对不同的工作负载微调性能和成本权衡。

  • Colossus Control Plane:Colossus 的基础是其可扩展的元数据服务,该服务由许多 Curator 组成。客户直接与 Curator 对话以进行控制操作,例如文件创建。

  • Metadata database:Curator 将文件系统元数据存储在高性能 NoSQL 数据库 BigTable 中,为了解决在尝试容纳与搜索相关的元数据时遇到的 GFS 的扩展限制。将文件元数据存储在 BigTable 中,使 Colossus 的扩展能力比最大的 GFS 集群高出 100 倍以上。

  • D File Servers:Colossus 最大限度地减少了网络上数据的跳数。数据直接在客户端和 D 文件服务器(网络附加磁盘)之间流动。

  • Custodians:后台存储管理器,用于维护数据的持久性和可用性、整体效率、磁盘空间平衡、 RAID 重建等任务。

性能介绍

可扩展性

各种实例共享相同的底层文件系统来完成请求,由 Colossus 控制平面管理的共享存储池。通过资源分解提高宝贵资源的使用效率,并降低所有工作负载的成本。例如,可以满足低延迟工作负载(如 YouTube 视频)的峰值需求,通过填补空闲时间的空白来更便宜地运行批量分析工作负载。

简化硬件复杂性

Google 数据中心拥有种类繁多的底层存储硬件,提供多种大小和类型的磁盘和闪存存储组合。此外,应用程序在耐用性、可用性和延迟方面有着多样化的需求。为了确保每个应用程序拥有所需的存储,Colossus 提供了一系列服务级别。应用程序通过指定 I/O、可用性和持久性要求来使用这些不同的层,然后将资源(字节和 I/O)配置为抽象的、无差别的单元。

最大化存储效率

Colossus 利用数据具有多种访问模式和频率(即频繁访问的热数据),混合使用闪存和磁盘存储来满足任何需求,避免过度配置。最热的数据存储在闪存中,以实现更高效的服务和更低的延迟。通过闪存,将每 GB 的 I/O 密度提高到磁盘可以提供的水平,通过磁盘,以确保足够的容量。

对于基于磁盘的存储,希望保持磁盘满且繁忙,以避免浪费磁盘 IOP。Colossus 使用智能磁盘管理,新写入的数据(即较热的数据)均匀分布在集群中的所有驱动器上,随着数据老化和变冷,数据被重新平衡并移动到更大容量的驱动器。

总结

对 Google 存储服务的基本介绍, 其中包括三个主要组件:Colossus,集群级文件系统;Spanner,全球一致、可扩展的关系数据库;Borg,可扩展的作业调度程序。Colossus 包含5个部分:Client library,应用程序或服务与 Colossus 交互的方式,使用各种编码来针对不同的工作负载微调性能和成本权衡;Colossus Control Plane,可扩展的元数据服务,由许多 Curator 组成;Metadata database,将文件系统元数据存储在高性能 NoSQL 数据库 BigTable 中;D File Servers,减少了网络上数据的跳数,数据直接在客户端和 D 文件服务器(网络附加磁盘)之间流动;Custodians,后台存储管理器,维护数据的持久性和可用性、效率、磁盘空间平衡、 RAID 重建等任务。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 14:22:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 14:22:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 14:22:04       87 阅读
  4. Python语言-面向对象

    2024-04-30 14:22:04       96 阅读

热门阅读

  1. 模型剪枝——RETHINKING THE VALUE OF NETWORK PRUNING

    2024-04-30 14:22:04       159 阅读
  2. R可视化:Venn图进阶版本

    2024-04-30 14:22:04       29 阅读
  3. ES6要点

    ES6要点

    2024-04-30 14:22:04      33 阅读
  4. 用于网络唤醒(Wake-on-LAN)和远程关机的方法

    2024-04-30 14:22:04       147 阅读
  5. MySQL随便聊----之SQL的简单了解

    2024-04-30 14:22:04       132 阅读
  6. 深入理解堆机制:C语言中的数据结构基础

    2024-04-30 14:22:04       39 阅读
  7. qt环境下给lineEdit设置数值精度为0.5

    2024-04-30 14:22:04       36 阅读
  8. 解释一下HTTP请求报文的结构。

    2024-04-30 14:22:04       28 阅读