对象存储技术初探

最近看了一本关于IT运维的奇书《凤凰项目》,书中把软件交付与工厂制造产品类比,总结了许多有趣的结论。比如在车间生产中要控制半成品的数量,半成品的堆积往往说明了生产策略的失败。
在软件从代码到产品的过程中,中间也会产生许多被称为构件(artifact)的二进制类型的半成品,如何更有效地控制和管理大量的构件能够优化工作流,进一步缩短软件的交付周期。
关于二进制类型的数据存储,很多地方都提到了对象存储技术(object storage),并将它与文件存储(file storage)、块存储(block storage)相比较。这里简单总结下对象存储的特点以及它与其他存储技术的区别。

什么是对象存储技术

首先解释对象存储中的对象(object)一词,它是一个数据存储单位,就像磁盘中的块(block)一样。
一个对象中不仅包含存储的数据本身,还包含描述数据的信息,也叫元数据(metadata),以及由存储数据和元数据生成的唯一 ID。
对象存储技术通常用于存储非结构化的数据,比如音视频、图片和二进制构件等,其实也就是不适用于用数据库存储的数据。因为对象存储中的元数据可以自定义,所以用户可以使用自定义的元数据来描述这些不包含文本字段的、非结构化的数据。
对象存储技术可以在硬件层面实现,比如对象存储设备,与磁盘不同,它的存储单元是对象而不是块。
也可以在软件层面实现,即基于块设备的对象存储系统,比如 CephGlusterFS
对象存储的设计理念中还包括使用 API 的方式来处理存储数据,通常是基于 RESTful API 实现。

对象存储的优势

易扩展性

对象存储的存储结构是一维的,即一个存储数据对应一个对象,而不是像文件系统那样的树形目录结构,扁平化的结构使其更容易扩展,新增一个存储数据只要增加一个对象就好了,而不用考虑文件的路径。

丰富的接口

对象存储技术提供更丰富的接口可供程序调用,除了基本的增删改查功能外,还提供了版本控制、副本创建、对象生命周期管理等接口。

数据检索

对象可通过其元数据或 ID 来检索,是一种一对一的映射,不像文件系统或数据库中的数据由层级结构,检索速度更快

数据抗损失

对象存储使用纠删码技术(erasure coding)来保护数据,每个对象都被分成多个分片并被存储到不同磁盘中,用于检索到该对象的分片(包含元数据的分片)只是所有分片的子集,因此在部分分片因为磁盘损坏而破坏时,仍能检索到数据,保证了一定的抗损失性。

ALT

文件存储、块存储和对象存储

文件存储

文件存储是最传统和常见的,基于树状的目录结构的存储,数据被存储在每个文件中,并通过文件路径来获取定位。对于基于块存储的文件系统,每个文件路径对应数据在磁盘中的偏移位置,这些对应信息都存储在一个查找表上,访问文件时就是通过查找表来确定在磁盘上的位置。
然而,就像数据库中存储的数据越多,查找效率越差,文件存储也存在这个问题。当数据达到 PB 级别时,文件存储系统基本就不能用了,此时无法通过新增存储节点或磁盘等措施来解决问题,因为瓶颈在于查找表的查询效率上。
这时只能通过增加文件系统,即新增一个树状目录结构来存储更多数据,但这会加大管理的难度。
ALT

块存储

块存储不等于使用块设备来进行存储,它通常是基于SAN(storage area network)技术,将块设备部署在存储区域网络中。
块存储技术实现了存储数据与用户环境的解耦,使数据可以存储在不同的环境中,比如 Linux 系统和 Windows 系统。
块存储的拓扑是成网状结构的,比起树状结构的文件存储,它具有更好的扩展性,只需要增加块设备就行。
ALT

对象存储

比起块存储技术,对象存储能提供更细粒度的扩展能力。试想,当存储资源已经达到饱和时,如果要再增加一个视频文件,在块存储系统中,我们需要新增一个块设备,然而这个新增的块设备的绝大部分资源都是闲置的;而对象存储技术中的存储数据可以是任意大小的,我们只需要增加一个比视频文件略大(多了一些元数据)的对象就好了,在云环境中可以极大地发挥按需取用的优点,减少存储成本。
ALT

展开阅读全文

没有更多推荐了,返回首页