对象存储3:对象存储的原理、构造和详解

时间:2024-04-03 13:02:52

前两篇介绍了对象存储的基础,包括存储类型,常用存储分类和分类方法。

SCSI,TCP/IP,FC等存储介质以及DAS\NAS\SAN等存储网络,请参考:对象存储1:传统存储类型和分类

文件存储,块存储以及对象存储等数据存储格式,请参考: 对象存储2:云平台数据存储类型

 

1.对象存储基础

对象存储的命名,是由其存储数据的格式来的,它的数据是以对象object的形式存储。

文件存储的数据存储单位为文件;块存储的数据存储单位为数据块;块存储的存储单位为对象。

1.1 数据格式

一个文件包含了两部分内容,属性和内容(即数据);属性又称元数据metadata,是指数据的属性内容,比如文件大小、创建时间、修改时间、存储路径等。

像FAT32文件系统,是直接将一份文件的数据与metadata一起存储的。存储过程先将文件按照文件系统的最小块大小来打散(如4M的文件,假如文件系统要求一个块4K,那么就将文件打散成为1000个小块),再写进硬盘里面,过程中没有区分数据/metadata的。每个块最后会告知你下一个要读取的块的地址,然后一直这样顺序地按图索骥,最后完成整份文件的所有块的读取。所以无论系统性能多么强,都只能按顺序一个块一个块的读取,只有读完前一个块,才能开始读取下一个块。读写效率就成了最大的瓶颈。

对象存储3:对象存储的原理、构造和详解
块存储与对象存储
对象存储3:对象存储的原理、构造和详解
传统数据访问层次、虚拟数据访问模型

 

 

1.2 对象存储原理

对象存储将元数据独立了出来,元数据里写明了数据的所有属性,包括打散后的每个块所存储的位置。对象存储将元数据和数据进行了分开存储,这样只要读取到了元数据,就能找到所有的数据块,并可以同时对数据块进行读取,大大提高了数据处理的效率。

对象存储中用来存储元数据的节点是控制节点,称为元数据服务器(服务器+对象存储管理软件),里面主要负责存储对象的属性(主要是对象的数据被打散存放到了那几台分布式服务器中的信息);负责存储数据的分布式服务器叫做OSD,主要负责存储文件的数据部分。当用户访问对象,会先访问元数据服务器,元数据服务器只负责反馈对象存储在哪些OSD,假设反馈文件A存储在B、C、D三台OSD,那么用户就会再次直接访问3台OSD服务器去读取数据。这时候由于是3台OSD同时对外传输数据,所以传输的速度就加快了。当OSD服务器数量越多,这种读写速度的提升就越大,通过此种方式,实现了读写快的目的。

另一方面,对象存储软件是有专门的文件系统的,所以OSD对外又相当于文件服务器,那么就不存在文件共享方面的困难了,也解决了文件共享方面的问题。

1.3 对象

对象是系统中数据存储的基本单位,一个对象实际上就是文件的数据和一组属性信息(Meta Data)的组合,这些属性信息可以定义基于文件的RAID参数、数据分布和服务质量等,而传统的存储系统中用文件或块作为基本的存储单位,在块存储系统中还需要始终追踪系统中每个块的属性,对象通过与存储系统通信维护自己的属性。在存储设备中,所有对象都有一个对象标识,通过对象标识OSD命令访问该对象。通常有多种类型的对象,存储设备上的根对象标识存储设备和该设备的各种属性,组对象是存储设备上共享资源管理策略的对象集合等。

对象存储3:对象存储的原理、构造和详解
对象的构成

 

2.对象存储的结构

根据对象存储原理所讲的,核心是将数据通路(数据读或写)和控制通路(元数据)分离,并且基于对象存储设备(Object-based Storage Device,OSD)构建存储系统。每个对象存储设备具有一定的智能,能够自动管理其上的数据分布。对象存储的结构包括元数据服务器(控制节点MDS)和数据存储服务器(OSD),两者进行数据的存储,还需要客服端client进行存储的服务访问和使用。架构如下图:

对象存储3:对象存储的原理、构造和详解
对象存储架构图

 

2.1 对象存储设备OSD

对象存储设备是对象存储的核心设备,具有一定的智能,它有自己的CPU、内存、网络和磁盘系统,OSD同块设备的不同不在于存储介质,而在于两者提供的访问接口。OSD的主要功能包括数据存储和安全访问。目前国际上通常采用刀片式结构实现对象存储设备。OSD提供三个主要功能:
(1) 数据存储。OSD管理对象数据,并将它们放置在标准的磁盘系统上,OSD不提供块接口访问方式,Client请求数据时用对象ID、偏移进行数据读写。
(2) 智能分布。OSD用其自身的CPU和内存优化数据分布,并支持数据的预取。由于OSD可以智能地支持对象的预取,从而可以优化磁盘的性能。
(3) 每个对象元数据的管理。OSD管理存储在其上对象的元数据,该元数据与传统的inode元数据相似,通常包括对象的数据块和对象的长度。而在传统的NAS系统中,这些元数据是由文件服务器维护的,对象存储架构将系统中主要的元数据管理工作由OSD来完成,降低了Client的开销。


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

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

2.3 对象存储系统的客户端Client

为了有效支持Client支持访问OSD上的对象,需要在计算节点实现对象存储系统的Client,通常提供POSIX文件系统接口,允许应用程序像执行标准的文件系统操作一样。
 

3. 对象存储文件系统的关键技术:

3.1 分布元数据

传统的存储结构元数据服务器通常提供两个主要功能。

(1)为计算结点提供一个存储数据的逻辑视图(Virtual File System,VFS层),文件名列表及目录结构。

(2)组织物理存储介质的数据分布(inode层)。对象存储结构将存储数据的逻辑视图与物理视图分开,并将负载分布,避免元数据服务器引起的瓶颈(如NAS系统)。元数据的VFS部分通常是元数据服务器的10%的负载,剩下的90%工作(inode部分)是在存储介质块的数据物理分布上完成的。在对象存储结构,inode工作分布到每个智能化的OSD,每个OSD负责管理数据分布和检索,这样90%的元数据管理工作分布到智能的存储设备,从而提高了系统元数据管理的性能。另外,分布的元数据管理,在增加更多的OSD到系统中时,可以同时增加元数据的性能和系统存储容量。

3.2 并发数据访问

对象存储体系结构定义了一个新的、更加智能化的磁盘接口OSD。OSD是与网络连接的设备,它自身包含存储介质,如磁盘或磁带,并具有足够的智能可以管理本地存储的数据。计算结点直接与OSD通信,访问它存储的数据,由于OSD具有智能,因此不需要文件服务器的介入。如果将文件系统的数据分布在多个OSD上,则聚合I/O速率和数据吞吐率将线性增长,对绝大多数Linux集群应用来说,持续的I/O聚合带宽和吞吐率对较多数目的计算结点是非常重要的。对象存储结构提供的性能是目前其它存储结构难以达到的,如ActiveScale对象存储文件系统的带宽可以达到10GB/s。
 

 

 

 

3.对象存储常用场景