En 400-6655-581
5
返回列表
> 资源中心 > 数据安全 | 大数据生态之对象存储

数据安全 | 大数据生态之对象存储

2020-05-14浏览次数:885

导读:我们前面的文章讨论过大数据存储组件中的HDFS和KUDU,这篇文章将会介绍一下对象存储,这也是大数据生态圈一个新的领域。本文将会从对象存储的概念,内部机制,发展情况以及相关产品展开,对对象存储进行一个较为全面的介绍,同时也为后续文章介绍大数据中的对象存储Apache Ozone组件进行一些铺垫。





什么是对象存储?



谈起存储,都不陌生,能耳熟能详的有硬盘,U盘,磁带,这些都是常见的存储设备,可以满足个人或者企业的小规模数据存储需求。还有一类存储设备,提供了一些网络扩展和功能增强,比如SAN和NAS,可以满足企业一些比较大规模数据的存储需求。


那今天讨论的对象存储,它又是什么呢?是像下面这种把“对象”存到类似银行的东西里吗?




显然不对,这只是一个调侃,但这种理解某种程度上的也有一定正确性,不过对象存储存的不是女朋友或者男朋友,而是各式各样的数据(不限制其类型数量的数据,我们称之为Object),存储介质也不是银行,而是对象存储设备(Object-based Storage Device,简称OSD)。除此之外,为了完成对象存储的过程,还需要对象存储服务(Object-based Storage Service简称OSS),元数据服务器(Metadata Server,简称MDS)以及对象存储客户端(Client)配合完成。


与SAN和NAS一样,对象存储也是一种网络存储架构。


SAN(存储局域网)特点是采用SCSI快I/O命令集,通过磁盘或FC(Fiber Channel)级的数据访问提供高性能的随机I/O个数据吞吐率,它具有高宽带、低时延的优势,但这需要专业的硬件支持,所以价格非常高,并且不易扩展,目前只在部分大型企业中进行使用。


NAS(网络附加存储)采用NFS或CIFS命令集访问数据,以文件为传输协议,通过TCP/IP实现网络化存储,可扩展行好、价格便宜、用户易管理,特别受到Windows系统用户的欢迎。像常用的FTP服务器目录,企业共享文件夹,网站内容存储这类场景,大都可以使用NAS服务进行解决。但NAS需要有文件系统层的支持。


对于对象存储而言,它既有SAN的优点,即高速直接访问存储设备上的数据;又有NAS的优点,数据可以分布式存储,共享,从而实现了高性能,高可靠性的跨平台数据存储共享体系结构,因此特别容易进行扩展。


对象存储的核心是将控制流(元数据记录)与数据流分离(数据读写),控制端只负责记录元数据,而由每个对象存储设备自行管理其上的数据分布,并完成读写过程。这样有几个好处:

 

1. 降低了控制端的工作负载,控制端只需与OSD交互(实际上由OSS服务层代为完成),因此当存储容量特别大时,对象存储系统也可以轻松应对,同时也极方便扩展。


2. 不需要通过文件系统支持,OSD直接在存储介质上进行I/O管理,不受LBA层寻址效率的影响,大大提升的了数据读写效率。


3. 不限制数据类型。由于不需要文件系统的支持,因此各类型的数据都可以作为对象(Object),存储进去。


4. 高容错性,OSD自动完成对象的管理与冗余复制,控制端并不需要知道具体的数据位置和复制策略,当某一位置发生故障时,OSD自动返回新的位置数据给到控制端,控制端几乎无感。


5. 访问方式统一,操作简单。由于去掉了对文件系统的依赖,同时提升相关数据存取效率,因此数据存取接口基本都统一为Rest方式调用,降低了使用的复杂度。


 


对象存储的工作机制




对象存储存储的架构如下,一个对象存储系统,由对象存储客户端(Client),对象存储服务(OSS),元数据服务器(MDS),对象存储设备OSD组成,此外还有大大小小存在于OSD中的对象Object。



对象(Object):所有被存储的目标都可以被称作对象,它是数据存储的基本单位,一个对象大小可以从几十字节到几PB(看OSD的支持能力),一个对象包括数据和数据属性两部分,数据属性可以是数据结构,数据描述,冗余份数等等,对象自己维护自己的数据属性。此外,一个对象有一个特定的对象标识,对象通过对象标识和数据属性与OSD进行交互。


对象存储设备(OSD):一个对象存储设备不单单是一块简单的硬盘,一般来说其是一个智能设备,自动管理其上对象的数据分布,数据读写,并进行相关的性能优化。对象存储设备可以有自己的CPU,内存,存储介质和网络;也可以是在标准磁盘系统上通过软件的虚拟化特性演化出一套智能系统。


为了进一步提升效率,OSD中只分为两层,其中第一层为Bucket, 第二层为Key。其中Bucket类似数据集,Key则是具体的数据。OSD只需获取数据的Bucket ID,Key,以及偏移量,即可定位到具体的数据。


对象存储服务(OSS):OSS是Client与OSD交互的中间层服务,这个请和阿里云的对象存储区别开来,虽然阿里云对象存储也叫OSS。对象存储服务负责收集OSD反馈的信息,并通过文件锁,AccessKey等方式对Client进行认证,并控制其读写。


元数据服务器(MDS):元数据服务器为客户端提供元数据,主要是文件的逻辑视图,包括文件与目录的组织关系、每个文件所对应的OSD等。同时元数据服务器支持Client的Cache,当Cache的文件发生改变时,将通知Client端刷新Cache,从而避免Cache不一致引发相关问题。


对象存储客户端(Client):对象存储客户端包含计算节点上某些特殊工具和接口,依次来访问对象存储系统,比如命令行等。

数据访问流程如下:

 

1. Client首先向MDS查询数据逻辑视图;


2. MDS通过OSS服务查询OSD中数据的状态信息;


3. MDS获取到OSD中数据的相关信息(OSD id, Bucket ID, Key与偏移量等);


4. MDS更新Client保存的Cache信息;


5. Client向OSS提交客户端认证,比如AccessKey;


6. 认证通过,OSS返回OSD与Object相关信息;


7. Client通过Rest接口访问对应的数据。

 



对象存储的发展简史




虽然对象存储这一名词近些年才大量地出现在人们视线中,但其发展过程可谓源远流长,甚至比大数据技术的历史还要悠久,引用硅谷技术公司顾问Philippe Nicolas公开的一张对象存储统计图看一下:



1998年开始,第一个做对象存储的公司FilePool标志着对象存储技术领域的诞生,到现在已经有20余年的历史。这足足比Hadoop的历史还要多5年(Google GFS 论文2003年发表)。现在做对象存储的公司已经数量非常众多。


目前的对象存储技术分为两大阵营,即开源产品与商业化产品。其中开源产品以Ceph,OpenIO, OpenStack Swift一类为主,特别是Hortonworks公司于2014年推出了Apache Ozone产品,提供S3接口,从而让在大数据中使用对象存储变成了可能。商业化产品则以各家存储企业以及云厂商推出的对象存储方案为主,例如阿里云OSS, 华为云OBS, 微软 Azure等。


虽然对象存储发展了这么久,各家的产品也五花八门,但是对象存储的设计模式和架构各家都高度的统一,差异只是在Client层做了一些功能丰富,例如增加了一些接口。在后续的文章中,我们会进一步介绍一下Apache Ozone。