《一文搞懂对象存储》

对象存储的应用
      可以理解为一个海量的存储空间,适合存储互联网上产生的图片、短视频、音频等海量非结构化数据。您可以通过API在任何时间、任何地点访问对象存储里的数据。常用于互联网业务网站搭建、动静资源分离、CDN加速等业务场景。


什么是对象存储

  • 块存储
          块存储的典型架构是SAN,其采用SCSI协议,利用磁盘或FC提供高性能的随机I/O和吞吐率,具有高性能、高带宽、低延迟、随机读写的优势,你可以像使用物理硬盘一样格式化并建立文件系统来使用块存储。块存储可以适用于绝大部分通用业务场景数据存储
          该架构的成本较高、扩展性差,不利于数据/文件共享。非集群情况下,主机之间无法共享数据;不同的操作系统因采用的文件系统的不同而无法进行文件共享

  • 文件存储
          文件存储的典型架构是NAS,需要利用标准的文件访问协议来进行数据访问,如Linux系统的NFS协议(目前应用较为广泛),Windows系统的SMB协议(又称为CIFS协议)。可以通过设置权限让不同的客户端同时访问同一份文件。NAS架构具备较好的扩展性、造价便宜、易于管理。但该架构的协议开销较高、带宽低、延迟大,一般适用于企业部门之间文件共享,不适用于高性能集群环境

  • 块存储和文件存储的共性
          在块存储和文件存储中,用文件或者块作为基本的存储单位,块设备需要记录每个数据块在设备上的位置信息。
          一个文件包含了属性/元数据(例如文件大小、创建时间、修改时间、存储路径等)和内容数据。非对象存储中,一个文件的存储是将文件的元数据和数据一起的。其存储过程大致如下:
            1. 参照当前文件系统的最小块限制,将文件分块;
            2. 将所有分块写入硬盘,每个块中将包含与其关联的块信息,如地址。
          与之对应,一个文件的读操作则需要首先找到组成该文件的第一个块,然后从中获取到下一个块的地址,进而读取下一个块,… , 如此按图索骥的持续读取,最终完成一个文件的读取操作

  • 对象存储
          对象存储克服了块存储与文件存储的缺点,同时具有SAN的高速直接访问和NAS的分布式数据共享优势。
          对象存储中对象将是数据存储的基本单位,每个对象由数据和数据属性集(元数据和用户自定义属性)组成。数据属性集可以根据应用的需求进行设置,包括数据分布、服务质量等。对象存储中,数据属性集部分被存放在控制节点也叫元数据服务器(元数据+对象存储管理软件),数据部分则被存放在分布式集群对象存储服务器OSD中。当用户访问一个对象时候,首先需要访问元数据服务器,判断当前对象是否存在,获取当前对象的存储位置信息,如当前对象分散存储在哪几个OSD中,而后直接访问对应的OSD服务器即可获取一个对象的完整信息。由于获取对象数据的方式是并行处理过程,故数据的传输速率相当给力。对象的写操作也是同样的道理。通过此种方式,对象存储可以实现高效读写操作
          至于对象存储的便于共享特性,我们可以从对象存储管理软件入手。对象存储管理软件依赖于特定的文件系统,故OSD对外有相当于文件服务器,所以文件共享问题迎刃而解。
          对象存储中每个对象都包含三个属性:
          1. 数据本身 Data;
          2. 可扩展的元数据(Metadata + Attributes):由对象创建者指定,主要是对1中数据本身的描述信息;
          3. 全局唯一标识符 OID
    在这里插入图片描述


对象存储与块存储的区别

  • 数据存储方式
          块存储中,一个文件将会被分割成多个数据块,每一个数据除去拥有一个地址标识之外没有额外的信息来提供更多的关于该数据块的上下文。
          相对于块存储,对象存储不会对文件进行分割,而是将整个文件作为一个存储单元来存放,这个存储单元即是对象。对象存储没有对文件类型或者数量进行明确的限定,这些特性是的其具备更强大的存储能力和灵活性。对象存储在高可用和持久性上拥有极大的优势。比如,音频、视频、图片存储。
  • 是否提供增量编辑功能
          然而,对象存储无法提供增量编辑功能,一个对象即是一次操作的最小单元。一旦对象的一部分需要被修改,则整个对象都将被访问、更新,并重新上传,这可能会影响性能。
          二者的另一个不同之处在于,块存储可以被挂载到文件系统访问而对象存储则不建议这么做,否则会显著降低性能。此外,块存储不存在对象存储所需的对象管理开销(如重新映射卷)
  • 数据一致性
    对象存储因其分布式特性,提供最终一致性。而块存储提供的是强一致性,这也是类似事务数据库之类的软件需要依赖于块存储的根本原因。
  • 存储对象
    对象存储更适用于不频繁变更的海量数据的存储,比如静态Web内容、备份或者存档的图像音频数据。

    二者差异示意图如下所示:

  1. 块存储与对象存储
    在这里插入图片描述
  2. 块存储与对象存储访问模型
    在这里插入图片描述

对象存储所解决的问题

  • 爆炸式增长数据的存储和访问
          为了解决这一问题,块存储系统需要随之扩展系统的存储容量。当一个块存储系统达到上百TB容量时候会面临什么问题?你可能会受到硬件基础设施的限制、遇到数据持久性问题,同时毫无疑问的,系统的管理开销将难以估算。
  • 高可用需求
          对象存储针对每一个对象一般提供至少三个冗余副本
  • 低成本
          如同大多数分布式系统,对象存储系统完全可以建立在一套廉价的基础设施之上,并且提供足够的稳定性、可用性和性能。

参考链接
  https://www.druva.com/blog/object-storage-versus-block-storage-understanding-technology-differences/

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python是一门支持面向对象编程的语言,它通过类(Class)和对象(Object)的概念实现了这一特性。以下是关于Python面向对象编程的一般理解: 1. **类(Class)**:类是一种模板或蓝图,用于创建具有相似属性和行为的对象。类定义了数据成员(如变量)和方法(函数),它们描述了对象的状态和行为。 2. **对象(Object)**:对象是类的实例,它是现实世界的一个实体。每个对象都具有特定的属性值,并能够执行其类中定义的方法。 3. **属性(Attribute)**:类中的变量就是对象的属性,它们可以存储数据。比如,一个人类对象可能有姓名、年龄这样的属性。 4. **方法(Method)**:类中的函数是对象的行为,例如获取信息(getter)、设置信息(setter)、执行动作等。比如,人的类可能会有一个方法“说话”(speak)。 5. **封装(Encapsulation)**:将数据和操作数据的代码打包成类,隐藏实现细节,仅对外提供接口访问,保护数据的安全性。 6. **继承(Inheritance)**:子类可以继承父类的属性和方法,通过"IS-A"关系实现代码复用。子类可以添加新的属性和方法,也可以覆盖或扩展父类的方法。 7. **多态(Polymorphism)**:同一种行为可以在不同的对象上表现出不同的形式,包括静态多态(方法重载)和动态多态(方法重写或虚函数)。 8. **构造函数(Constructor)**:特殊的方法,当创建新对象时自动执行,通常用于初始化对象的属性。 9. **析构函数(Destructor)**:特殊的方法,在对象生命周期结束时自动执行,用于清理资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值