云计算基础

对象存储怎么选:OSS、S3 与自建 MinIO 对比

对象存储选型只需回答三个问题:数据以什么形态被访问、规模与访问频次如何分布、团队愿不愿意为运维负责。多数业务应直接用云厂商对象存储(OSS/COS/S3 等),因为省下的运维成本远大于单价差;只有当数据量极大、下行流量占比高、或有明确的数据主权要求时,自建 MinIO 才划算。

先把三种存储分清

类型 访问方式 典型产品 适合场景
块存储 挂载为裸磁盘,需格式化文件系统 云硬盘、EBS 数据库、系统盘、需要低延迟随机读写的应用
文件存储 NFS/SMB 挂载为目录,多机共享 NAS、EFS 共享配置文件、传统应用、容器共享目录
对象存储 HTTP API(GET/PUT),扁平命名空间 OSS、COS、S3、MinIO 图片视频、备份归档、日志、静态站点、数据湖

对象存储的优势是近乎无限的容量、按量计费、自带多副本与跨区冗余,且可直接用 HTTP 访问、便于 CDN 加速。短板同样明确:不支持随机写和文件内追加,对象写入后只能整体覆盖,也不适合数据库或 POSIX 语义场景。

S3 协议兼容性决定迁移成本

对象存储事实上以 S3 API 为通用标准。兼容 S3 的意义在于:SDK(boto3、aws-sdk、minio-go)、命令行工具(s3cmd、rclone、mc)、备份与大数据生态(Hadoop S3A、Velero、Loki、ClickHouse 冷热分层)都可以直接复用,迁移时往往只改 endpoint、AK/SK 和 region。

  • 兼容程度要看细节:PUT/GET/LIST、分片上传、预签名 URL 大多支持;但桶策略语法、版本控制、对象锁、事件通知、跨区复制等高级能力各家实现不一。
  • 一致性模型:主流云厂商现已提供强一致(写后读、覆盖后读),自建方案需确认分布式一致性实现,避免出现"刚上传就 404"。
  • 认证差异:部分厂商使用自有签名算法或额外鉴权头,SDK 需切换,迁移前先做兼容性验证。

选型时把"是否兼容 S3"当成硬指标,而不是加分项。它决定了未来能不能换供应商,也决定了你的应用代码要不要为存储写一层适配。

成本结构:不只看单价

对象存储账单通常由四部分构成,其中被低估的往往是后两项:

成本项 计费维度 常见误区
存储容量 按 GB/月,按存储类型分档 只看标准存储单价,忽略低频/归档的取回费用
请求次数 按万次计费,读写分别计价 小文件高频访问时,请求费可能超过存储费
下行流量 按 GB 计费,公网出流量最贵 图片站点未接 CDN,流量费成为主要开销
数据取回/处理 归档取回、跨区复制、图片处理 把归档当备份长期存放却频繁取回

省钱的关键动作是生命周期规则:按对象年龄自动转低频、转归档、到期删除。比如日志 30 天转低频、90 天转归档、365 天删除;用户图片则留标准存储并配 CDN 降低回源。规则按前缀分目录设置,不要整桶一刀切。整体方法见 云计算成本优化。

生命周期与归档策略

  • 标准存储:热数据,毫秒级访问,单位容量最贵,适合频繁读取的图片、视频、接口资源。
  • 低频访问:访问频次低但要求实时可取,单价更低、按次收取回费,适合月度报表、历史订单附件。
  • 归档/冷归档:单价极低,取回需要分钟到小时级等待,适合合规备份、审计日志、冷备数据。
  • 深度归档:适合几乎不访问但必须留存的数据,取回成本与时间最高。

实用判断:某类数据一年被读取的次数是个位数就进归档;每天都有读取则留在标准存储并考虑接 CDN。混放是最大的浪费来源——整桶都放标准存储,等于为冷数据付热数据的价钱。

自建 MinIO 的适用与坑

MinIO 是兼容 S3 协议的开源对象存储,单机模式适合开发测试,分布式模式(多节点多磁盘、纠删码)可支撑较大规模。它的核心价值是数据不出机房与省掉公网下行流量费:当应用与存储同在内网、数据量大时,经济性明显优于云对象存储。

代价也要清楚:

  1. 可靠性要自己兜底:纠删码能容忍磁盘故障,但节点级、机房级故障需要自己设计多站点复制;云厂商的跨可用区冗余不是免费的默认项。
  2. 运维成本真实存在:磁盘更换、容量规划、版本升级、监控告警、故障演练都需要人。数据量增长后,扩容不是加盘那么简单,要重新平衡。
  3. 性能取决于硬件:小文件高并发对元数据与磁盘 IO 压力大,需 SSD 与足够带宽,实测比宣称值重要。
  4. 生态兼容有边界:图片处理、事件通知联动等厂商特有功能自建没有,需额外组件补齐。
  5. 安全与合规责任转移:加密、访问审计、防误删(对象锁)、备份策略全部由你负责。

折中方案是混合:热数据与对外访问用云对象存储,内部备份与日志归档放自建 MinIO,通过 S3 接口统一访问,迁移时只改 endpoint。

选型对比

维度 云厂商对象存储(OSS/COS/S3) 自建 MinIO
初始投入 几乎为零,按量付费 需采购服务器与磁盘,前期资本支出高
运维负担 厂商负责,用户只管数据 自行负责升级、扩容、故障处理
可靠性 默认多副本/纠删码 + 跨区冗余 取决于部署拓扑,需自行设计冗余
公网流量成本 较高,是主要开销之一 内网访问几乎为零,公网取决于带宽
弹性扩容 无上限,即时生效 受硬件限制,扩容需规划
生态与高级功能 图片处理、CDN 联动、跨区复制、数据湖集成齐全 基础 S3 能力完整,高级功能需自建
数据主权 数据在厂商侧,受合规约束 完全自控,适合强合规场景
适用规模 从几 GB 到 PB 级都合适 百 GB 以上且流量内网化时才划算

实操建议:先用云对象存储跑通业务,把访问层抽象成 S3 接口;当存储与流量成本在总账单中占比超过一定阈值、且团队具备运维能力时,再把冷数据与内部数据迁到 MinIO。存储选型从来不是二选一,而是按数据温度分层。服务器与带宽的选型可参考 云服务器选购指南,流量计费细节见 云服务器带宽与流量计费避坑。

常见问题

对象存储能直接当网盘或数据库用吗?

当网盘可以,但它不支持文件内随机修改,每次都得整体重传,也没有目录树语义(只有前缀模拟)。当数据库不行——不提供事务、行级更新与低延迟随机写。它适合存整体读写的不可变对象,如备份、图片、日志。

自建 MinIO 真的比云对象存储便宜吗?

只有大容量且以内网访问为主时才便宜。云存储单价看似高于自建硬件,但自建要算上采购、电力、运维人力与冗余副本的额外容量。真正的分水岭是公网下行流量:业务有大量对外分发时,自建或接 CDN 的收益会放大。

对象存储的账单为什么比预估高很多?

最常见的原因是忽略了请求次数与下行流量。小文件高并发场景下请求费可超过存储费;未接 CDN 的图片站点流量费往往是大头。其次是未设生命周期规则,冷数据一直按标准存储计费。建议按月拆解四类费用——容量、请求、流量、取回,定位真正的增长项。

从一家云的对象存储迁到另一家,成本高吗?

只依赖标准 S3 API 的话,迁移主要改 endpoint、凭证和 region,配合 rclone 或 mc 同步数据即可。麻烦在私有扩展功能与出口流量费——大规模迁出的下行流量成本常被低估。

延伸阅读