QingStor 对象存储架构设计及最佳实践

对象存储概念及特性

在介绍 QingStor®️对象存储内部的的架构和设计原理之前,我们首先来了解一下对象存储的概念,也就是从外部视角看,对象存储有什么特性,我们应该如何使用。

对象存储本质上是一款存储产品,与其他的存储,如文件存储、块存储,功能是类似的,主要的功能都是数据的读和写。最大的不同在于对象存储是把数据作为对象进行管理,这是它最主要的特征,所有的数据在这里面都当做一个对象处理。

对象存储有一些非常鲜明的特点:

它的结构是扁平的,不像文件存储那样有目录层级,在读写数据时不需要对目录进行层层查找和打开。

对象存储具备海量数据存储的能力,这里的海量指的是不仅仅是几百 GB 的量,而是说几百 T 甚至上 PB 的级别。

对象存储适用于非结构化数据的存储,非结构化具体指的是不对数据的类型和格式做任何假设,不管是简单的文本,还是图片、视频、音频都可以存在对象存储里,当做对象来处理。

对象存储通过 Restful 接口对外提供服务,也就是 HTTP 协议,这使得对象存储的访问非常方便,随时随地可以进行数据的上传和下载。

QingStor®️对象存储核心优势

![0_1591683403636_1.png](https://community.qingcloud.com/assets/uploads/files/1591683404995-1-resized.png

上面讲的几点是对象存储产品所具备的通用特征,接下来介绍一下青云QingCloud 自研的存储产品 QingStor®️对象存储独有的核心优势,主要包括三方面:

第一,对海量小文件这个场景,我们在存储及 IO 上都做了针对性的优化优化。

第二,QingStor®️对象存储的系统具有无限扩展的能力,当数据量、访问量增加时,可以通过增加节点的方式提升计算和存储能力。

第三,QingStor®️对象存储是数据存储与流转的平台,从两方面来体现:

首先,所有功能的 API 都是开放的,可以通过任意调用 API 来完成业务逻辑。

其次,提供一些非常有特色的功能,像生命周期管理、跨区域复制以及自定义回调等,可以适配更多的业务场景。

QingStor®️对象存储全局数据模型

0_1591683439400_2.png

上图是 QingStor®️对象存储的全局数据模型,可以理解成一个逻辑上的视图。

这包括几个主要概念:Global 是全局的意思,Global 由多个 Zone 组成,Zone 是区域的意思,可以把它理解成数据中心,例如在北京区域部署了一套对象存储,同时在上海数据中心也部署了一套,这两套对象存储属于同一个 Global。

QingStor®️对象存储在 Zone 级别和 Global 级别都有相应的管理服务。

Zone 由很多个 Bucket(存储桶)组成,在使用对象存储时,必须要先申请一个存储桶,然后才能向存储桶中上传对象数据,以存储桶为单位来存储和管理对象数据。

在同一个 Zone 下面可以有很多个存储桶,存储桶里有各种各样的对象数据,对象数据对类型大小没有限制,单个存储桶中对象的数量也没有限制,可以无限量上传对象数据。

QingStor®️对象存储架构解析

0_1591683483294_3.png

这是 QingStor®️对象存储的后台系统架构,这个架构图经过了一些简化和抽象。

首先是接入子系统,对象存储提供的是在线服务,通过 Restful 进行访问,本质上相当于在线服务的后台,需要有接入子系统来完成接收请求、解析协议等工作。

在接入子系统下是索引子系统,索引子系统用来存储和管理对象的元数据,元数据指的是对象的 Meta 信息,包括 Object 类型、大小、写入时间之类的信息,由索引子系统管理。

存储子系统负责存储和管理数据实体本身,保证数据的可靠持久化存储。

事件子系统主要工作是异步事件处理和分布式任务调度,它是生命周期管理等功能的底层机制。

图中几条实线箭头显示了数据的流向或者说是请求处理流程,请求从接入子系统下来,接入子系统会和索引子系统及存储子系统交互,获取元数据以及数据实体,这是核心的读写流程。

虚线表示在开启了一些功能的情况下,可能会产生事件发送到事件子系统。这里有两个虚线箭头,一是读写流程中会触发一些事件,会将事件发送至子系统;二是用户可以主动提交一些事件,经过接入子系统进入事件子系统。

这几个子系统构成了 QingStor®️对象存储后台的主要模块。

从这个架构图来看,其内部实现并不是特别复杂。

QingStor®️对象存储是一款存储产品,其核心功能是做数据的读写,逻辑上必然不能太复杂。

但是要把这个系统做好并不是那么容易,因为对象存储主要应对的是海量数据的场景,在这个场景下有很多架构设计上的挑战。

首先,数据都要做可靠的存储、可靠的持久化,防止任何数据丢失;

第二,在访问量很大的情况下,需要保证系统的持续服务能力;

第三,系统需要有良好的扩展性以应对不断增加的数据量和请求量。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsswjx.html