深入理解对象存储(OSD)


1、对象存储的起源


存储局域网(SAN)和网络附加存储(NAS)是目前两种主流网络存储架构,在DAS和SAN中,存储资源就像一块一块的硬盘,直接挂载在主机上,我们称之为块存储

而在NAS中,呈现出来的是一个基于文件系统的目录架构,有目录、子目录、孙目录、文件,我们称之为文件存储。文件存储的最大特点,就是所有存储资源都可以通过多级路径方式进行访问

20世纪末,随着互联网的爆发,数据存储需求发生了两个重大的变化:

一是数据量爆炸式增长:Web应用的崛起、社交需求的刺激,极大地推动了多媒体内容创作和分享。人们开始上传大量的照片、音乐、视频,加剧了数据量的爆发。此外,信息技术的发展、企业数字化的落地,也产生了大量的数据,不断吞食着存储资源

二是非结构化数据的占比显著增加:例如图像、音频、视频、Word文章等

面对这两大趋势,由于技术本身和架构的限制,仅具备PB级扩展能力的块存储(SAN)和文件存储(NAS)显得有些无能为力

于是,对象存储应运而生

1996年,美国卡内基梅隆大学提出将对象存储作为一个研究项目,随后,加州大学伯克利分校也有推出类似的项目

2006年,美国Amazon公司发布AWS S3(Simple Storage Service)服务,正式将对象存储作为一项云存储服务,引入云计算领域,从此开启了对象存储的黄金时代

扫描二维码关注公众号,回复: 17381484 查看本文章

2、什么是对象存储


存储局域网(SAN)和网络附加存储(NAS)是目前两种主流网络存储架构,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device),简称OSD

对象存储,也称为“面向对象的存储”、“云存储”。它综合了网络附加存储(NAS)和存储局域网(SAN)的优点,同时具有SAN的高速直接访问和NAS的分布式数据共享等优势,提供了具有高性能、高可靠性、跨平台以及安全的数据共享的存储体系结构

对象存储允许将计算基础架构与存储需求分离。可以在对所有数据进行存储的同时无需监控存储,因此方便扩展并向云中的集群添加节点

对象存储核心是将数据通路(读写)和控制通路(元数据)分离,并且基于对象存储设备构建存储系统,每个对象存储设备具有自己的职能,能够自动管理其上的数据分布

对象存储是一种基于对象的存储设备,具备智能、自我管理能力,通过Web服务(如RUST、SOA、微服务)实现对象的读写和存储资源的访问

对象存储系统包含两种数据描述:容器(Bucket)、对象(Object)。容器和对象都有一个全局唯一的ID。对象存储采用扁平化结构管理所有数据,用户/应用通过接入码(AccessKey)认证后,只需要根据ID就可以访问容器/对象及相关的数据(Data)、元数据(Metadata)和对象属性(Attribute)

对象存储本质上就是一个Key-Value结构,Key是文件的URL路径,Value是对应的文件,没有传统文件系统那种目录树的结构,不能直接打开修改文件,只能先下载、修改,再上传,所以不支持append和truncate操作,操作接口比较简单,主要接口命令有PUT/GET/DELETE等

云厂商将对象存储称为云存储,不同云厂商对它有不同的命名。例如阿里云叫OSS,腾讯云叫COS,华为云叫OBS,百度云叫BOS等

3、对象存储与块存储、文件存储


在这里插入图片描述

  • 相同点

    对象存储的底层硬件介质,依然是硬盘,和块存储、文件存储没有区别

  • 不同点

    块存储:操作对象是磁盘。存储协议是SCSI、ISCSI、FC,以SCSI为例,主要接口命令有Read、Write、Read Capacity、Inquiry等

    文件存储:操作对象是文件和文件夹。存储协议是NFS、SAMBA(SMB)、POSIX等。以NFS为例,文件相关的接口命令包括:Read、Write、Create、Remove、Rename、Lookup、Access等;文件夹相关的接口命令包括:Mkdir、Rmdir、Readdir等

    对象存储:主要操作的是对象(Object)。存储协议是S3、Swift等,以S3为例,主要接口命令有PUT、GET、DELETE等。对象存储没有那种目录树的概念,在对象存储系统里,你不能直接打开/修改文件,只能先下载、修改,再上传文件

更多关于NAS与SAN的介绍见文章:传送门

4、对象存储架构


对象存储架构主要由对象存储设备(OSD)、元数据服务器(MDS)、对象存储系统的客户端(Client)三部分组成

在这里插入图片描述

对象存储设备(OSD)呈现出来的是一个个桶(Bucket),你可以往桶里面放对象(Object)

4.1、对象(Object)


对象(Object)是系统中数据存储的基本单位,一个对象实际上就是文件的数据和一组属性信息(MetaData)的组合

在传统的存储系统中用文件或块作为基本的存储单位,块设备要记录每个存储数据块在设备上的位置,而对象维护自己的属性,从而简化了存储系统的管理任务,增加了灵活性

对象的大小可以不同,可以包含各种数据结构,如文件、数据库表等。在存储设备中,所有对象都有一个唯一标识,OSD通过对象标识访问该对象

对象由三个部分组成:Key、Value、Metadata

在这里插入图片描述

  • Key

    Key即为对象的全局唯一标识,可以理解为文件名(路径),主要用于检索对象,服务器和用户不需要知道数据的物理地址,也能通过它找到对象。这种方法极大地简化了数据存储。Key类似一个URL地址,如果该对象被设置为“公开”,所有互联网用户都可以通过这个地址访问它

  • Value

    Value即为数据本身

  • Metadata

    Metadata为元数据,它类似对象(数据)的标签(属性),可以是对象的各种描述信息。例如一张人物图片,它的元数据可以是姓名、性别、年龄、拍摄地点、拍摄时间等。在传统的文件存储里,这类信息属于文件本身,和文件一起存储。而对象存储中,元数据是独立出来的,不在数据内部封装

4.2、对象存储设备(OSD)


每个OSD都是一个智能设备,具有自己的存储介质、处理器、内存以及网络系统等,负责管理本地的Object,是对象存储系统的核心

OSD同块设备的不同不在于存储介质,而在于两者提供的访问接口。OSD的主要功能包括数据存储和安全访问

OSD提供三个主要功能:

  • 数据存储

    OSD管理对象数据,并将它们放置在标准的磁盘系统上,OSD不提供块接口访问方式,Client请求数据时用对象ID、偏移进行数据读写

  • 智能分布

    OSD用其自身的CPU和内存优化数据分布,并支持数据的预取。由于OSD可以智能地支持对象的预取,从而可以优化磁盘的性能

  • 管理每个对象元数据

    OSD管理存储在其上对象的元数据,该元数据与传统的INode元数据相似,通常包括对象的数据块和对象的长度。而在传统的NAS系统中,这些元数据是由文件服务器维护的,对象存储架构将系统中主要的元数据管理工作由OSD来完成,降低了Client的开销

4.3、元数据服务器(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不一致引发的问题

4.4、对象存储系统的客户端(Client)


为了有效支持Client支持访问OSD上的对象,需要在计算节点实现对象存储系统的Client。现有的应用对数据的访问大部分都是通过POSIX文件方式进行的,对象存储系统提供给用户的也是标准的POSIX文件访问接口。接口具有和通用文件系统相同的访问方式,同时为了提高性能,也具有对数据的Cache功能和文件的条带功能。同时,文件系统必须维护不同客户端上Cache的一致性,保证文件系统的数据一致

文件系统读访问流程:

  • 客户端应用发出读请求
  • 文件系统向元数据服务器发送请求,获取要读取的数据所在的OSD
  • 然后直接向每个OSD发送数据读取请求
  • OSD得到请求以后,判断要读取的Object,并根据此Object要求的认证方式,对客户端- 进行认证,如果此客户端得到授权,则将Object的数据返回给客户端
  • 文件系统收到OSD返回的数据以后,读操作完成

5、对象存储的特性


  • 容量无限大、灵活可扩展

    对象存储的所有业务、存储节点采用分布式集群方式工作,各功能节点集群都可以独立扩容,且扩容过程中业务零中断。从理论上来说,某个对象存储系统或单个桶(Bucket),并没有总数据容量和对象数量的限制

    对象存储对外提供更抽象的对象接口,而不是SCSI或文件接口。与SAN存储以逻辑扇区为单位的较细粒度的固定IO(512B~4KB)不同,对象存储IO粒度更有弹性,支持几个字节(B)到数万亿字节(TB)范围内的任意对象大小,使得业务可根据需要灵活的分割数据

    对象存储以对象ID为基础,扁平化的管理所有对象和桶,根据对象ID便可直接访问数据,解决了NAS复杂的目录树结构在海量数据情况下的数据查找耗时长的问题,这使得对象存储具备极强的扩展性,能够轻松实现单一命名空间内支持百亿级文件的存储

  • 数据使用方便,安全可靠

    用户只需一个凭证(Key),便可以访问(HTTP)指定桶(Bucket)中的所有数据(对象)。大部分云厂商都有自己的图形化界面客户端工具,用户存取数据就像使用网盘一样

    对象存储采用了分布式架构,对数据进行多设备冗余存储(至少三个以上节点),数据分片存储在不同硬盘上,实现了异地容灾和资源隔离

    数据访问方面,所有的桶和对象都有ACL等访问控制策略,所有的连接都支持SSL加密,OBS系统会对访问用户进行身份鉴权

  • 基于策略的自动化管理,用户成本低

    由于云环境中的数据往往是动态、快速增长的,所以基于策略的自动化将变得非常重要。对象存储支持从应用角度基于业务需求设置对象/容器的属性(元数据)策略,如数据保护级别,保留期限,合规状况,远程复制的份数等。这使得对象存储具备云的自服务特征同时,有效的降低运维管理的成本,使得客户在存储容量从TB增长到ZB时,运维管理成本不会随之飙升

  • 基于SaaS模式的多租户技术

    多租户技术是实现如何在多用户环境下共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。多租户特性可以使用同一种架构,同一套系统为不同用户和应用提供存储服务,并分别为这些用户和应用设置数据保护、数据存储策略,并确保这些数据之间相互隔离

6、对象存储的应用场景


  • 图片和音视频等应用的海量存储

    对象存储可用于图片、音视频、日志等海量文件的存储。各种终端设备、Web网站程序、移动应用可以直接向对象存储写入或读取数据

  • 网页或移动应用的静态和动态资源分离

    利用海量互联网带宽,对象存储可以实现海量数据的互联网并发下载

  • 云端数据处理

    上传文件到对象存储后,可以配合媒体处理服务和图片处理服务进行云端的数据处理

  • 数据迁移

    数据快速、安全地迁移至对象存储,帮助客户降低存储成本,提高运维效率

  • 容灾备份

    对象存储不仅支持同城容灾,还支持跨区域异地容灾,防止用户数据丢失,业务长时间中断

7、国内常见的对象存储产品


  • 阿里云

    阿里云对象存储(Object Storage Service,OSS)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本

    官网:https://help.aliyun.com/zh/oss/

  • 腾讯云

    腾讯云对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。通过控制台、API、SDK和工具等多样化方式,用户可简单、快速地接入COS,进行多格式文件的上传、下载和管理,实现海量数据存储和管理

    官网:https://cloud.tencent.com/document/product/436

  • 华为云

    华为云对象存储服务(Object Storage Service,OBS)提供海量、安全、高可靠、低成本的数据存储能力,可供用户存储任意类型和大小的数据。适合企业备份/归档、视频点播、视频监控等多种数据存储场景

    官网:https://support.huaweicloud.com/obs/index.html


参考文章:
https://blog.csdn.net/zhanggqianglovec/article/details/104009464
https://zhuanlan.zhihu.com/p/555259241
https://zhuanlan.zhihu.com/p/166289089
https://blog.csdn.net/nihaoa50/article/details/88327178


猜你喜欢

转载自blog.csdn.net/weixin_55629186/article/details/134350297