对象存储原理介绍
一、对象存储基础
1、对象存储概念
对象存储、块存储、文件存储是三种不同的分布式存储方式。对象存储是以对象的形式管理数据,对象一般分为三个部分,元数据、对象id、数据。
元数据包含对象的类型、大小、写入时间与存储位置等信息。
对象id是数据的唯一标识。
数据是存储的数据实体。
对象存储的命名,是由其存储数据的格式来的,它的数据是以对象object的形式存储。
文件存储的数据存储单位为文件,数据存储方式是二叉树;块存储的数据存储单位为数据块,数据存储格式是数组;块存储的存储单位为对象,数据存储方式是哈希表。
2、数据格式
一个文件包含了两部分内容,属性和内容。属性既是元数据(metadata),包含对象的大小,类型,写入时间,存储路径等等
例如FAT32文件系统,是直接将一份文件的数据与metadata一起存储的。存储过程先将文件按照文件系统的最小块大小来打散(如4M的文件,假如文件系统要求一个块4K,那么就将文件打散成为1000个小块),再写进硬盘里面,过程中没有区分数据/metadata的。每个块最后会告知你下一个要读取的块的地址,然后一直这样顺序地按图索骥,最后完成整份文件的所有块的读取。所以无论系统性能多么强,都只能按顺序一个块一个块的读取,只有读完前一个块,才能开始读取下一个块。读写效率就成了最大的瓶颈。
但是对象存储不同,是把将元数据独立了出来,元数据里写明了数据的所有属性,包括打散后的每个块所存储的位置。对象存储将元数据和数据进行了分开存储,这样只要读取到了元数据,就能找到所有的数据块,并可以同时对数据块进行读取,大大提高了数据处理的效率。
对象存储中用来存储元数据的节点是控制节点,称为元数据服务器(服务器+对象存储管理软件),里面主要负责存储对象的属性(主要是对象的数据被打散存放到了那几台分布式服务器中的信息);负责存储数据的分布式服务器叫做OSD,主要负责存储文件的数据部分。当用户访问对象,会先访问元数据服务器,元数据服务器只负责反馈对象存储在哪些OSD,假设反馈文件A存储在B、C、D三台OSD,那么用户就会再次直接访问3台OSD服务器去读取数据。这时候由于是3台OSD同时对外传输数据,所以传输的速度就加快了。当OSD服务器数量越多,这种读写速度的提升就越大,通过此种方式,实现了读写快的目的。
另一方面,对象存储软件是有专门的文件系统的,所以OSD对外又相当于文件服务器,那么就不存在文件共享方面的困难了,也解决了文件共享方面的问题。
3、对象存储结构
根据对象存储原理所讲,对象存储的核心就是数据通路(数据读、写)和控制通路(元数据)进行分离,并且基于对象存储设备(OSD)构建存储系统。
OSD和块存储的不同不在于存储介质的不同,而在于提供的接口不同。OSD提供的主要功能是数据存储和安全访问。三个大的功能项如下:
1)数据存储:OSD管理对象数据,并将它们放置在标准的磁盘系统上,OSD不提供块接口访问方式,Client请求数据时用对象ID、偏移进行数据读写
2)智能分布:OSD用其自身的CPU和内存优化数据分布,并支持数据的预取。由于OSD可以智能地支持对象的预取,从而可以优化磁盘的性能。
3)每个对象元数据的管理:OSD管理存储在其上对象的元数据,该元数据与传统的inode元数据相似,通常包括对象的数据块和对象的长度。而在传统的NAS系统中,这些元数据是由文件服务器维护的,对象存储架构将系统中主要的元数据管理工作由OSD来完成,降低了Client的开销。
MDS(元数据存储服务器)控制Client与OSD对象的交互,主要提供以下3个功能:
1)对象存储访问(文件读写的权限管理):MDS构造、管理描述每个文件的分布、视图,client可以直接访问对象,MDS为client提供访问对象的能力,OSD接收到请求后先验证该请求的能力,然后才可以访问。
2)对象存储文件和目录的访问管理(文件目录的管理和对象的访问控制):MDS在存储系统上构建一个文件结构,包括限额控制、目录和文件的创建和删除、访问控制等
3)client cache一致性:为了提高Client性能,在对象存储系统设计时通常支持Client方的Cache。由于引入Client方的Cache,带来了Cache一致性问题,MDS支持基于Client的文件Cache,当Cache的文件发生改变时(例如文件权限修改),将通知Client刷新Cache,从而防止Cache不一致引发的问题。
Client(对象存储客户端)为了有效支持Client支持访问OSD上的对象,需要在计算节点实现对象存储系统的Client,通常提供POSIX文件系统接口,允许应用程序像执行标准的文件系统操作一样。
4、对象存储文件读、写流程
客户端应用发出读请求--------文件系统向元数据服务器发送请求,获取要读取的数据所在的OSD--------然后直接向每个OSD发送数据读取请求-----OSD得到请求后,判断要读取的Object,并根据此Object的认证方式,对客户端进行认证,如果客户端得到收授权,则将Object的数据返回给客户端--------文件系统收到OSD返回的数据以后,读操作完成。
客户端发出 写请求---------client向MDS发出报文,咨询权限------MDS返回权限后client将写数据报文发送至MDS和OSD-------OSD收到请求,处理后返回报文,更新元数据,MDS同步更新元数据,如果涉及cache,会通知client同步cache--------cient收到返回的报文,写操作完成。
5、对象存储文件系统的关键技术
1)分布的元数据服务
传统的元数据主要提供两个服务,1是VFS文件目录,主要提供数据结构的拓扑图,包含文件名和文件目录;2是组织物理存储介质的数据分布inode(索引)。
对象存储将逻辑视图和物理视图分开,避免了文件服务器负载过多的性能瓶颈。元数据的VFS部分通常是元数据服务器的10%的负载,剩下的90%工作(inode部分)是在存储介质块的数据物理分布上完成的。
在对象存储结构,inode工作分布到每个智能化的OSD,每个OSD负责管理数据分布和检索,这样90%的元数据管理工作分布到智能的存储设备,从而提高了系统元数据管理的性能。另外,分布的元数据管理,在增加更多的OSD到系统中时,可以同时增加元数据的性能和系统存储容量。
通俗来讲,一个告诉你对象存储的文件目录,一个告诉你对象具体存储在哪个服务器上了。
2)并发数据访问
对象存储体系结构定义了一个新的、更加智能化的磁盘接口OSD。OSD是与网络连接的设备,它自身包含存储介质,如磁盘或磁带,并具有足够的智能可以管理本地存储的数据。计算结点直接与OSD通信,访问它存储的数据,由于OSD具有智能,因此不需要文件服务器的介入。如果将文件系统的数据分布在多个OSD上,则聚合I/O速率和数据吞吐率将线性增长,对绝大多数Linux集群应用来说,持续的I/O聚合带宽和吞吐率对较多数目的计算结点是非常重要的。