一、前言

当前业界主要有哪些存储产品?

  • 文件存储
  • NFS(Network File System):网络文件系统,允许将存储设备挂载为本地驱动器。
  • GlusterFS:一个分布式文件系统,可以将多个计算机的磁盘空间汇集成一个大容量存储池。
  • 块存储
  • OpenEBS:一个开源的容器本地存储解决方案,它提供了基于容器的块存储。它通过在 Kubernetes集群上创建本地持久卷来实现块存储功能。
  • Ceph:一个功能强大的分布式存储系统,提供对象存储、块存储和文件存储功能。它具有高 扩展性和容错性,并且可以在大规模集群中实现数据的分布和冗余。
  • 混合存储
  • Dell EMC Unity:一种混合存储解决方案,结合了块、文件和对象存储的功能。
  • 对象存储(公有云)
  • AWS S3(Simple Storage Service):亚马逊提供的对象存储服务,具备高可扩展性和耐久 性。
  • Alibaba OSS:阿里云提供的大规模对象存储服务,适用于各种类型的应用程序。
  • 对象存储(私有云):
  • Ceph:分布式存储系统,提供了对象存储、块存储和文件存储功能。
  • MinIO:一个高性能的开源对象存储服务器,专为云原生工作负载而设计。

二、存储系统架构设计

2.1 数据分层和存储策略

数据分层:按照其 使用频率访问方式重要性 等分类,然后将其存储在不同的存储介质上。

Day15-Minio存储-图1

  1. 热数据层:包含经常访问的数据和需要快速响应的数据。(固态硬盘SSD & 闪存)
  2. 温数据层:包含数据访问频率较低的数据,但仍需要快速访问。(机械硬盘 & 虚拟磁盘)
  3. 冷数据层:包含很少访问的数据,但需要保留长时间存储。(低规格磁盘 & 云存储)

存储策略:数据的 类型用途大小 等特征选择合适的存储介质和技术,以满足数据的需求和预算要 求。

  1. 块存储:将数据划分为固定大小的块,并在需要时按需读取和写入。适用于需要 高性能低延迟 的应用,如数据库、虚拟机等。
  2. 对象存储:通过对象存储技术将数据转换为对象,并使用 S3 或 Swift 等协议进行访问和管理。适用 于需要 大规模存储 和 处理 非结构化数据 的应用,如视频、音频、图像等。
  3. 文件存储:基于文件系统的存储系统,适用于需要共享文件和目录的应用,如文件共享、日志管理 等。
  4. 混合存储:将不同类型的存储介质和技术组合起来,以实现高效的数据管理和存储。

2.2 对象存储服务

  • 将数据转换为对象并以唯一标识符进行存储和访问;
  • 灵活而高效。

2.3 分布式存储和冗余机制

  • 将数据分布在多个物理节点上,以用来提高数据的可靠性和可用性;
  • 冗余机制确保数据安全性的重要措施 ;
  • 使用数据冗余和副本机制来避免数据丢失和中断。

2.4 数据备份和灾难恢复

定期的数据备份和建立合适的灾难恢复机制,保护重要数据不丢失,并在意外情况发生时快速恢复系统。

2.5 数据安全和权限控制

在存储系统架构设计中,需要建立合适的权限控制和访问控制机制,确保数据只能被授权人员访问和修改。

2.6 性能优化和扩展性

互联网企业的存储系统需要具备高性能和良好的扩展性,以应对不断增长的数据量和用户访问压力。通 过使用合适的硬件设备、数据分片、缓存技术等手段,可以提升存储系统的性能和扩展能力。

三、对象存储原理及核心技术

对象存储是一种数据存储模式,它将数据存储为对象(Object),并使用唯一的标识符(通常是一个 URL)来访问这些对象。对象存储通常用于存储大规模非结构化数据,如图片、视频、文档等,以及用 于大数据分析、备份和归档等场景。

3.1 块存储是什么?

在块存储中,数据被组织成块,每个块都有唯一的地址标识。这些块可以被动态地分配和释放,使得存 储空间的利用更加高效。应用程序可以通过块级接口(如SCSI、iSCSI 等)直接读写块存储设备,实现对存储介质的精细控制。

3.2 文件存储是什么?

文件存储是一种数据存储模式,它以文件为单位进行数据的读写和管理。文件存储通常使用层次化的目 录结构来组织和管理文件,并提供了一系列的文件操作接口,如创建、删除、复制、移动、重命名等。

在文件存储中,数据被组织为文件,每个文件都有一个唯一的名称和路径,通过名称和路径可以定位和 访问文件。文件存储通常用于存储结构化和非结构化的数据,如文档、图片、音频、视频等。

3.3 什么是对象存储?

对象存储,一种以对象为基本单位的存储,数据一般是非机构化数据,比如文件、图片和视频这些。 对象存储的非结构化数据,会被分片成一个个对象,存储在不同的存储节点上。

3.4 对象存储的核心概念

存储桶(Bucket)是对象的载体,可理解为存放对象的 “容器”,且该 “容器” 无容量上限。

对象(Object)是对象存储的基本单元,可理解为任何格式类型的数据,例如图片、文档和音视频文件等。

每个对象都由对象键(ObjectKey)、对象值(Value)、和对象元数据(Metadata)组成。

对象键(ObjectKey):对象键是对象在存储桶中的唯一标识,可以通俗的理解为文件路径。

对象值(Value):即上传的对象本身,可以通俗的理解为文件内容(Object Content)。

对象元数据(Metadata):是一组键值对,文件的属性,例如:文件的修改时间、存储类型等。

3.5 对象存储是如何管理对象的

对象存储就像是一个超级大的文件柜,可以存放各种各样的东西,比如文件、照片、视频等等。每个东西都有一个独特的编号,就像文件柜里每个抽屉的编号一样。你可以通过这个编号来找到并读取某个东西。

在对象存储中,你可以很方便地创建新的东西,比如上传一个文件或者通过编程方式创建一个对象。当你创建一个东西时,需要给它起一个名字,并且可以额外添加一些描述信息,比如大小、类型等等。

3.6 对象存储如何防止数据丢失

纠删码(Erasure Coding)是一种冗余编码技术,用于提高数据的可靠性和容错能力。与传统的冗余备份方式不同,纠删码将数据分成多个片段,并生成一定数量的冗余片段。通过这种方式,在一定程度上可以容忍更多的数据片段丢失或损坏,而不会导致数据无法恢复。

纠删码的核心思想是通过对数据进行编码和解码来实现冗余和恢复。在编码阶段,原始数据被分成多个数据片段,并通过数学算法进行计算,生成一定数量的冗余片段。这些冗余片段包含了原始数据的冗余信息。

在恢复阶段,如果某些数据片段丢失或损坏,利用剩下的数据片段和冗余片段进行解码,从而恢复原始数据。解码过程使用纠删码算法,根据已有的数据片段进行计算,填补丢失或损坏的数据片段。

3.7 对象存储开源实现

MinIO 是后起之秀,也是 Ceph 的开发人员做的,采用Go语言实现。它实现了S3(Simple Storage Service)协议,可以与现有的S3客户端和应用程序兼容。miniO的设计目标是提供一个轻量级、高性能、易于使用的对象存储解决方案。

四、小结

对象存储具有多种优点,在云存储领域中也越来越受用户欢迎。以下是一些主要的优点:

  1. 成本低:相对于传统的存储方式,对象存储通常更为经济实惠。
  2. 无限扩容:对象存储具有无限扩容的能力,用户只需要按需购买存储空间,而无需考虑存储容量的极限。
  3. 更容易访问:对象存储可以通过简单的HTTP接口来访问和管理对象,不需要像传统文件系统一样通 过复杂的协议进行访问和管理。
  4. 高可靠性:对象存储采用分布式存储架构,具有高可靠性和容错能力。
  5. 数据安全性高:对象存储支持多种数据加密和访问控制机制,保证数据的安全性和隐私性。
  6. 更好的扩展性:对象存储具有更好的扩展性,可以轻松应对不断增长的存储需求。