一、前言¶
当前业界主要有哪些存储产品?
- 文件存储:
- NFS(Network File System):网络文件系统,允许将存储设备挂载为本地驱动器。
- GlusterFS:一个分布式文件系统,可以将多个计算机的磁盘空间汇集成一个大容量存储池。
- 块存储:
- OpenEBS:一个开源的容器本地存储解决方案,它提供了基于容器的块存储。它通过在 Kubernetes集群上创建本地持久卷来实现块存储功能。
- Ceph:一个功能强大的分布式存储系统,提供对象存储、块存储和文件存储功能。它具有高 扩展性和容错性,并且可以在大规模集群中实现数据的分布和冗余。
- 混合存储:
- Dell EMC Unity:一种混合存储解决方案,结合了块、文件和对象存储的功能。
- 对象存储(公有云):
- AWS S3(Simple Storage Service):亚马逊提供的对象存储服务,具备高可扩展性和耐久 性。
- Alibaba OSS:阿里云提供的大规模对象存储服务,适用于各种类型的应用程序。
- 对象存储(私有云):
- Ceph:分布式存储系统,提供了对象存储、块存储和文件存储功能。
- MinIO:一个高性能的开源对象存储服务器,专为云原生工作负载而设计。
二、存储系统架构设计¶
2.1 数据分层和存储策略¶
数据分层:按照其 使用频率、访问方式、重要性 等分类,然后将其存储在不同的存储介质上。

- 热数据层:包含经常访问的数据和需要快速响应的数据。(固态硬盘SSD & 闪存)
- 温数据层:包含数据访问频率较低的数据,但仍需要快速访问。(机械硬盘 & 虚拟磁盘)
- 冷数据层:包含很少访问的数据,但需要保留长时间存储。(低规格磁盘 & 云存储)
存储策略:数据的 类型、用途、大小 等特征选择合适的存储介质和技术,以满足数据的需求和预算要 求。
- 块存储:将数据划分为固定大小的块,并在需要时按需读取和写入。适用于需要 高性能 和 低延迟 的应用,如数据库、虚拟机等。
- 对象存储:通过对象存储技术将数据转换为对象,并使用 S3 或 Swift 等协议进行访问和管理。适用 于需要 大规模存储 和 处理 非结构化数据 的应用,如视频、音频、图像等。
- 文件存储:基于文件系统的存储系统,适用于需要共享文件和目录的应用,如文件共享、日志管理 等。
- 混合存储:将不同类型的存储介质和技术组合起来,以实现高效的数据管理和存储。
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的设计目标是提供一个轻量级、高性能、易于使用的对象存储解决方案。
四、小结¶
对象存储具有多种优点,在云存储领域中也越来越受用户欢迎。以下是一些主要的优点:
- 成本低:相对于传统的存储方式,对象存储通常更为经济实惠。
- 无限扩容:对象存储具有无限扩容的能力,用户只需要按需购买存储空间,而无需考虑存储容量的极限。
- 更容易访问:对象存储可以通过简单的HTTP接口来访问和管理对象,不需要像传统文件系统一样通 过复杂的协议进行访问和管理。
- 高可靠性:对象存储采用分布式存储架构,具有高可靠性和容错能力。
- 数据安全性高:对象存储支持多种数据加密和访问控制机制,保证数据的安全性和隐私性。
- 更好的扩展性:对象存储具有更好的扩展性,可以轻松应对不断增长的存储需求。