1. 先搞清楚一件事:这三个不是“三种硬盘”
很多人一上来就对比 AWS 的 S3、EBS、EFS,第一反应是“不都是存数据的吗,有什么区别”。我曾经见过有同事把数据库备份直接放到 S3 上让数据库进程挂载使用,结果性能惨不忍睹,还以为是 AWS 网络出了问题。其实这三兄弟根本没有可比性,它们服务的抽象层级都不一样。
用生活化的方式理解:EBS 相当于给电脑插一块硬盘,EFS 相当于一台文件服务器,S3 相当于一个无限大的网盘 API。
- EBS(Elastic Block Storage)是块存储,裸设备,只能挂到 EC2 虚拟机上当系统盘或数据盘使用,不能多台机器共享。
- EFS(Elastic File System)是文件存储,天然支持 POSIX 文件系统语义,多个 EC2 实例可以同时挂载同一个文件系统。
- S3(Simple Storage Service)是对象存储,通过 HTTP REST API 读写数据,没有传统文件夹层级的概念,任何地方只要能联网就能访问。
三者的本质差异在于数据如何被组织、如何被访问、如何被共享。搞懂这三个维度,选型就不难了。
这篇文章主要面向三种人:刚接触 AWS 的开发者、准备做架构方案设计的技术负责人、以及工作中需要频繁在存储选型上做决策的运维工程师。我会把三种存储的底层原理、适用场景、成本模型和实际踩坑经验一次性讲清楚。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 底层本质差异:块、文件与对象
2.1 块存储是“裸设备”
块存储是最底层的存储形态,它把数据切分成固定大小的块(block),每个块都有独立的地址。对于操作系统来说,这就是一块可以格式化、分区的原始磁盘。AWS 的 EBS 就是典型的块存储,它不关心文件系统、不关心文件名、不关心目录结构,只负责按地址读写数据块。
正因为这种“不关心”的特性,块存储的性能是最高的,延迟最低,但也决定了它基本只能绑定一台机器使用。文件系统(比如 ext4、xfs、NTFS)是在块设备之上建立的二级抽象,只有格式化了文件系统,操作系统才能以“文件”的形式读取数据。
这就像一块生肉,你要么直接烤(块存储直接跑数据库),要么切碎了加工成肉馅包饺子(格式化成文件系统再用)。EBS 最常见的用途就是 EC2 的系统盘和数据盘,数据库的高 IOPS 需求通常也由 EBS 支撑。
2.2 文件存储是“共享文件夹”
文件存储管理的是层级结构的文件和目录,支持打开、关闭、读写、追加、加锁等操作,遵循标准的 POSIX 语义。EFS 是 AWS 托管的 NFS 文件系统,内部由多台存储节点组成,通过 NFSv4 协议对外提供服务,客户端侧挂载后会显示为一个普通的网络驱动器。
文件存储的核心优势是多主机共享。多个 EC2 实例、on-premises 服务器、容器 Pod 可以同时读写同一个文件系统,数据实时一致。适合内容管理系统共享上传目录、大数据分析集群共享作业数据、应用服务器集群共享配置和日志。
EFS 的数据其实底层也是放在 S3 之上的,AWS 官方文档也承认 EFS 底层使用 S3 作为存储介质,但对外暴露的是标准文件系统接口。所以不要太纠结底层实现,把它当成一个弹性伸缩的 NFS 就好。
2.3 对象存储是“键值存储的巨型版”
对象存储把数据封装成“对象”(Object),每个对象包含数据本身、元数据(Metadata)和一个全局唯一的键(Key)。S3 就是对象存储的标杆实现,访问方式极其简单——HTTP PUT 上传、HTTP GET 下载,支持 HTTPS,因此天然适合互联网场景下的大规模数据分发。
对象存储的容量理论上无限,不需要预置容量,也没有传统的目录层级概念。虽然 S3 控制台里看起来有文件夹路径(比如 s3://bucket/images/logo.png),那只是把 / 作为对象键前缀做展示,本质上还是扁平结构。
对象存储的性能特点是:吞吐量极高,但单次请求延迟相对较高,不适合随机小规模读写的数据库场景。它强调的是“存得住、存得便宜、随便取”,而不是“低延迟、高性能”。
3. S3:对象存储的核心能力与真实成本陷阱
3.1 S3 到底能做什么
S3 是 AWS 上应用场景最广的存储服务,我见过的典型用法大概有以下几类:
静态网站托管。把 HTML、CSS、JS、图片打包传到 S3 bucket,开启静态网站托管后,bucket 就直接变成一个 HTTP 服务器。配合 CloudFront CDN,能撑住很大的访问量,成本比跑 EC2 部署 Nginx 低一个数量级。很多中小项目的官网就是这么挂的。
大数据与分析数据湖。S3 是 Amazon Athena、Redshift Spectrum、EMR 等分析服务的底层数据源。把原始日志、业务数据以 Parquet/JSON 格式落到 S3,然后直接用 SQL 查询,不需要建任何数据库实例,按扫描量付费。
备份与归档。S3 的存储类设计非常细:S3 Standard(标准)、S3 Intelligent-Tiering(智能分层)、S
