有个做独立开发的朋友前两天问我:“我数据库放EBS,用户上传的图片也放EBS,结果磁盘快满了,扩容倒是方便,但总觉得哪里不对。” 哪里不对?用错了存储类型。EBS当仓库用,又贵又不好扩展。

今天咱们就把EBS、EFS、S3这三兄弟彻底捋清楚——它们都是存东西的,但用法天差地别。


EBS:就是你家电脑的硬盘

EBS(弹性块存储)本质上就是一块虚拟硬盘,你把它挂到EC2实例上,格式化成ext4或者xfs,就能像用本地磁盘一样读写。

它的核心特点就两个:只给一台机器用(特殊的多挂载模式除外),跟可用区绑定——你在us-east-1a建的EBS卷,没法直接挂到us-east-1b的机器上。

EBS的卷类型里,gp3现在是默认首选。比上一代gp2便宜大概20%,而且不管卷多大都白送3000 IOPS(每秒读写次数),小卷的性能直接翻了十倍。io1/io2那种预置IOPS的类型,除非你的数据库对延迟极度敏感,否则别碰——预置IOPS的单价是gp3超出部分的好几倍。

EBS的典型用法:EC2的系统盘、MySQL/PostgreSQL的数据目录、Redis的持久化存储。一句话,跑数据库用它。

EFS:公司里的共享文件夹

EFS(弹性文件系统)是给多台EC2同时用的共享存储,相当于办公室里的NAS——所有人都能访问同一份文件。

它的卖点是自动扩展,不用提前分配容量,放多少文件它就长多大。而且EFS跨可用区,挂载点可以在多个区,机器挂了一台不影响其他人访问。

代价是贵。EFS的单价大概是EBS的三倍左右,差不多$0.30/GB起步。如果你只有一台机器在用EFS,纯粹是在烧钱。如果是开发测试环境,可以考虑One Zone存储类——只存一个可用区,便宜将近一半,反正测试数据丢了也不心疼。

EFS的典型用法:多台Web服务器共享的代码目录、WordPress的wp-content/uploads目录、容器集群里多个Pod共用的配置文件。Linux专属,Windows用不了。

S3:无限容量的云仓库

S3(对象存储)跟前两者完全不是一个物种。它不挂载成磁盘,不通过文件系统读写,而是走HTTP/HTTPS接口,用API或者SDK存取数据。

最大的好处是容量无上限,而且数据自动跨多个可用区冗余,耐久度高达11个9——丢数据的概率比被陨石砸中还低。价格也便宜,标准存储约$0.023/GB起步,放冷数据的Glacier Deep Archive便宜到近乎白给,每GB每月不到$0.001。

S3还有生命周期规则(Lifecycle Rule),设定30天没访问就自动挪到低频访问层(IA),90天以上扔Glacier,费用自动降下来。但注意两个坑:低频存储有最短计费周期(30天或90天),提前删除要补差价;小文件(比如几KB的代码文件)放进IA层,按最低计费单位算反而不划算。

S3的典型用法:用户上传的图片视频、应用日志归档、静态网站托管、大数据分析的数据湖。

怎么选?

  • 跑数据库 → EBS(gp3起步)

  • 多台机器共享文件 → EFS(只有一台机器就别用)

  • 存图片、日志、备份、静态资源 → S3

  • 冷数据归档 → S3的生命周期规则扔Glacier

一句话总结:EBS是硬盘,EFS是共享文件夹,S3是仓库。三者的区别不在“哪个更好”,在“哪个更对路”。混着用才是正解——系统盘用EBS,用户上传存S3,多台Web服务器共享配置文件用EFS,各归其位