Go-对象存储 | 青训营

98 阅读6分钟

1. 三种存储形态

1.1 块存储

块存储会将数据拆分成块,并单独存储各个块。每个数据块都有一个唯一的标识符,所以存储系统能将较小的数据存放在最方便的位置。块存储通常会被配置为将数据与用户环境分离,并会将数据分布到可以更好地为其提供服务的多个环境中。当用户请求数据时,底层存储软件会重新组装来自这些环境的数据块,并将它们呈现给用户。它通常会部署在存储区域网络(SAN)环境中,而且必须绑定到正常运行的服务器。
由于块存储不依赖于单条数据路径,因此可以实现快速检索。每个块都独立存在,可以进行分区,因此可以通过不同的操作系统进行访问,这使得用户可以完全自由地配置数据。它是一种高效可靠的数据存储方式,且易于使用和管理。它适用于要执行的大型事务的企业和部署了大型数据库的企业。所以,需要存储的数据越多,就越适合用块存储。

1.2 文件存储

文件存储也称为文件级存储或基于文件的存储,数据会以单条信息的形式存储在文件夹中。当需要访问该数据时,计算机需要知道相应的查找路径。存储在文件中的数据会根据数量有限的元数据来进行整理和检索,这些元数据会告诉计算机文件所在的确切位置。文件存储具有丰富多样的功能,几乎可以存储任何内容。非常适合用来存储一系列复杂文件,并且有助于用户快速导航。

1.3 对象存储

对象存储,也称为基于对象的存储,是一种扁平结构,其中的文件被拆分成多个部分并散布在多个硬件间。在对象存储中,数据会被分解为称为“对象”的离散单元,并保存在单个存储库中,而不是作为文件夹中的文件或服务器上的块来保存。
对象存储卷会作为模块化单元来工作:每个卷都是一个自包含式存储库,均含有数据、允许在分布式系统上找到对象的唯一标识符以及描述数据的元数据。元数据很重要,其包括年龄、隐私/安全信息和访问突发事件等详细信息。对象存储元数据也可以非常详细,并且能够存储与视频拍摄地点、所用相机和各个帧中特写的演员有关的信息。为了检索数据,存储操作系统会使用元数据和标识符,这样可以更好地分配负载,并允许管理员应用策略来执行更强大的搜索。
对象存储需要一个简单的 HTTP 应用编程接口 (API),以供大多数客户端(各种语言)使用。对象存储经济高效:您只需为已用的内容付费。它可以轻松扩展,因而是公共云存储的理想之选。它是一个非常适用于静态数据的存储系统,其灵活性和扁平性意味着它可以通过扩展来存储极大量的数据。对象具有足够的信息供应用快速查找数据,并且擅长存储非结构化数据。

2. 对象存储

2.1 对象存储架构

核心是将数据通路(数据读或写)和控制通路(元数据)分离,并且基于对象存储设备构建存储系统,每个对象存储设备是智能的,能够自动管理其上的数据分布。对象存储结构由对象存储设备、元数据服务器、对象存储系统的客户端三部分组成。

2.2 对象

对象是系统中数据存储的基本单位,每个 Obeject 是数据和数据属性集的综合体,数据属性可以根据应用的需求进行设置,包括数据分布、服务质量等。在传统的存储系统中用文件或块作为基本的存储单位,块设备要记录每个存储数据块在设备上的位置。Object 维护自己的属性,从而简化了存储系统的管理任务,增加了灵活性。Object 的大小可以不同,可以包含整个数据结构,如文件、数据表项等。在存储设备中,所有对象都有一个对象标识,通过对象标识 OSD 命令访问对象。通常由多种类型的对象,存储设备上的根对象标识存储设备和该设备的各种属性组,对象是存储设备上共享资源管理策略的对象集合等。

2.3 元数据服务器(Metadata Server,MDS)

MDS 控制 Client 与 OSD 对象的交互,为客户端提供元数据,主要是文件的逻辑视图,包括文件与目录的组织关系、每个文件所对应的 OSD 等。

功能:

  • 对象存储访问:MDS 构造、管理描述每个文件分布的视图,允许 Client 直接访问对象。MDS 为 Client 提供访问该文件所含对象的权限,OSD 在接收到每个请求时先验证该权限,然后才可以访问。
  • 文件和目录访问管理:MDS 在存储系统上构建一个文件结构,包括限额控制、目录和文件的创建和删除、访问控制等。
  • Client Cache一致性:为了提高 Client 性能,在对象存储系统设计时通常支持 Client 的 Cache。由于引入 Client 方的 Cache,带来了 Cache 一致性的问题,MDS支持基于 Client 的文件 Cache,当 Cache 的文件发生改变时,将通知 Client 刷新Cache,从而防止 Cache 不一致引发的问题。

心得体会(总结)

  • 理解对象存储的概念:对象存储是一种新兴的数据存储方式,与传统的文件系统或块存储不同。通过学习对象存储的概念和原理,我更清楚地理解了对象存储的特点和优势。
  • 灵活性和可扩展性:对象存储采用面向对象的方式来组织和管理数据,每个对象都有唯一的标识符,并且可以附加自定义的元数据。这使得对象存储具有很高的灵活性和可扩展性,适合存储大规模的数据。
  • 容灾和可靠性:对象存储通常具有冗余机制,能够将数据复制到多个节点或区域,以实现高可用性和容灾能力。这样即使某个节点或区域发生故障,数据仍然可靠地保存在其他地方。
  • 数据访问和共享:对象存储提供简单而强大的数据访问接口,如RESTful API,使得数据的读写和操作变得方便。此外,对象存储还支持数据的共享和权限控制,可以灵活地管理数据的访问权限。