S3 通俗指南:云端的“无限大”储物柜

S3 (Simple Storage Service) 是由亚马逊 AWS 推出的对象存储服务。
虽然它起初只是 AWS 的一个产品,但现在“S3 协议”已经成为了存储界的通用语(Lingua Franca)。

不管你后面用的是 AWS、阿里云 OSS、MinIO 还是 Ceph,大家基本都在讲 S3 协议。


1. 它是做什么的?(代客泊车的比喻)

为了理解 S3(对象存储),我们要把它和我们电脑里的硬盘(文件存储)区分开。

传统硬盘(文件系统)

  • 像一个树状的文件柜
  • 你需要打开 C 盘 -> 打开 Users -> 打开 Parker -> 找到 Photos。
  • 你可以只修改文件里的某一行字。

S3(对象存储)

  • 像一个巨大的平铺的代客泊车场(或者超市储物柜)。
  • 你把东西(Object)给管理员。
  • 管理员给你一个唯一凭证(Key)。
  • 下次你把凭证给管理员,他把东西原封不动还给你。

最核心的区别
在 S3 里,没有真正的“文件夹”。
所谓的 photos/2023/beach.jpg,其实只是这个文件的名字(Key)这就叫这么长而已!


2. 三大核心概念

  1. Bucket (桶)

    • 这是最顶层的容器。
    • 必须全球唯一(就像域名一样)。你叫了 my-test-bucket,别人就不能叫这个名了。
    • 所有东西都得扔进桶里。
  2. Object (对象)

    • 也就是你的文件(图片、视频、日志)。
    • 不可修改:你不能说“把这个视频得第 3 分钟剪掉”。在 S3 里,你只能覆盖上传一个新的视频来替换旧的。
  3. Key (键)

    • 文件的唯一标识符。
    • 比如 images/logo.png。再次强调,images/ 只是名字列表的一部分,不是物理文件夹。

3. 为什么大家都爱用 S3?

A. 所谓“11 个 9”的持久性

AWS 宣称 S3 的持久性是 99.999999999%
这意思是:如果你存了 1 万个文件,大概每 1000 万年才会丢一个。
它通过在不同的物理机房疯狂备份来实现这一点。你存进去一份,它背后可能存了 3 份以上。

B. 无限扩展

你不需要像买硬盘一样担心“存满了怎么办”。
S3 对用户来说是无限的。你只管存,背后的扩容是云厂商的事。

C. 静态网站托管

因为 S3 是通过 HTTP 协议访问的,你可以直接把 HTML/CSS/JS 扔进桶里,开启“静态网站托管”。
瞬间,你就拥有了一个不需要服务器的网站!


4. S3 协议:存储界的 USB 接口

现在,“支持 S3” 已经变成了存储系统的必修课。

  • MinIO:开源界的 S3,让你可以自己在私有服务器上搭建一个“AWS S3”。
  • Alluxio:支持 S3 接口,让大数据计算任务(Spark/Presto)能像访问 S3 一样访问各种底层存储。
  • Ceph:老牌分布式存储,也提供 S3 兼容网关。

当你开发应用时,只要用了 S3 SDK,理论上你可以无缝切换以上任何一种后端,而不用改代码。


5. 开发者的注意事项

  1. 最终一致性 vs 强一致性

    • 早期的 S3 是最终一致性的(你刚上传完,立刻读可能读不到)。
    • 好消息:现在 AWS S3 已经是强一致性了(写完立刻能读到)。
    • 坏消息:某些兼容 S3 的其他存储系统可能还是最终一致性的,开发时要留心。
  2. 费用陷阱

    • 存储很便宜。
    • 但是流量(出口带宽)请求次数(API 调用) 是要钱的。
    • 千万别写个死循环去轮询 S3 桶里的文件,那是“破产脚本”。

总结

  • S3 就是互联网上的无限硬盘
  • 它是Key-Value结构,不是树状结构。
  • 它是原子操作,文件只能整体上传/下载,不能局部修改。

更多推荐