【分布式对象存储】从0搭建框架:单机

1.什么是对象存储?

对象存储也称为基于对象的存储,是一种计算机数据存储架构,旨在处理大量非结构化数据。与其他架构不同,它将数据指定为不同的单元,并捆绑元数据和唯一标识符,用于查找和访问每个数据单元。

这些单元(或对象)可以存储在本地,但通常存储在云端,以便于从任何地方轻松访问数据。由于对象存储具有横向扩容能力,它的可伸缩性几乎没有限制,并且存储大量数据的成本也低于块存储等其他存储方法。

如今的许多数据都是非结构化的,无法很好地存储在传统数据库中,包括电子邮件、媒体和音频文件、网页、传感器数据和其他类型的数字内容。因此,寻找高效且经济实惠的方法来存储和管理这类数据成为了一个难点。越来越多的企业将对象存储作为存储静态内容、数据架构和备份的首选方法。

  • 对象存储定义

    对象存储是用于存储非结构化数据的数据存储架构,它将数据划分为单元(对象),并存储在结构扁平的数据环境中。每个对象都包含数据以及应用可用于轻松访问和检索对象的元数据和唯一标识符。

  • 工作原理

    在对象存储中,一个文件的数据块被共同保存为一个对象,并连同其相关的元数据和自定义标识符放入被称为存储池的扁平数据环境中。

    当您需要访问数据时,对象存储系统将使用唯一标识符和元数据来查找所需的对象,例如图片或音频文件。您还可以自定义元数据,从而添加可用于其他用途(例如用于数据分析的检索)的上下文。

    您可以使用 RESTful API、HTTP 和 HTTPS 查询对象元数据,以查找和访问对象。由于对象存储在全局存储池中,因此您可以快速轻松地找到所需的确切数据。此外,扁平环境使您能够快速扩容,即便是 PB 或 EB 级负载也毫不费力。存储池可以分布在多个对象存储设备和地理位置中,因此规模不受限制。随着数据量的增长,您只需向池中添加更多存储设备即可。

    对象存储的优势(例如弹性和可伸缩性)使其成为管理云基础架构中非结构化数据的理想选择。那么,什么是云对象存储呢?顾名思义,也就是作为按需云服务提供的基于对象的存储。事实上,对于大多数大型云服务提供商而言,云对象存储是主要的存储格式。

2.传统的网络存储

网络存储(Network Storage)是数据存储的一种方式,网络存储结构大致分为三种:直连式存储(DAS:Direct Attached Storage)、网络附加存储(NAS:Network Attached Storage)和存储区域网(SAN:Storage Area Network)。由于NAS对于普通消费者而言较为熟悉,所以一般网络存储都指NAS。

网络存储被定义为一种特殊的专用数据存储服务器,包括存储器件(例如磁盘阵列、CD/DVD驱动器、磁带驱动器或可移动的存储介质)和内嵌系统软件,可提供跨平台文件共享功能。网络存储通常在一个LAN上占有自己的节点,无需应用服务器的干预,允许用户在网络上存取数据,在这种配置中,网络存储集中管理和处理网络上的所有数据,将负载从应用或企业服务器上卸载下来,有效降低总拥有成本,保护用户投资。

NAS(Network Attached Storage-网络附着存储),是一个可提供存储功能和文件系统的网络服务器,客户端可访问NAS上的文件系统,还可上传下载文件,客户端和服务端之间使用的协议有SMB、NFS以及AFS等网络文件系统协议。即将存储设备通过标准的网络拓扑结构(例如以太网)连接到一群计算机上。NAS是部件级的存储方法,它的重点在于帮助解决迅速增加存储容量的需求。

SAN(Storage Area Network存储区域网络)通过光纤通道连接到一群计算机上。在该网络中提供了多台主机连接,但并非通过标准的网络拓扑。只提供块存储,而把文件系统的抽象交给客户端来管理对客户端来说,SAN就是一块磁盘,可以对其格式化、创建文件系统并挂载。客户端和服务端使用的协议有Fibre Channel、iSCSI、ATA over Ethernet(AoE) 和HyperSCSI。

现在的网络存储通常将SAN和NAS混合使用,同时提供文件级别和协议和块级别的协议。

3.对象存储与传统网络存储区别
  • 文件存储

文件存储将数据存储和整理到文件夹中,类似于您保存在办公室的纸质文件系统中的物理文件。如果您需要某个文件中的信息,则需要知道哪个房间、文件柜、抽屉和文件夹包含该特定文件。文件存储使用相同的分层存储结构,文件被命名,以元数据标记,然后放入文件夹中。

要找到某个数据,您需要知道查找该数据的正确路径。随着时间的推移,文件变得越来越多,搜索和检索数据文件可能会变得非常耗时。虽然可伸缩性较为有限,但通过这种方法可以很容易地存储几乎任何类型的少量数据,并且可供多个用户同时访问。

  • 块存储

块存储在文件存储的基础上提升了性能,它将文件拆分为多个单独的块并单独存储。块存储系统会为每个原始数据块分配一个唯一标识符,当您需要访问完整的文件时,系统将使用唯一标识符将数据块重组为完整的文件。块存储不需要单一的数据路径,因此您可以将其存储在最方便的位置,并且在需要时仍然能够快速检索。

块存储非常适合需要处理大量事务型数据或使用任务关键型应用的组织,可提供低延迟和一致的性能。但是,块存储费用高昂,不提供元数据功能,并且需要操作系统才能访问块。

  • 对象存储

如前所述,对象存储将文件存储为扁平数据环境(即存储池)中的独立对象,对象包含全部数据、唯一标识符和详细元数据(元数据包含关于数据、权限、政策和其他应急情况的信息)。对象存储最适合非结构化数据的静态存储,您只写入一次数据,但可能需要多次读取。

虽然对象存储不需要目录、文件夹和其他复杂的分层结构,但却不适合用来存储不断变化的动态数据,因为修改对象需要重写整个对象。根据您的速度和性能要求,在某些情况下文件存储和块存储可能仍然适合您的需求。

  • 访问数据方式

网络文件系统的客户端通过NFS等网络协议访问某个远程服务器上存储的文件;

块存储的客户端通过数据块的地址访问SAN上的数据块。

对象存储则通过REST网络服务访问对象。

4.对象存储的优势
  • 可伸缩性强

您可以轻松横向扩容对象存储的扁平架构,而不会受到文件存储或块存储那样的限制。对象存储基本没有大小限制,因此只需添加新设备,即可将数据扩大到 EB 级。

  • 复杂性低

对象存储没有文件夹或目录,也就不具有层次结构系统的大多数复杂性。由于没有复杂的树或分区,检索文件变得十分轻松,因为您不需要知道确切位置。

  • 易于搜索

元数据是对象的一部分,使您无需借助单独的应用即可轻松搜索和导航。它也更加灵活,并且可以深度自定义。您可以使用各种特性和信息来为对象添加标记,例如用量、费用以及自动删除、保留和分层的政策。

  • 具有弹性

对象存储可以自动复制数据并存储在多个设备和多个地理位置。这有助于防范服务中断和数据丢失,并可为灾难恢复策略提供支持。

  • 成本效益高

对象存储在设计时考虑了成本因素,与基于文件和块的系统相比,能够以更低的价格存储大量数据。使用对象存储时,您只为需要的容量付费,即使存储大量数据,也能很好地控制费用。

5.单机版对象存储架构
6.单机版对象存储接口
7.代码实现过程
8.效果展示