对象存储对比块存储服务
介绍
灵活且可扩展的数据存储是使用现代技术和工具开发的大多数应用程序和服务的基本要求。 无论是存储大量还是少量的图像、视频或文本块,应用程序开发人员都需要一种解决方案来存储和检索用户生成的内容、日志、备份等。
随着当今复杂的部署、容器和临时基础设施的出现,简单地将文件保存到单个服务器上的磁盘的日子已经一去不复返了。 云提供商已经开发了服务来满足现代应用程序部署的存储需求,它们主要分为两类:对象存储和块存储。
让我们看一下两者,并讨论它们的一般优点、缺点和用例。
什么是块存储
块存储服务相对简单和熟悉。 它们通过网络提供传统的块存储设备(如硬盘驱动器)。 云提供商通常拥有可以配置任何大小的块存储设备并将其附加到您的虚拟机的产品。
从那里,您可以将其视为普通磁盘。 您可以使用文件系统对其进行格式化并在其上存储文件,将多个设备组合成一个 RAID 阵列,或者将数据库配置为直接写入块设备,从而完全避免文件系统开销。 此外,与普通硬盘驱动器相比,网络附加块存储设备通常具有一些独特的优势:
- 您可以轻松拍摄整个设备的实时快照以进行备份
- 块存储设备可以调整大小以适应不断增长的需求
- 您可以轻松地在机器之间分离和移动块存储设备
这是一个非常灵活的设置,可用于大多数任何类型的应用程序。 让我们总结一下该技术的一些优点和缺点。
块存储的一些优点是:
- 块存储是一种熟悉的范例。 人员和软件几乎普遍理解和支持文件和文件系统
- 块设备得到很好的支持。 每种编程语言都可以轻松读写文件
- 文件系统权限和访问控制是熟悉且易于理解的
- 块存储设备提供低延迟的 IO,因此它们适合数据库使用。
块存储的缺点是:
- 存储一次绑定到一台服务器
- 块和文件系统具有关于它们存储的信息块(创建日期、所有者、大小)的有限元数据。 任何有关您存储内容的附加信息都必须在应用程序和数据库级别进行处理,这是开发人员需要担心的额外复杂性
- 你需要为你分配的所有块存储空间付费,即使你没有使用它
- 您只能通过正在运行的服务器访问块存储
- 与对象存储(文件系统选择、权限、版本控制、备份等)相比,块存储需要更多的动手工作和设置
由于其快速 IO 的特性,块存储服务非常适合在传统数据库中存储数据。 此外,许多需要正常文件系统存储的遗留应用程序将需要使用块存储设备。
如果您的云提供商不提供块存储服务,您可以使用 OpenStack Cinder、Ceph 或许多 NAS 设备上可用的内置 iSCSI 服务运行自己的服务。
什么是对象存储
在现代云计算世界中,对象存储是使用 HTTP API 存储和检索非结构化数据和元数据的 blob。 我们不是使用文件系统将文件分解成块以将其存储在磁盘上,而是处理存储在网络上的整个对象。 这些对象可以是图像文件、日志、HTML 文件或任何自包含的字节块。 它们是 非结构化 ,因为它们不需要遵循特定的模式或格式。
对象存储起飞是因为它极大地简化了开发人员的体验。 由于 API 由标准 HTTP 请求组成,因此为大多数编程语言快速开发了库。 保存数据块变得像对对象存储的 HTTP PUT 请求一样简单。 检索文件和元数据是一个正常的 GET 请求。 此外,大多数对象存储服务还可以将文件公开提供给您的用户,从而无需维护 Web 服务器来托管静态资产。
最重要的是,对象存储服务仅对您使用的存储空间收费(有些还按 HTTP 请求收费,以及传输带宽收费)。 这对小型开发人员来说是一个福音,他们可以以随使用规模扩展的成本获得世界一流的资产存储和托管。
但是,对象存储并不是适用于所有情况的正确解决方案。 让我们看一下优点和缺点的总结。
对象存储的一些优点是:
- 一个简单的 HTTP API,客户端可用于所有主要操作系统和编程语言
- 一种成本结构,意味着您只需为使用的东西付费
- 静态资产的内置公共服务意味着您可以少一台服务器来运行自己
- 一些对象存储提供内置的 CDN 集成,可在全球范围内缓存您的资产,从而为您的用户加快下载和页面加载速度
- 可选版本控制意味着您可以检索旧版本的对象以从意外覆盖的数据中恢复
- 对象存储服务可以轻松地从适度的需求扩展到真正密集的用例,而无需开发人员启动更多资源或重新架构来处理负载
- 使用对象存储服务意味着您不必维护硬盘驱动器和 RAID 阵列,因为这些由服务提供商处理
- 能够将元数据块与数据 blob 一起存储可以进一步简化您的应用程序架构
对象存储的一些缺点是:
- 由于此类服务的高延迟,您不能使用对象存储服务来支持传统数据库
- 对象存储不允许您仅更改数据块的一部分,您必须一次读取和写入整个对象。 这对性能有一些影响。 例如,在文件系统上,您可以轻松地将单行附加到日志文件的末尾。 在对象存储系统上,您需要检索对象、添加新行并将整个对象写回。 这使得对象存储对于变化非常频繁的数据不太理想
- 操作系统不能像普通磁盘那样轻松地挂载对象存储。 有一些客户端和适配器可以帮助解决这个问题,但总的来说,使用和浏览对象存储并不像在文件浏览器中翻阅目录那么简单
由于这些属性,对象存储可用于托管静态资产、保存用户生成的内容(如图像和电影)、存储备份文件和存储日志等。
有一些自托管对象存储解决方案,尽管您将放弃托管解决方案的一些好处(例如不必担心硬盘驱动器和扩展问题)。 您可以尝试 Minio,一种用 Go 语言编写的流行对象存储服务器,或 Ceph,或 OpenStack Swift。
结论
对于开发人员来说,选择存储解决方案可能是一个复杂的决定。 在本文中,我们讨论了块存储和对象存储服务的优缺点。 任何足够复杂的应用程序都可能需要两种类型的存储来满足其所有需求。