云计算:对象存储
2019-03-14 11:48:32对象存储,顾名思义,就是在云端,可以存放任意对象的存储服务。要注意这里的“对象”指的是任意的二进制对象,保存到云上通常是以二进制文件的形式,不要和“面向对象编程”中的对象混淆起来。
初识对象存储
通俗地解释起来,你可以这样理解,对象存储是你在云上可以创建的一种“网盘”。这个网盘可以存储任意的二进制文件,包括结构化和非结构化数据。你可以随时上传下载,也可以修改和删除。当然,云上对象存储会保证你数据的可靠性、可用性和扩展性,你不需要操心这些细节。
那么,同样是存储服务,对象存储和云硬盘有什么区别呢?
- 第一个主要区别,在于访问的接口与形式。
云硬盘其实是挂载到虚拟机的虚拟硬盘,它是通过实现操作系统级别的底层接口,作为虚拟机的块存储设备而存在。我们也必须连接到相关的虚拟机,才能访问它里面的数据。
而对象存储,本质是一个网络化的服务,调用方主要通过高层的 API 和 SDK 来和它进行交互。不管是面向外部公开互联网服务,还是和内部应用程序对接,对象存储都是通过提供像 HTTP 这样的网络接口来实现的。所以它的独立性很强,不需要依赖其他组件就可以运作。 - 第二个主要区别,也是对象存储的一大特征,就是对象存储内本身不存在一个真正的文件系统,而是更接近一个键值(Key-Value)形式的存储服务。
这里的键就是对象的路径(路径中包含斜杠符号“/”),这里的值就是存储对象的二进制文件。
键值系统和云硬盘上经典文件系统的核心差异,就在于文件系统保存了更多的元数据,尤其是实现了目录结构和目录操作。而键值系统中,所谓的目录其实是多个对象共享的路径前缀,可以说是用前缀模拟出了目录。 - 第三个主要区别,在于对象存储的巨大容量。
作为云计算最具代表性的服务之一,它的可扩展性(Scalability)是毋庸置疑的,对象存储能够轻松地容纳上 PB 的超大容量数据,这是任何的云硬盘所不能企及的。所以对象存储是名副其实的大数据存储。
但从另一个角度说,对象存储和 HDFS 这样的大数据文件系统比起来,又有自己独到的优势:对象存储本身也是非常擅长和适合处理小文件的,即便是海量的小文件,对象存储也不会像 HDFS 那样处理起来捉襟见肘,可以说是“大小通吃”。
对象存储的高级特性
- 存储分层
在生产环境下的对象存储,我们往往会存放大量的文件和数据,这些文件的访问频率其实是会有很大差异的。比如说,对于一些比较热门的下载文件,它可能经常需要被访问调用;而如果是一些明细的日志文件,写入后再次读取的机率通常不高,只有当排查问题时,我们才可能去访问翻看它。
所以为了应对不同的访问模式和频率,对象存储贴心地提供了分层的策略,你可以按照访问热度,设置从热到冷不同的存储级别(或者叫存储类型)。其中,存储级别为热的对象,存储空间占用的成本稍高,但访问读取不需要收取额外的费用;而存储级别越冷,则存储空间的单位成本越低,但访问读取需要收取一定的费用。到了极少访问的存档级别,数据的“解冻”可能还需要花费一些时间。
可以说,存储分层的存在,让原本价格低廉的云上存储更加具有成本竞争力。 - 生命周期管理
随着时间的推移、业务的增长,你在对象存储中的内容肯定会越来越多。当总的体量和对象的个数到达一定级别的时候,你会发现对历史内容进行清理就成为了一件非常麻烦的事情。
这时候,生命周期管理功能就可以很好地帮助我们。因为它允许你设置一定的过期规则,当对象满足规则时(通常每天判断一次),可以自动地执行一些清理操作。比如,你可以对一个存储桶或目录进行设置,要求最后修改时间超过 60 天的文件自动切换到低频访问层,超过 180 天的文件则进行归档或删除。 - 版本管理
这个很好理解。同一个对象可能会被修改更新,而启用这个特性后,对象存储系统就能够自动地帮助你记录这个对象之前的多个版本。这样,当有需要时,你可以按需进行回滚和恢复,能避免不必要的损失。
此外,对象存储服务还有跨区域同步、访问日志分析等其他高级特性。前者可以帮助你自动对数据进行跨区域同步,常用于重要数据备份或热点数据分发,后者则对已经存放了海量数据的对象存储进行管理分析大有帮助。
对象存储的应用场景
我们的应用离不开数据,所以几乎到处都是对象存储可以发挥的场景。一切需要保存数据的地方,不论是原始数据的保留备份、中间结果的临时落地,还是处理结果数据的永久保存,你都可以考虑对象存储是否适用。
在很多系统中,对象存储就是这样贯穿在整个系统数据流程的生命周期中,串联起了数据处理的各个环节。对象存储有时甚至还可以用来做简单的键值数据库,由于它的分布式设计,对它来说,承担大量的并发请求,也是小菜一碟。
对象存储还可以支撑大数据应用。现在各云厂商的对象存储服务,也普遍地作为分布式存储系统,与各家的大数据产品进行了深度的集成,也是云上各类数据湖解决方案的关键组成部分。