【长篇原创连载】煮“九”谈“千”第十九回《无限扁平,对象通吃》
|
第十九回 无限扁平,对象通吃
诸君安好,如今清明刚过,正是春暖花开,草长莺飞的时候。前朝才子,踏青郊游之际,多蹴鞠投壶,行酒令,对对子,以助兴致。 今天咱们也凑个热闹,小欧请诸位猜个谜语,打一个IT专业术语,题目如下图。
耶,果然众位看官皆高人也,谜底就是一对大象,简称“对象”。 那么这个对象跟我大存储派门又有什么关系?且听在下慢慢道来。
对象存储协议是一种简化的存储协议,适于存储海量的、非结构化的、读多于写的数据。 SAN存储提供给应用的是一个LUN或者是一个卷,LUN和卷是面向磁盘空间的一种组织方式,上层应用要通过FC或者ISCSI协议访问SAN。SAN存储处理的是管理磁盘的问题,其它事情都要依靠上层的应用程序实现。 NAS存储提供给应用的是一个文件系统或者是一个文件夹,上层应用通过NFS和CIFS协议进行访问。文件系统要维护一个目录树。 相比于SAN和NAS存储,对象存储具有以下特点: 1. 舍弃目录树结构,结构扁平,近乎无限的容量扩展; 2. 更加智能的自管理特性; 3. 业界标准互联网协议,跨地域传输能力; 4. 更加符合面向互联网服务的存储,归档和备份需求。
既称之为对象存储,那么何谓对象? 对象是存储的基本数据单位。用户上传的数据以对象的形式存储系统中。对象的属性包括以下几部分: Key:对象的名称,为经过UTF-8编码的长度大于0且不超过1024的字符序列,一个桶(这个概念稍后说明)里的每个对象必须拥有唯一的对象名称。用户可使用桶名+对象名来存储和获取对应的对象。 Metadata:对象元数据,用来描述对象的信息。元数据又可分为系统元数据和用户元数据。系统元数据由系统产生,在处理对象数据时使用。系统元数据包括:Date, Content-length, last-modify, Content-MD5等。用户元数据由用户上传对象时指定,是用户自己对对象的一些描述信息。这些元数据以键值对(Key-value)的形式随http头域一起上传到系统。 Data:数据,即对象的数据内容。 通常,我们将对象等同于文件来进行管理,但实际上对象存储中并没有文件系统中的文件和文件夹概念。为了使用户更方便进行管理数据,通常采用模拟文件夹的形式。流入在对象的名称中增加“/”。这样abc/123.jpg,abc就可以模拟成文件夹了,123.jpg就可以模拟成文件名了,而完整的对象名称(key)仍然是abc/123.jpg。
当今对象存储主要分为两派,一为AWS S3,一位Openstack Swift,都是漂洋过海来我中土大地的“洋和尚”,两者各有千秋。 S3(Simple Storage Service)协议由Amazon提出和实现,是云存储领域的事实标准。S3协议基于HTTP协议,是一种成熟的REST(REpresentational State Transfer)风格的协议。REST风格的协议遵循并利用了HTTP协议的设计原则,具有简单、可靠、无状态的特征,并天然的易于通过网络访问。 OceanStor 9000兼容S3接口,采用桶(Bucket)/对象(Object)模型。对外提供基于Http/Https的Restful接口,使用URL定位和使用自己的数据。概念说明如下: 桶(Bucket)桶是一种容器,用于存放对象,可视为能够通过网络访问的目录。桶不支持嵌套,因此避免了有层次的容器结构,以及随之带来的复杂性。 对象(Object)对象即是数据,可视为能够通过网络访问的文件。对象总是存放于一个桶中。 帐户想要使用对象存储服务(兼容Amazon S3接口),必须预先开通帐户。帐户就是资源的所有者,可以对桶进行增、删、查、配置属性等操作,也可以对对象进行上传、下载、查询等操作。 用户帐户可以创建、管理用户,用户从属于帐户。帐户可通过赋予用户各种权限,来控制用户对存储资源的使用。 概念之间的关系如下图所示。
对象存储服务(兼容OpenStack Swift接口)拥有分布式、可扩展的结构,对外提供RESTful API,所有资源都可通过URL定位。数据用Account/Container/Object的非网状结构组织,可支持存储海量的数据。概念说明如下: Account拥有Account是使用对象存储服务(兼容OpenStack Swift接口)的前提条件。Account就是资源的所有者和管理者,使用Account可以对Container进行增、删、查、配置属性等操作,也可以对Object进行上传、下载、查询等操作。 在对象存储服务(兼容OpenStack Swift接口)中,Account也被抽象为顶层的资源容纳者,可将Account视为根目录,用于存放该Account的数据,各Account的数据存放在各自的Account内。 ContainerContainer即是一种容器,用于存放对象,可视为能够通过网络访问的目录。Container不支持嵌套,因此避免了有层次的容器结构,以及随之带来的复杂性。 ObjectObject即对象,也就是数据,可视为能够通过网络访问的文件。Object总是存放于一个Container中。 概念之间的关系如下图所示。 图1 Acount、Container和Object的关系 好了,今天就说到这,关于对象存储更多事,且听下回分解。 |
本帖被以下专题推荐:
- · 煮“九”谈“千”话存储|




