Amazon Simple Storage Service(Amazon S3)是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。各种规模和行业的客户都可以使用 Amazon S3 存储和保护任意数量的数据,用于数据湖、网站、移动应用程序、备份和恢复、归档、企业应用程序、IoT 设备和大数据分析。Amazon S3 提供了管理功能,使您可以优化、组织和配置对数据的访问,以满足您的特定业务、组织和合规性要求。

1. 核心概念:它源于亚马逊,但已成为行业标准

  • 起源:S3 协议最初是由 亚马逊 AWS 为其产品 Simple Storage Service 设计和创建的。S3 这个名称就来源于此。

  • 成为标准:由于 AWS S3 的巨大成功和影响力,这套 API 设计得非常出色,以至于被整个行业广泛采纳,成为了 “对象存储” 领域事实上的标准协议

  • 重要区别:现在,“S3 协议”通常指的是一种开放的、标准化的接口规范,而不仅仅是 AWS 的独家服务。

2. 它是什么类型的存储?—— 对象存储

S3 协议是为 “对象存储” 而生的,这与我们熟悉的传统 “文件存储” 和 “块存储” 有根本区别:

存储类型比喻特点典型协议
文件存储办公室文件柜数据以文件和文件夹的层级结构组织。易于人类理解。NFS, SMB/CIFS, FTP/SFTP
块存储一块空的硬盘数据被分成固定大小的“块”,没有元数据。速度快,适合操作系统和数据库。iSCSI, FC
对象存储仓库的快递柜数据被打包成一个独立的“对象”,每个对象都有:
1. 数据本身
2. 全局唯一的键
3. 丰富的元数据
S3 API, Swift

        S3协议操作的就是这些“对象”。它不像FTP那样去“进入某个目录”,而是通过唯一的“键”来直接存取对象。

        对象存储可根据需要快速轻松地扩展,即使面对巨大的 PB 和 EB 负载也是如此,不管存储了多少对象,它们都被放置在一个单一的命名空间中,它可以分布在各种硬件和地理位置,并且系统可以继续访问这个不断增长的池中的任何对象,而完全不会影响性能。

3. S3 协议是如何工作的?—— 基于 HTTP/HTTPS 的 RESTful API

这是理解 S3 协议的技术核心:

  • 语言:它使用 HTTP/HTTPS 作为其通信基础。这意味着任何能发送 HTTP 请求的工具或编程语言都可以与 S3 协议交互。

  • 风格:它是一种 RESTful API。你对资源的操作(增、删、改、查)通过标准的 HTTP 方法来实现:

    • PUT -> 上传/创建对象

    • GET -> 下载/读取对象

    • DELETE -> 删除对象

    • HEAD -> 获取对象的元信息

一个简单的例子:
假设有一个存储桶叫 my-photos,里面有一个对象的键是 vacation/beach.jpg
那么通过 S3 协议下载这个图片的 HTTP 请求看起来就像是:
GET https://my-photos.s3.us-east-1.amazonaws.com/vacation/beach.jpg
(在实际请求中还会包含用于身份验证的签名信息)

下图为对象存储在项目中的使用

4. S3 协议的核心资源模型

        亚马逊将存储系统中的一个命名空间当作一个 Bucket,在这个命名空间下你可以放任意文件,二进制文件,PDF,MP3,PNG,Doc……有点类似操作系统中 "文件夹" 的概念,对于存储系统来说它并不关心你存放的是什么类型的文件,它在乎的是你将这些文件放在哪个 "命名空间下",即哪个 Bucket 下。

        在一个对象存储系统里面所有的 Bucket 都必须是唯一,同时创建这个 Bucket 的权限不可转移,如果是在云对象存储中则不能从一个 Region 转到另一个 Region。

        Bucket 就像 Linux 中的根目录,在对象存储系统中,一个 Bucket 像是一个根目录,所有对象都必须要保存在某一个 Bucket 下。

        Bucket 里面存储的对象就是 Object,由对象名 (Key) 和数据 (Value) 组成。

协议主要围绕两种资源进行操作:

  1. 存储桶

    • 相当于一个顶层容器或命名空间,用于组织对象。

    • 名字必须在整个 S3 服务范围内全局唯一。

    • 操作示例:创建存储桶、列出存储桶、设置存储桶的访问权限。

  2. 对象

    • 存储的基本单元。包含:

      • :对象的唯一标识符,可以包含类似路径的前缀,如 projects/project-a/data.csv

      • 数据:文件本身的内容。

      • 元数据:描述数据的键值对,如 Content-Type: image/jpeg,或是自定义元数据。

      • 版本ID:如果启用了版本控制,每个对象版本都会有唯一ID。

    • 操作示例:上传对象、下载对象、删除对象、管理对象元数据。

5. S3 协议的优势和特点

  • 简单且通用:基于 HTTP,易于理解和集成。

  • 高可扩展性:天生为海量数据设计,无需担心容量和性能瓶颈。

  • 高持久性和可用性:数据通常会在底层被多副本存储,可靠性极高。

  • 丰富的功能:通过协议可以支持:

    • 版本控制:防止对象被意外覆盖或删除。

    • 生命周期管理:自动将旧数据转移到更便宜的存储层级。

    • 服务端加密:在存储时自动加密数据。

    • 访问控制:精细的权限管理策略。


总结:S3 协议是什么?

  • 它不是一个像 FTP 那样的传统文件传输协议。

  • 它是一个用于管理对象存储标准化、基于 HTTP 的 RESTful API

  • 它最初由 AWS 定义,但现在已成为行业标准,被众多云服务商和开源软件(如 MinIO, Ceph)实现和支持。

S3的诞生绝不是偶然,是数据的爆炸增长和技术的不断推进的结果,国外用亚马逊、谷歌云等支持S3协议的比较多,国内用阿里云、腾讯云、华为云的比较多。

更多推荐