阿里云 OSS:存储类型、CDN 与静态托管全面指南

📅 · ChengziCloud - 一站式国际云开户与充值服务

阿里云对象存储服务(OSS)是一个高持久性、高可扩展且安全的对象存储平台,为全球无数云原生应用提供支撑。从为全球用户群提供静态资源到归档 PB 级的合规数据,OSS 提供业界领先的性能和 99.999999999%(十一个九)的数据持久性。本深度指南涵盖 OSS 的每个关键方面——存储类型选择、生命周期管理、CDN 加速、静态网站托管、安全加固和成本优化——为您提供在阿里云上设计生产级存储架构所需的知识。

OSS 架构基础

OSS 将数据以对象形式存储在存储空间(Bucket)中。存储空间是一个逻辑容器,属于特定区域,并在阿里云生态系统中具有全局唯一的名称。每个对象由数据(文件内容)、元数据(描述对象的键值对)和唯一键(对象名称,包括任何前缀路径)组成。

与传统文件系统不同,OSS 具有扁平的命名空间——不存在真正的目录。文件夹的外观是通过键前缀实现的(例如,images/2024/photo.jpg)。这种扁平架构使 OSS 能够水平扩展到 EB 级数据而不会出现性能下降。

关键性能特性

- 吞吐量: 在大多数区域,OSS 支持每个存储空间高达 10 Gbps 的带宽,如有需要可申请更高限制。读取吞吐量随并发连接数增加而扩展,使 OSS 成为大规模并行数据处理的理想选择。 - 延迟: 在同一区域内,小对象的首字节延迟通常在 10-50 毫秒之间。跨区域延迟更高,取决于地理距离。 - 请求速率: OSS 每个前缀每秒可处理数千个 PUT/GET 请求。为最大化高吞吐量工作负载的性能,将对象键分布到多个前缀(例如,使用基于哈希的键分布)。

存储类型:选择合适的层级

阿里云 OSS 提供五种存储类型,每种类型针对不同的访问模式和成本特征进行优化。选择适当的类型是优化 OSS 成本的最重要决策。

标准存储

标准存储是默认的存储类型,专为频繁访问的数据设计。它提供低延迟、高吞吐量的访问,无数据取回费用,没有最短存储时间要求。

| 属性 | 值 | |-----------|-------| | 数据持久性 | 99.999999999%(11 个九) | | 服务可用性 | 99.99% | | 最短存储时间 | 无 | | 数据取回费用 | 无 | | 典型应用场景 | 实时分析、活跃内容仓库、移动应用数据、网站资源 |

当您的数据被定期访问——至少每月几次时,标准存储是正确的选择。如果访问模式转变为低频访问,生命周期策略可以自动将对象转换到更低成本的层级。

低频访问存储(IA)

低频访问存储针对访问频率较低但在需要时须立即检索的数据进行了优化。存储成本显著低于标准存储,但会产生按 GB 计费的数据取回费用。

| 属性 | 值 | |-----------|-------| | 数据持久性 | 99.999999999% | | 服务可用性 | 99.00% | | 最短存储时间 | 30 天 | | 数据取回费用 | 有(按取回的 GB 计费) | | 典型应用场景 | 数据库备份、长期日志存储、媒体文件的辅助副本 |

30 天的最短存储时间意味着:在 30 天前删除的对象将按完整的最短存储期收费。在设计生命周期策略时务必考虑这一点。

归档存储

归档存储专为长期数据保留设计,访问频率极低(每季度一次或更少)。存储成本大幅降低,但数据在访问前必须进行解冻还原——此过程大约需要一分钟。

| 属性 | 值 | |-----------|-------| | 数据持久性 | 99.999999999% | | 服务可用性(还原后) | 99.99% | | 最短存储时间 | 60 天 | | 取回时间 | 约 1 分钟(标准取回模式) | | 数据取回费用 | 有(按取回的 GB 计费) | | 典型应用场景 | 合规档案、长期备份、财务记录、医疗影像归档 |

归档存储支持两种取回模式:标准模式(1-5 分钟,标准费用)和加速模式(小对象 1-5 分钟,费用更高)。在将需要快速访问的数据提交到归档存储之前,务必使用您的具体数据大小测试取回时间。

冷归档存储

冷归档是阿里云最低成本的存储层级,适用于极少访问的数据——通常每年一次或两次。它是需要保留多年但几乎从不访问的合规数据的理想选择。

| 属性 | 值 | |-----------|-------| | 数据持久性 | 99.999999999% | | 服务可用性(还原后) | 99.99% | | 最短存储时间 | 180 天 | | 取回时间 | 数小时(取决于取回模式) | | 典型应用场景 | 法规档案、磁带替代方案、地震数据归档 |

冷归档应保留给真正的"一次写入、永不读取"场景。180 天的最短存储期和缓慢的取回时间使其不适合任何可能需要按需访问的数据。

归档(深度归档)——上一代产品

阿里云此前提供"深度归档"层级;该层级已被冷归档取代。如果您有现有的深度归档对象,请审查您的生命周期策略,并考虑迁移到更新的冷归档层级以获得更好的定价和功能。

生命周期管理:自动化存储优化

生命周期策略是根据对象存在时间自动在存储类型之间转换对象或使其过期(删除)的规则。正确配置生命周期规则对于维持健康的成本结构至关重要,尤其是随着数据量增长。

生命周期规则结构

每条生命周期规则包括:

- 匹配条件: 前缀过滤器(例如 logs/)或标签过滤器,用于标识规则适用的对象范围 - 操作: 转换到更低成本的存储类型(IA、归档、冷归档)或过期(删除) - 时间: 对象创建后触发操作的天数

推荐的生命周期策略

热数据分层(标准 → IA): 在无访问 30 天后将对象从标准存储转换为 IA。这可以获取大部分成本节省,且不影响可用性。示例规则:

` 前缀:" "(所有对象) 操作:30 天后转换为 IA `

日志数据策略: 日志文件遵循可预测的生命周期——第一周频繁访问,一个月内偶尔访问,90 天后从不访问:

` 前缀:"logs/" 规则 1:7 天后转换为 IA 规则 2:30 天后转换为归档 规则 3:90 天后过期 `

备份保留策略: 数据库和应用备份通常需要为合规目的保留,但很少执行还原:

` 前缀:"backups/db/" 规则 1:7 天后转换为 IA 规则 2:30 天后转换为归档 规则 3:365 天后转换为冷归档 规则 4:2555 天(7 年,用于合规)后过期 `

生命周期规则限制

- 每个存储空间最多可有 1,000 条生命周期规则 - 规则每天(异步)评估一次——规则生效前最多可能有 24 小时的延迟 - 小于 64 KB 的对象不会被转换为 IA(从成本模型来看不经济) - 开启版本控制的存储空间:生命周期规则独立应用于当前版本和非当前版本

CDN 集成:阿里云 CDN + OSS

通过阿里云 CDN(内容分发网络)加速 OSS 内容分发,是改善全球用户使用体验的最有效方法之一。通过将 OSS 对象缓存到遍布全球的边缘节点,CDN 降低了延迟并减轻了 OSS 存储空间的流量负载。

将 OSS 设置为 CDN 源站

1. 创建 CDN 加速域名: 在 CDN 控制台中,添加一个新域名(例如 cdn.example.com),并将源站类型设置为"OSS 域名"。输入您的 OSS 存储空间公网端点(例如 my-bucket.oss-cn-hangzhou.aliyuncs.com)。

2. 在 OSS 存储空间上配置 CORS: 如果您的 CDN 域名与 OSS 域名不同,请在存储空间上配置跨域资源共享(CORS),以允许来自 CDN 域名的请求。没有 CORS,浏览器将阻止对字体、脚本和其他 Web 资源的跨域请求。

3. 设置缓存规则: 在 CDN 控制台中配置缓存过期(TTL)规则。常见设置包括: - 静态资源(图片、CSS、JS):7-30 天 - HTML 页面:1 小时到 1 天(如果内容频繁变化) - API 响应:不缓存,或极短时间缓存(1-60 秒)

4. 启用 HTTPS: 将您的 SSL 证书上传到 CDN 控制台,或使用阿里云的免费 CDN 证书。配置 HTTPS 重定向,并将最低 TLS 版本设置为 1.2 以确保安全合规。

OSS 私有存储空间 + CDN 鉴权

当您的 OSS 存储空间设置为私有(从安全角度推荐)时,您仍然可以通过 CDN 使用两种鉴权方法提供内容:

CDN OSS 鉴权(推荐): 在 CDN 控制台中,启用"回源鉴权"并选择 OSS 存储空间。阿里云自动管理 CDN 与 OSS 之间的鉴权。这是最简单且最安全的方法。

签名 URL 回源: CDN 使用预签名 URL 从私有存储空间获取内容。您在 CDN 控制台中配置签名有效期。此方法提供更精细的控制,但需要谨慎的密钥轮换管理。

缓存刷新与预热

当您更新 OSS 中的内容时,CDN 边缘节点上的缓存副本必须被清除:

- 缓存刷新: 从边缘节点移除缓存内容。支持基于 URL 的刷新(单个文件)和基于目录的刷新(前缀下的所有文件)。刷新操作有每日限制——请仔细规划批量更新。 - 缓存预热: 在用户请求之前主动将内容从源站加载到边缘节点。适用于高关注度的内容发布,确保首位访客即可获得缓存性能体验。

OSS 静态网站托管

OSS 可以直接托管静态网站——HTML、CSS、JavaScript、图片和其他静态资源——无需任何计算基础设施。结合 CDN,这将创建一个全球分布的、无服务器的 Web 托管平台。

启用静态网站托管

1. 在 OSS 控制台中,进入您的存储空间,在基础设置中启用"静态页面"。 2. 配置默认主页(例如 index.html)和默认 404 错误页面(例如 404.html)。 3. 将存储空间 ACL 设置为公共读(仅适用于公开网站)和/或配置存储空间策略,允许来自 CDN 公网 IP 段的 GetObject

域名与 DNS 配置

OSS 提供默认的存储空间端点,但对于生产网站,应绑定自定义域名:

1. 在 OSS 存储空间的域名管理部分添加您的自定义域名(例如 www.example.com)。 2. 通过在 DNS 配置中添加提供的 TXT 记录来验证域名所有权。 3. 创建 CNAME 记录,将您的域名指向 OSS 存储空间端点,或者更好的是,指向您的 CDN 域名(如果使用 CDN 加速)。 4. 如果使用 CDN 配合自定义域名,将 SSL 证书上传到 CDN 并配置 HTTPS。

单页应用(SPA)路由

对于使用 React、Vue 或 Angular 构建的 SPA,客户端路由要求所有路径都返回 index.html。在 OSS 静态网站设置中,将默认 404 页面设置为 index.html,并使用 SPA 框架的路由器处于"history"模式。或者,使用 CDN 的 URL 改写功能将所有路径重定向到 index.html

静态托管最佳实践

- 环境隔离: 为开发、预发和生产环境使用不同的 OSS 存储空间(或同一存储空间内的不同前缀)。 - 资源版本化: 在资源文件名后追加内容哈希(例如 app.a3f2b1c.js),以实现积极的 CDN 缓存和安全的缓存失效。 - gzip/Brotli 压缩: 在上传到 OSS 之前对基于文本的资源(HTML、CSS、JS、JSON、SVG)进行预压缩,并配置 CDN 以适当的 Content-Encoding 头部提供压缩版本。 - 安全头部: 使用 CDN 的 HTTP 头部配置添加安全头部:Strict-Transport-SecurityX-Content-Type-OptionsX-Frame-OptionsContent-Security-Policy

安全加固

访问控制层级

OSS 提供多层访问控制:

1. 存储空间 ACL: 存储空间级别的权限(私有、公共读、公共读写)。除非托管公开网站,否则始终默认为私有。

2. 对象 ACL: 每个对象的权限,可覆盖存储空间 ACL。谨慎使用,以避免增加访问管理的复杂性。

3. 存储空间策略: 基于 JSON 的访问策略语言,提供基于主体、操作、条件(IP 地址、Referer、时间)和资源的细粒度控制。存储空间策略是授予跨账号访问和特定前缀公共读访问的推荐方法。

4. RAM(资源访问管理)策略: 附加到 RAM 用户或角色的 IAM 风格策略,控制对 OSS 操作的 API 级访问。使用 RAM 策略授予开发人员和应用所需的最小权限(最小权限原则)。

加密

服务端加密(SSE): - SSE-OSS: 阿里云管理加密密钥。在存储空间设置中一键启用。所有对象使用 AES-256 进行静态加密。 - SSE-KMS: 使用阿里云密钥管理服务(KMS)管理加密密钥。提供密钥轮换、审计功能,并可用客户主密钥(CMK)。

客户端加密: 在上传到 OSS 之前,在客户端加密数据。阿里云提供内置客户端加密支持的 SDK。这是最安全的选项,但需要您自行管理加密密钥。

数据保护功能

- 版本控制: 启用存储空间版本控制以防止意外删除和覆盖。对象的所有版本都会被保留,您可以随时恢复以前的版本。请注意,版本控制会增加存储成本,并且一旦启用就无法禁用——只能暂停。 - 跨区域复制(CRR): 将对象异步复制到不同区域的存储空间,用于灾备、合规或延迟优化。您可以复制所有对象,或按前缀/标签进行过滤。 - 对象锁定: 对对象应用 WORM(一次写入多次读取)模式,在指定保留期内阻止删除或修改。对象锁定对于符合 SEC Rule 17a-4 和 FINRA 等法规至关重要。

成本优化深度解析

OSS 成本由四个部分组成:存储、请求、数据传输和数据取回(针对 IA/归档)。理解每个组成部分对成本控制至关重要。

存储成本优化

- 合理选择存储类型: 审计对象访问模式,将冷数据转换到更低成本的层级。使用 OSS 清单报告或日志服务分析访问频率。 - 删除不完整的分片上传: 失败的分片上传会积累碎片,产生存储费用。配置生命周期规则,在 7 天后自动终止不完整的分片上传。 - 上传前压缩: 在上传前应用压缩(文本用 gzip,媒体用适当的编解码器),以减少存储占用。

请求成本优化

- 减少 PUT 请求: 尽可能在上传前将小文件批量打包成更大的归档文件(tar、zip)。OSS 传输加速可以减少上传时间,但会增加按 GB 计费的费用。 - 最小化 LIST 操作: LIST 请求按量计费,大规模使用时可能会变得昂贵。使用 OSS 清单代替频繁的 LIST 操作来枚举存储空间内容。 - 通过日志监控: 启用 OSS 访问日志以跟踪请求模式并识别优化机会。在日志服务(SLS)或 MaxCompute 中分析日志。

数据传输成本优化

- 使用 CDN: 通过 CDN 提供数据可降低 OSS 数据传输成本(在大多数场景下,CDN 从 OSS 到 CDN 边缘节点的回源流量免费或有折扣)。CDN 流量也比直接的 OSS 数据传输便宜。 - 将计算与存储置于同一区域: 将 ECS 实例和 OSS 存储空间部署在同一区域。同一区域内的内部数据传输免费——仅互联网数据传输产生费用。 - 使用 VPC 端点: 创建 OSS 的 VPC 端点,通过阿里云骨干网而非公网传输流量。这提高了安全性(无公网 IP 暴露),并消除了区域内的互联网数据传输费用。

性能调优

分片上传

对于大于 100 MB 的对象,务必使用分片上传。分片上传将对象分割成多个分片,并行上传,然后通过单个请求完成上传。优点包括:

- 通过并行处理提高吞吐量 - 对网络故障具有弹性(仅需重新传输失败的分片) - 能够暂停和恢复上传 - 每个分片可支持高达 48.8 TB 的对象(但实际限制由应用约束决定)

OSS 传输加速

OSS 传输加速通过阿里云的全球加速终端节点网络路由上传和下载流量,降低跨境和远距离传输的延迟。传输加速在以下场景尤为有效: - 从国际位置上传内容到中国区域的 OSS 存储空间 - 从单一区域存储空间向全球用户提供内容(作为 CRR 的替代方案)

在存储空间设置中启用传输加速,并在 SDK 配置中使用加速端点(bucket-name.oss-accelerate.aliyuncs.com)。

范围获取与并行下载

对于大文件下载,使用 HTTP Range 请求并行下载对象分段。大多数 OSS SDK 原生支持此功能,自动将下载分割成多个并发连接。

总结

阿里云 OSS 不仅仅是简单的对象存储——它是一个综合性的数据管理平台,将存储类型、生命周期自动化、CDN 加速和静态托管整合为一个统一的服务。通过精心选择存储类型、自动化生命周期策略、集成 CDN 实现全球分发以及实施上述安全最佳实践,您可以构建同时具备高性能、成本效率和安全性的存储架构。

最成功的 OSS 部署是随着时间的推移而演进的。从一开始对所有数据使用标准存储,启用访问日志和版本控制以确保安全,然后随着访问模式逐渐清晰,迭代应用生命周期策略和存储类型转换。通过这种方式,OSS 可以从您的第一个 MB 无缝扩展到您的第 100 个 PB。

> 本文由 chengzicloud.cloud 提供,点击访问首页了解更多