Blog

云对象存储入门:给小白的一次系统科普

从对象存储是什么、为什么需要对象存储,到 Bucket、Object、权限控制、访问链路、CDN 加速和常见使用场景,系统讲清云对象存储基础。

  • 云计算
  • 对象存储
  • 云原生
  • TOS
  • OSS
  • COS

学习云计算、后端部署或者前端资源发布时,经常会遇到一组词:

TOS、OSS、COS、OBS、Bucket、Object、CDN、静态资源、文件上传。

这些词看起来像一堆云厂商缩写,但它们背后其实围绕的是同一类能力:

把文件稳定地存到云上,并且能够低成本、可扩展、方便地访问和管理。

这个能力,就是云对象存储。

如果你是第一次接触它,可以先记一句最核心的话:

对象存储就是“放文件的云仓库”,适合存图片、视频、文档、日志、备份、静态资源等非结构化数据。

先用一句话理解对象存储

对象存储不是给你存表结构、跑事务 SQL 的。
它更适合存“文件类数据”。

比如:

  • 用户上传的头像
  • App 图片
  • 音视频文件
  • PDF、Word、Excel
  • 前端静态资源
  • 业务日志
  • 数据备份包

所以,对象存储通常不是拿来替代 MySQL 的,而是和数据库配合使用。

一个很常见的组合是:

  • MySQL 存文件的业务信息
  • 对象存储 存文件本体

比如一张“用户头像表”里,数据库存的是:

  • 用户 ID
  • 文件 URL
  • 上传时间
  • 文件类型

而头像图片本身,则放在对象存储里。

为什么不能直接把文件放在应用服务器里

这是很多小白最自然的想法:

既然我有服务器,那我把图片、附件直接存到服务器磁盘里不就好了?

小项目有时确实能这么做,但一旦系统变大,问题会很快暴露出来。

1. 扩容不方便

如果文件都存某一台服务器本地磁盘,那当你把应用扩成多台机器时,就会遇到问题:

  • A 机器有这张图
  • B 机器没有这张图

这会导致访问不一致。

2. 运维成本高

服务器磁盘空间有限,还要考虑:

  • 磁盘满了怎么办
  • 文件备份怎么做
  • 文件误删怎么恢复
  • 多副本怎么保证

如果全部自己维护,成本会很高。

3. 不利于分离应用和资源

现代系统通常希望把“应用运行”和“文件存储”分开:

  • 应用服务器负责处理业务逻辑
  • 对象存储负责存放文件

这样职责更清晰,也更容易扩展。

4. 公网分发能力弱

如果图片、视频都从业务服务器直接对外提供:

  • 带宽压力大
  • 下载性能差
  • 容易拖慢业务服务

而对象存储通常更适合和 CDN 搭配,做大规模分发。

对象存储和本地磁盘、数据库有什么区别

可以先粗略区分成三类存储:

1. 本地磁盘

就是服务器自己的硬盘。

特点:

  • 访问快
  • 配置简单
  • 适合临时文件、本地运行文件

缺点:

  • 扩展性差
  • 不方便多机共享
  • 可靠性和备份要自己管

2. 数据库

数据库更适合存结构化数据,比如:

  • 用户信息
  • 订单数据
  • 支付记录

它擅长的是:

  • 查询
  • 事务
  • 关系建模

不是为了大规模存文件而设计的。

3. 对象存储

对象存储更适合存文件对象,特点通常是:

  • 容量大
  • 成本相对低
  • 易扩展
  • 方便公网访问
  • 适合和 CDN 配合

所以如果一句话总结:

存储职责三类数据放在不同地方先按数据性质分工,再决定用数据库、对象存储还是本地磁盘。
01

数据库存“业务数据”

订单、用户、状态、关系和事务等结构化信息。

03

本地磁盘存“运行时临时数据或本机文件”

缓存、临时文件、单机运行依赖,通常不作为长期共享存储。

什么叫“对象”

对象存储之所以叫“对象存储”,核心概念就是“对象”。

一个对象通常可以理解成:

对象结构一个对象由三部分组成对象不是数据库里的对象,而是一个被存储和管理的文件单元。
文件内容文件标识元数据

共同构成一个可被保存、定位、访问和管理的对象。

例如一张图片对象,除了图片本身,还可能带有:

  • 文件名
  • 大小
  • 上传时间
  • Content-Type
  • 自定义标签

它不是数据库里的“对象”,而是“一个被存储和管理的文件单元”。

什么是 Bucket

Bucket 可以理解成对象存储里的“桶”或者“容器”。

它相当于一类文件的存放空间。

比如你可以按业务划分多个 Bucket:

  • user-avatar
  • app-static-assets
  • video-archive
  • backup-files

Bucket 的作用类似于:

  • 存储边界
  • 权限边界
  • 生命周期管理边界

通常很多策略都是以 Bucket 为单位配置的。

什么是 Object Key

Object Key 可以理解成对象在桶里的“路径名”或“唯一标识”。

例如:

Object KeyBucket 决定容器,Key 决定对象位置把桶名和对象 Key 合在一起,就能定位到一个具体文件对象。
Bucketbucket: user-avatar

文件所属的存储容器。

Keykey: 2026/07/08/u123/avatar.png

桶内唯一的对象标识。

注意一点:

很多对象存储里的“目录”其实不一定是真实目录,更像是 key 的前缀组织方式。

也就是说,看起来像:

Key 前缀看起来像目录,本质上仍是一个完整 Key斜杠通常只是命名约定,很多对象存储并不要求真实存在多级物理文件夹。
images/2026/07/banner.png
images202607banner.png

本质上经常只是一个完整 key,不一定真有多级文件夹的物理结构。

一张图看懂对象存储访问链路

对象存储访问链路:业务系统负责授权和记录,对象存储负责保存文件,CDN 负责加速分发。
01

用户端

用户、浏览器或 App 发起上传、查看图片、下载附件等动作。

02

业务系统

后端校验登录态、业务权限,并决定文件应该如何被访问。

03

上传凭证

系统生成临时凭证、对象 Key、文件路径或短期有效访问地址。

05

CDN 加速

可选环节。热门资源缓存到更靠近用户的节点,降低访问延迟。

06

访问资源

用户最终访问图片、视频、文档或其他附件资源。

这条链路里,对象存储负责“文件放在哪”,CDN 负责“更快地把文件送出去”。

一个最常见的业务例子:上传头像

我们把它放到一个具体例子里会更清楚。

第一步:用户选择文件

用户在页面上选择头像图片。

第二步:前端向业务后端申请上传信息

后端可能会返回:

  • 上传地址
  • 临时凭证
  • 文件 key
  • 上传策略

第三步:文件上传到对象存储

前端把图片传到对象存储,而不是传到应用服务器磁盘。

第四步:后端记录文件地址

上传成功后,业务系统把图片 URL 或对象 key 记录到数据库。

第五步:页面展示头像

前端从对象存储地址或 CDN 地址加载头像。

所以这里数据库和对象存储的职责是分开的:

  • 数据库存“这是谁的头像、头像地址是什么”
  • 对象存储存“头像文件本身”

对象存储为什么特别适合静态资源

前端项目上线后,常常会产生很多静态资源:

  • js
  • css
  • 图片
  • 字体文件
  • 下载包

这些资源有几个共同特点:

  • 读多写少
  • 适合缓存
  • 不需要事务
  • 希望公网访问快

这和对象存储的能力高度匹配。

所以很多网站会把静态资源放到对象存储中,再配上 CDN。

常见效果是:

  • 页面打开更快
  • 业务服务器压力更小
  • 文件分发更稳定

对象存储和 CDN 是什么关系

很多人第一次接触会把它们混在一起。

其实它们不是同一个东西。

对象存储

重点解决:

  • 文件放哪
  • 文件怎么持久保存
  • 文件如何按桶管理

CDN

重点解决:

  • 文件怎么更快到达用户
  • 各地区访问延迟怎么降低
  • 热门资源如何缓存分发

可以这样理解:

类比记忆对象存储负责保存,CDN 负责分发两者经常配合出现,但职责并不相同。

CDN = 配送网络

负责把热门资源缓存到更靠近用户的节点。

对象存储里有文件,但如果全国各地用户都直接回源去拿,速度可能一般。
加上 CDN 之后,热门文件可以缓存到离用户更近的节点。

常见访问方式有哪些

对象存储文件一般有几类访问方式。

1. 公共读

适合:

  • 网站公开图片
  • 静态资源
  • 公开下载文件

特点是:

  • 用户可以直接访问 URL
  • 实现简单

但要注意不能把敏感文件误设成公开。

2. 私有读

适合:

  • 用户私密附件
  • 内部文档
  • 受控下载资源

这时通常需要:

  • 鉴权
  • 临时签名 URL
  • 后端代理下载

3. 临时授权访问

这是很常见的一种折中方案。

比如文件本身是私有的,但系统可以生成一个“短时间有效”的访问地址给用户下载。

这样既避免了完全公开,也比后端全程代理更轻。

什么是预签名 URL

预签名 URL 可以理解成:

一个带时效、带签名的临时访问地址。

它常用于:

  • 临时下载私有文件
  • 临时上传文件

例如后端生成一个有效期 10 分钟的链接,用户在这 10 分钟内可以用它访问对象。

这类机制很常见,因为它兼顾了:

  • 安全性
  • 易用性
  • 访问效率

什么是生命周期管理

对象存储不是只管“存进去”,还会涉及文件长期管理。

很多云厂商支持生命周期策略,比如:

  • 上传 30 天后转低频存储
  • 上传 180 天后转归档存储
  • 上传 365 天后自动删除

这样做的目的主要是控成本。

因为不同文件的访问频率差异很大:

  • 热门头像、首页资源访问频繁
  • 旧备份、老日志几乎不访问

如果全部一直放在高频热存储里,成本不一定最优。

什么是版本控制

有些对象存储支持版本控制。

意思是同一个 key 的文件多次覆盖后,可以保留历史版本。

这适合:

  • 防误删
  • 防误覆盖
  • 回滚文件版本

例如:

  • 某个配置文件被错误上传
  • 某个静态资源被错误替换

如果有版本控制,就更容易恢复。

对象存储常见使用场景

对象存储几乎是现代云上系统里非常通用的一块基础设施。

1. 用户上传文件

例如:

  • 头像
  • 简历
  • 合同扫描件
  • 作品图片

2. 网站静态资源

例如:

  • 图片素材
  • 前端构建产物
  • 下载附件

3. 音视频文件

例如:

  • 短视频
  • 课程视频
  • 音频素材

4. 备份和归档

例如:

  • 数据库备份
  • 日志归档
  • 历史文件存档

5. 大数据与数据处理中间文件

例如:

  • 离线数据文件
  • 导入导出文件
  • 模型训练素材

常见云厂商缩写分别是什么

这一块很容易混。

常见对象存储命名大致是:

  • TOS:火山引擎对象存储
  • OSS:阿里云对象存储
  • COS:腾讯云对象存储
  • OBS:华为云对象存储
  • S3:AWS 对象存储服务

虽然名字不同,但核心概念往往都差不多:

  • Bucket
  • Object
  • 权限策略
  • 生命周期
  • 域名访问
  • CDN 加速

所以你学会的是“对象存储这类产品的通用思路”,不是只会某一家云厂商。

对象存储在云原生体系里处在什么位置

如果把一个典型云上系统画出来,大概是这样:

云原生位置对象存储是应用系统旁边的文件基础设施流量从入口进入应用服务,结构化数据进数据库,文件类数据进对象存储。
用户 / 浏览器 / App
域名 / CDN / 负载均衡
前端服务 / 后端服务

数据库

结构化业务数据
图片 / 视频 / 附件 / 静态资源 / 备份

在这张图里:

  • 负载均衡负责流量入口
  • 应用服务负责业务处理
  • 数据库负责结构化业务数据
  • 对象存储负责文件类数据

所以对象存储不是“替代后端”的,而是云原生系统中的一个基础存储组件。

小白最容易混淆的几个点

对象存储是不是网盘

有点像,但不完全一样。

网盘更偏终端用户产品。
对象存储更偏云基础设施能力。

对象存储是不是数据库

不是。
它不擅长事务型关系查询,核心能力是文件对象的存储和访问。

对象存储是不是 CDN

也不是。
对象存储负责存,CDN 负责加速分发。

对象存储是不是本地磁盘

不是。
本地磁盘更像单机存储,对象存储更像云上的可扩展文件仓库。

一份适合记忆的总图

总览对象存储的核心要点把“存什么、为什么不用本地磁盘、核心概念、常见链路”放在一张记忆卡里。
01

存什么

  • 图片
  • 视频
  • 文档
  • 静态资源
  • 日志
  • 备份
02

为什么不用服务器本地磁盘

  • 不方便扩容
  • 不利于多机共享
  • 运维成本高
  • 公网分发不友好
04

常见链路

  • 用户上传
  • 后端生成凭证
  • 上传到对象存储
  • 数据库存文件地址
  • 用户通过对象存储或 CDN 访问

最后怎么真正理解对象存储

不要把对象存储只理解成“云盘”或者“文件服务器”。

更准确的理解方式是:

对象存储是一种面向海量文件对象的云上存储能力,适合承载静态资源、用户上传文件、音视频、备份和归档,并常常与数据库、应用服务、CDN 一起构成完整的云上系统。

当你能把这句话和下面这些概念对应起来时,说明你已经真正入门了:

  • 为什么文件不直接存应用服务器
  • Bucket 和 Object 分别是什么
  • 数据库和对象存储如何配合
  • 为什么对象存储常常和 CDN 一起出现
  • 为什么私有文件需要签名 URL 或权限控制
  • 为什么还要做生命周期和版本管理

如果后面你继续深入,这条学习线通常会顺着延伸到:

  • 文件上传架构设计
  • 对象存储权限与安全
  • 静态资源发布和 CDN 缓存
  • 前端直传与后端中转的区别
  • 云上多媒体处理链路