OSS成本最佳实践

使用OSS时,您可以根据业务数据的变化合理规划存储类型、利用预付费与后付费策略等方式有效降低使用成本。

注意事项

  • 以下案例单价来自20240730日阿里云官网公布的OSS详细价格信息。因统计的价格日期不同,各个计费项的单价可能存在差异,实际使用时请以OSS产品定价页面发布的数据为准。

  • 以下案例仅覆盖常用的存储和数据请求的场景。如使用过程中涉及OSS其他功能,可能触发其他对应的计费项。更多信息,请参见计费项

确认Bucket容量增长是否符合预期

通过Bucket存储数据时,将根据数据的存储容量以及存储类型收取对应的存储费用。您可以使用CloudLens来深入分析您的Bucket使用模式,通过跟踪Bucket容量等关键指标从而掌握数据集在每日、每周乃至每月的访问趋势。

如果您想获得更精细的费用情况,您可以通过定期查询账号级别的OSS用量情况,导出CSV用量明细表,查看当前账号下各个Bucket对应的存储容量数据,以此判断存储容量增长是否符合预期。具体步骤,请参见查询账号级别的用量情况

如果存储容量增长异常,可以考虑采用修改ACL为私有权限、配置Bucket Policy等方式,避免其他用户以未授权的方式对OSS资源进行各类操作,例如上传大量不符合预期的Object引起存储容量突增、恶意访问Object引起大额的外网流出流量费用等。更多信息,请参见降低因账号密码泄露带来的未授权访问风险

降低Bucket拥有者的外网流出流量和数据取回容量费用

假设Bucket拥有者授权其他用户通过外网方式访问该Bucket中的数据,且希望由请求者支付外网流出流量和读取低频访问类型数据的容量费用,可以开启请求者付费模式。具体操作,请参见开启请求者付费模式

重要

下行流量包无法用于抵扣启用请求者付费模式后由请求者从OSS经互联网下载至客户端所产生的外网流出流量费用。在这种模式下,外网流量费用仅按实际使用量进行计费。

配置生命周期规则

为了更有效地管理和降低您的OSS成本,建议您充分利用生命周期管理策略来实现成本效益最大化。

根据数据访问频率和响应时间转换存储类型

当您识别出数据集的使用频率降低或对数据实时访问的需求减少时,您可以通过合理设置数据的生命周期规则,在不影响数据访问性能的前提下,将数据自动转移到成本更低的存储类型。

选型参考

场景描述

数据访问频率

标准存储

适用于高频访问,实时读取的热数据

单文件月访问大于1

低频访问

适用于访问频率较低,但需要实时读取的温数据

单文件月访问不到1

归档存储

适用于需要长时间保存,访问概率极低,但访问时需要能快速取回的冷数据,解冻时间约为1分钟。

单文件90天访问不到1

重要

如果您将数据存储类型设为归档存储且未启用归档直读功能,则无法实现数据的实时访问,在访问数据前必须先进行解冻操作。

您可以根据不同的数据特性和使用频率,通过Object的前缀(Prefix)或标签(Tag)来筛选并为特定数据配置生命周期规则。对于那些不常被访问的冷数据,可以自动迁移至成本更低的归档存储中;而对于频繁访问的热数据,则保持在读取速度更快的标准存储类型上。这样不仅有助于优化存储成本,还能提高数据访问效率。

为了帮助您深入理解计算存储成本的方法以及如何根据需求选择最佳存储类型,我们现给出以下示例供您参考。

示例

用户A在华东-杭州的一个Bucket中把所有100TB的业务数据(1000万个Object)以标准存储(同城冗余)类型的方式存放在目录dir下,主要用于公司的日常运营。在业务的早期阶段,数据访问非常频繁。然而,随着业务的不断演进,数据访问模式也相应变化。为了实现成本优化,用户A希望根据不同的业务阶段调整业务数据的存储类型。

业务初期数据整体访问频繁

在业务初期,由于数据访问频繁,这100TB的数据每月平均被访问5次。此时用户对数据访问速度的需求非常关键,因此不宜选择无法实时读取的归档存储。用户A正在考虑继续选择使用标准存储或配置生命周期管理规则,将部分数据转为低频访问。

  • 标准存储的费用为0.15元/GB/月,GET请求在2000万次内免费,超出部分0.01元/万次,无数据取回费用。

  • 低频访问的费用是0.10元/GB/月,GET类型请求费用每月每地域为0.1元/万次,数据取回费为0.0325元/GB。

费用分析:

存储类型

数据总量

存储费用(元/月)

API请求费用(元/月)

数据取回容量费用(元/月)

总费用(元/月)

标准存储-同城冗余

100 TB

15360

30

0

15390

低频访问-同城冗余

100 TB

10240

500

16640

27380

由上表结果可以看出,数据访问频繁时,标准存储在成本和访问速度上都更具优势,既能保证数据的高效访问,又避免了低频访问模式下额外的读取费用。因此,业务数据在该阶段使用标准存储是最合适的选择。

业务增长后部分数据访问频次降低

随着业务的扩展,尽管数据存储总量保持在100TB不变,但随着业务的发展,数据访问模式发生了变化:90%的数据(即90TB)每月仅被访问一次,而剩下的10%(10TB)依然保持较高的访问频率。为了应对这一变化并控制成本,用户A考虑了两种策略:

  1. 继续使用标准存储:维持现状,继续使用标准存储类型。

  2. 应用生命周期规则:将访问频次降低的数据转换为更经济的低频访问类型,以减少存储成本。

费用分析:

  1. 我们可以计算得到所有业务数据使用标准存储的费用如下表:

    存储类型

    数据总量

    存储费用(元/月)

    API请求费用(元/月)

    数据取回容量费用(元/月)

    总费用(元/月)

    标准存储-同城冗余

    100 TB

    15360

    30

    0

    15390

  2. 使用生命周期规则通过前缀或标签筛选出平均每月被访问1次的业务数据,数量为90TB。配置该部分数据在最后一次被访问后的30天内,自动将其存储类型从标准存储转为低频访问类型。剩余10TB的业务数据仍使用标准存储。

    • 标准存储:存储费用为0.15元/GB/月,GET请求此时在2000万次内,无API请求费用,无数据取回费用。

    • 低频访问:存储费用是0.10元/GB/月,GET类型请求费用每月每地域为0.1元/万次,数据取回费为0.0325元/GB。

    存储类型

    数据总量

    存储费用(元/月)

    API请求费用(元/月)

    数据取回容量费用(元/月)

    总费用(元/月)

    标准存储-同城冗余

    10 TB

    1536

    0

    0

    1536

    低频访问-同城冗余

    90 TB

    9216

    90

    2995.2

    12301.2

在使用生命周期的场景下,结合两种存储类型的总费用为13837.2元,相比标准存储节省了约10.1%。鉴于访问频率已经降低,此时配置生命周期规则将部分业务数据转为低频访问类型是理想的低成本选择,它能够在保持数据访问速度的同时有效控制成本。

建议动作:

用户A可以配置生命周期规则,规则中指定与前缀匹配的文件在最后一次被访问后的30天内,自动将其存储类型从标准存储转为低频访问类型,实现成本优化和数据访问速度的平衡。具体步骤,请参见基于最后一次访问时间的生命周期规则

image

业务进入成熟期,冷数据考虑长期留存

随着业务逐渐成熟,用户A发现对部分业务数据的利用率下降,业务数据平均每季度被访问1次。用户A确认这部分业务数据在未来几个月内的访问需求极低,且用户可以接受短暂的数据读取的解冻时间。此时,用户A考虑配置生命周期规则,将这部分数据由当前的低频访问转为归档存储。

使用生命周期规则中通过前缀或标签筛选出平均每季度被访问1次的业务数据,数量为90TB。在最后一次被访问后的30天内,自动将其存储类型从低频存储转为归档访问类型。剩余10TB的业务数据由于访问频繁仍使用标准存储。

  • 标准存储:存储费用为0.15元/GB/月,GET请求此时在2000万次内,无API请求费用,无数据取回费用。

  • 归档访问:存储费用为0.033元/GB/月,GET类型请求费用每月每地域为0.1元/万次,数据容量取回费用为0.06元/GB。

存储类型

数据总量

存储费用(元/月)

API请求费用(元/月)

数据取回容量费用(元/月)

总费用(元/月)

标准存储-同城冗余

10 TB

1536

0

0

1536

归档访问-同城冗余

90 TB

3041.3

30

1843

4914.3

由上表可以看出,如果进一步配置生命周期规则将该部分业务数据由低频访问转为归档访问,结合两种存储类型的总费用为6450.3元,比将生命周期配置为低频访问节省的费用又降低了53.4%,实现了更显著的成本优化。

建议动作

如果您的访问模式已知且固定,规则中指定与前缀匹配的所有文件,修改配置为在数据最后一次被访问后的30天内自动将其存储类型从标准存储转为低频访问类型,在数据最后一次被访问后的60天后,自动将数据的存储类型从低频存储转为归档访问。此时,数据在距离最后一次访问时间30天后自动由标准存储转为低频访问,再过30天后转为归档访问,实现最优存储成本。具体步骤请参见基于最后一次访问时间的生命周期规则

清理历史版本Object

Bucket开启版本控制后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。当Bucket累积了大量的历史版本时,您可以结合生命周期规则删除不必要的历史版本,从而减少存储成本。

建议动作

建议您配置生命周期规则,自动删除达到指定天数的Object。

lifecycle.jpg

通过以上配置示例,OSS自动删除距离最后一次修改时间超过200天的历史版本Object。具体步骤,请参见基于最后一次修改时间的生命周期规则

清理过期碎片降低存储成本

分片上传后如果未调用CompleteMultipartUpload接口合并Part,这些Part将长期存储在Bucket中,占用存储容量,并产生存储费用。

建议动作

建议您配置生命周期规则,达到指定天数或者指定日期时自动删除碎片。

碎片.jpg

通过以上配置示例,OSS将自动删除生成时间早于2天的碎片。具体步骤,请参见基于最后一次修改时间的生命周期规则

购买资源包

购买资源包前

结合以上案例分析,用户AOSS某个Bucket内以低频访问的类型存储了100TB的数据,数据平均每月的访问频率为1次,包含1000万个对象,且要求数据可以实时访问。

计算得到未购买资源包前的存储使用成本如下:

存储类型

数据总量

存储费用(0.10元/月)

外网流出费用(08:00 - 24:00(忙时):0.50 元/GB)

数据取回容量费用(0.0325 元/GB)

总费用

低频访问-同城冗余

100 TB

10240

51200

3328

64768

购买资源包后

可以考虑购买低频-同城冗余存储包以及下行流量包抵扣相关计费项,不支持通过资源包抵扣的计费项使用按量付费的方式。

  • 通过低频-同城冗余存储包抵扣低频访问-同城冗余容量费用

    您可以通过购买规格为100TB,购买时长为1个月的低频-同城冗余存储包用于抵扣低频访问-同城冗余存储容量费用。

  • 通过下行流量包抵扣外网流出流量费用

    您可以通过购买100TB下行流量包,用于抵扣通过外网访问不同比例数据产生的外网流出流量费用。

  • 低频访问-同城冗余数据取回容量仅支持按量付费,不支持通过资源包抵扣。

结合使用资源包后,费用汇总如下:

存储类型

数据总量

低频-同城冗余存储包费用

下行流量包费用

数据取回容量费用(0.0325 元/GB)

总费用

低频访问-同城冗余

100 TB

9216

43008

3328

55552

从上表对比可以看出,使用资源包+按量付费的模式比仅使用按量付费可以节省14%的费用。

建议动作

购买低频-同城冗余存储包以及下行流量包。具体操作,请参见资源包购买指南