暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

对象存储

臻云观智 2018-08-14
250

    块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称OSD。

    首先,我们介绍这两种传统的存储类型。通常来讲,所有磁盘阵列都是基于Block块的模式(DAS),而所有的NAS产品都是文件级存储。

1、块存储       

        以下列出的两种块存储类型:

       1) DAS(Direct Attach STorage):是直接连接于主机服务器的一种储存方式,每一台主机服务器有独立的储存设备,每台主机服务器的储存设备无法互通,需要跨主机存取资料时,必须经过相对复杂的设定,若主机服务器分属不同的操作系统,要存取彼此的资料,更是复杂,有些系统甚至不能存取。通常用在单一网络环境下且数据交换量不大,性能要求不高的环境下,可以说是一种应用较为早的技术实现。

       2)SAN(Storage Area Network):是一种用高速(光纤)网络联接专业主机服务器的一种储存方式,此系统会位于主机群的后端,它使用高速I/O 联结方式, 如 SCSI, ESCON 及 Fibre- Channels。一般而言,SAN应用在对网络速度要求高、对数据的可靠性和安全性要求高、对数据共享的性能要求高的应用环境中,特点是代价高,性能好。例如电信、银行的大数据量关键应用。它采用SCSI 块I/O的命令集,通过在磁盘或FC(Fiber Channel)级的数据访问提供高性能的随机I/O和数据吞吐率,它具有高带宽、低延迟的优势,在高性能计算中占有一席之地,但是由于SAN系统的价格较高,且可扩展性较差,已不能满足成千上万个CPU规模的系统。

2、文件存储

      通常,NAS产品都是文件级存储。  NAS(Network Attached Storage):是一套网络储存设备,通常是直接连在网络上并提供资料存取服务,一套 NAS 储存设备就如同一个提供数据文件服务的系统,特点是性价比高。例如教育、政府、企业等数据存储应用。

     它采用NFS或CIFS命令集访问数据,以文件为传输协议,通过TCP/IP实现网络化存储,可扩展性好、价格便宜、用户易管理,如目前在集群计算中应用较多的NFS文件系统,但由于NAS的协议开销高、带宽低、延迟大,不利于在高性能集群中应用。

     介绍完块存储和文件存储以后,终于轮到对象存储出场,那对象存储又是如何克服块存储和文件存储的短板?

总体上来讲,对象存储同兼具SAN高速直接访问磁盘特点及NAS的分布式共享特点(扩展性)核心是将数据通路(数据读或写)和控制通路(元数据)分离,并且基于对象存储设备(Object-based Storage Device,OSD)构建存储系统。每个对象存储设备具有一定的智能,能够自动管理其上的数据分布。完美适配当前互联网场景下的各种爆炸式数据需求,具体表现为:

1、扁平化的命名空间

     将数据以对象(Object)形式存储在以桶(Bucket)为命名空间的两级结构中,通过新增Bucket方式来横向扩展命名空间,同时通过在Bucket中不断新增Object方式来实现海量数据的存储,这种扁平化的数据管理模型克服了目录树管理的不足,实现了海量数据简单有效的管理。需要注意的是Bucket的名称全局唯一,通过桶名称(Bucket name)+对象的键名(Key name)来定位一个对象的最终存储路径。

2、分布式构架设计

     借助扁平化的管理模型设计,使得整个对象存储系统可以按命名空间规则进行底层数据存储的分区,借助一些哈希算法最终将需要存储的数据按分区规则均匀分布到多个主机的多块磁盘上,从而实现数据的分布式存储,从而解决了物理硬件的扩容及性能问题,为海量数据的存储铺平道路。

3、通用化的接口标准

     在解决了海量数据管理和硬件短板的问题之后,对象存储还要克服一个关键的问题:如何实现通用接口标准?通用接口标准对一个对象存储系统来说至关重要,这个是整个系统与外围系统打交道的重要窗口。如何兼容各种外围系统,去适配各种开发语言,形成一套围绕对象存储系统的生态标准?同样遵循“Simple is best!”思想,互联网时代HTTP大行其道,到处都通行的RESTful风格被对象存储“一眼相中”,目前主流的对象存储在接口标准的实现上都提供RESTful风格的API,同时也衍生出各种语言的SDK,当然有些对象存储也实现了RPC、SOAP等标准,这里篇幅有限就不再赘述。

4、(非)结构化数据与对象存储

     什么是结构化数据和非结构化数据?以大家熟知的关系型数据库场景为例:

将一个人的属性抽象出来,分为姓名(name),年龄(age),住址(address),邮箱(email)几个标签,之后将这些信息存储到数据库中,那么某个人将对应到数据库里的一条记录。众所周知,我们现在熟知的数据库主要是关系型数据库,如果能够将数据按关系模型进行存储和管理,那么这一类数据就是结构化数据。


     对象存储技术的出现和大量自动化管理技术的产生,使得“超级数据图书馆”不再是人类遥不可及的梦想。对象存储系统(Object-Based Storage System)改进了SAN和NAS存储的劣势,保留了NAS的数据共享等优势,通过高级的抽象接口替代了SCSI存储块和文件访问接口(不同地区的用户访问不同的POSIX文件系统,不仅浪费时间,而且让运维管理变的更复杂。相对而言,分布式存储系统的优势明显。在分布式存储系统上做应用开发更便利,易维护和扩容,自动负载平衡。以RESTful HTTP接口代替了POSIX接口和QEMU Driver接口),屏蔽了存储底层的实现细节,将NAS垂直的树形结构改变成平等的扁平结构,从而提高了扩展性、增强了可靠性、具备了平台无关性等重要存储特性。(Erasure Code:是将文件转换成一个碎片集合,每一个碎片很小,碎片被打散分布到一组服务器资源池里。只要存留的碎片数量足够,就可以合成为原本的文件。这可以在保持原本的数据健壮性的基础上大大减少需要的存储空间。不过Erasure Code并非适应所有的场景,尤其不适合网络延迟敏感的业务(不过Erasure Code并非适应所有的场景,尤其不适合网络延迟敏感的业务)

举个例子:

     如果上面需要存储的数据新增了一个相片(photo)字段,用于存储用户的相片数据,因为相片数据无法通过关系型数据进行描述,所以一般存储相片都是以二进制方式(非结构化方式)存储在关系数据库中,但是传统数据库不是万能。当需要比较多张相片的相似度,并删除重复相片,特别是需要管理海量相片的时候,传统的关系型数据库,会让你觉得异常痛苦。

对象存储正是为了弥补传统关系型数据库在管理非结构化数据方面的不足。在对象存储模型中,将每一条存储在其中的非结构化数据抽象成一个“对象”,一个对象(Object)主要由下面四部分组成:

键名(Key):用于标识对象的名称,通过Bucket name+ Key的组合来确定对象最终存储路径。

键值(Value):用于存储对象的内容数据。

访问控制列表(ACL):标识对象可以被哪些用户或者用户组访问。

元数据(Metadata):用于以key-value形式存储对象其他额外信息,比如对象内容的MD5校验值,对象的属主(owner),atime/ctime/mtime等。

通过上面的介绍,相信大家已经对对象存储已经有所了解。那么如何解决快速删除重复相片的问题?只需要将每张相片存储在对象存储中,同时以元数据方式记录对应的MD5值,在不读取图片内容的情况下,通过比较每个对象的MD5值是就能快速的筛选出重复的相片。

     对象是数据和自描述信息的集合,是在磁盘上存储的基本单元。对象存储通过简化数据的组织形式(如将树形的“目录”和“文件”替换为扁平化的“ID”与“对象”)、降低协议与接口的复杂度(如简化复杂的锁机制,确保最终一致性),从而提高系统的扩展性以应对信息爆炸时代海量数据的挑战。同时对象的智能自管理功能也能有效降低系统维护复杂度,帮助用户降低整体拥有成本(TCO)。


文章转载自臻云观智,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论