您可以通过基于最后一次访问时间(Last Access Time)策略的生命周期规则来自动监测数据的访问模式并识别冷数据,然后将识别出来的冷数据进行存储类型的转换,从而达到数据的冷热分层存储,最终降低存储成本。

使用场景

  • 多媒体场景

    某网站的视频、图片存储在OSS上,历史数据会逐渐从热转冷。因此,您可能需要将网站内长时间不被访问的数据保存为低频访问类型。此外,部分数据距离上传时间已久,但仍然是热门访问数据,这部分数据需要继续保存为标准存储类型。在该场景下应选用基于最后一次访问时间的生命周期规则,用于自动识别冷热数据并进行分层存储,从而降低存储成本。

  • 相册或网盘场景

    对于长时间没有访问的冷数据,希望设置自定义转储天数,自动将冷数据转为低频访问类型,并确保数据的实时访问。

  • 生命科学场景

    基因测序生成的大量业务数据,往往需要根据数据的最后访问时间而非最后修改时间来判断数据的冷热。按以往,客户只能手动通过日志分析或其他方式进行数据冷热的分层管理。但如果选用基于最后一次访问时间的生命周期规则,则可实现由服务端根据最后访问时间来自动识别冷热数据并实现数据分层存储。不仅如此,您还可以在同一条生命周期规则中同时结合最后访问时间与最后修改时间的策略,从而更灵活地进行数据管理。

使用限制

  • 匹配条件

    生命周期规则目前仅支持根据前缀和标签进行匹配,不支持通配符匹配、后缀匹配以及正则匹配。

  • 碎片过期限制
    不支持对重叠前缀的Object设置两条或两条以上包含碎片过期策略的生命周期规则。示例如下:
    • 示例一

      您对整个Bucket设置了一条包含碎片过期策略的生命周期规则,则不支持对Bucket中任意前缀的Object再设置一条包含碎片过期策略的生命周期规则。

    • 示例二

      您对某个Bucket中前缀为dir1设置了一条包含碎片过期策略的生命周期规则,则不支持对该Bucket中包含重叠前缀(例如dir1/dir2)的Object再设置一条包含碎片过期策略的生命周期规则。

注意事项

规则数量

通过控制台最多可配置100条生命周期规则,单条生命周期规则中可同时包含最后一次修改时间以及最后一次访问时间的策略。如果您需要配置更多数量的生命周期规则,请使用SDK或者命令行工具ossutil。

在开通了OSS-HDFS服务的Bucket中配置生命周期规则

如果您对开通了OSS-HDFS服务的Bucket设置或更新为匹配整个Bucket的生命周期规则,需通过NOT元素排除.dlsdata/,避免因生命周期规则触发的Object删除或存储类型转换行为影响OSS-HDFS数据读写。

lifecycle

最后一次访问时间更新策略

生命周期页面打开启用访问追踪开关后,OSS默认以访问跟踪开启时间作为Bucket中所有Object的最后一次访问时间,后续会根据Object的访问情况自动更新Object的最后一次访问时间。如果24小时内,同一个Object有多次GetObject请求,则OSS会将首次GetObject的请求时间记录为Object最后一次访问时间。

此外,访问目标Object对应的软链接时不会更新目标Object的最后一次访问时间。

转储的Object类型

  • 基于最后一次访问时间的生命周期规则支持将Object从标准存储类型转为低频访问类型,您还可以选择当Object被访问后是否自动转回标准存储类型。
  • 基于最后一次访问时间的生命周期规则支持将Object从标准存储或低频访问类型转为归档或冷归档存储类型,也可以选择将Object从归档转为冷归档存储类型。如果您需要将Object从标准存储或低频访问类型转换为归档或冷归档存储类型,请提交工单申请转换为归档或冷归档类型的权限,申请通过后您需要指定转换的目标存储类型。
    重要 工单申请通过后,如果您基于最后一次访问时间策略将Object从标准存储或低频访问类型转为归档或冷归档类型,则Bucket中归档或冷归档类型Object的最后一次访问时间默认为该Bucket开启访问追踪的时间。

费用说明

  • Object监控管理费用

    开启访问追踪后会产生Object监控管理费,但OSS暂不收取该费用。

  • 存储费用
    您可以针对任意大小的Object设置基于最后一次访问时间的生命周期规则,OSS会根据Object所处的存储类型收取不同的存储费用。
    • 标准存储类型Object,按实际存储大小计算。
    • 低频访问、归档以及冷归档类型Object小于64 KB时,按照64 KB计算。当大于或等于64 KB时,按照实际存储大小计算。
  • 低频访问不足规定时长容量费用

    低频访问类型Object有最低30天的存储时长要求。如果存储时长未达到最低天数要求,还会产生不足规定时长容量费用。该计费项结合生命周期规则的示例说明如下:

    示例一:标准类型Object在其创建10天后,通过生命周期将其转换为低频访问类型,过了5天后又将其转回标准存储。此时会产生15天的低频访问不足规定时长容量费用。

    示例二:标准类型Object在其创建10天后,通过生命周期将其转换为低频访问类型,过了15天后将其删除。此时会产生5天的低频访问不足规定时长容量费用。

    通过CopyObject将Object覆写为低频访问类型时,Object也有最小存储天数限制。例如标准存储类型文件在其创建10天后,通过CopyObject覆写操作将存储类型转换为低频存储,再过10天后将其删除。此时会产生20天的低频访问存储不足规定时长费用。

  • 低频访问数据取回费用

    访问低频访问类型文件产生的费用,按数据取回量计费。

使用OSS控制台

  1. 登录OSS管理控制台
  2. 单击Bucket列表,然后单击目标Bucket名称。
  3. 在左侧导航栏, 选择数据管理 > 生命周期
  4. 生命周期页面,打开启用访问追踪开关,然后单击创建规则
  5. 创建生命周期规则面板,按如下说明配置生命周期规则。
    • 存储空间未开启版本控制
      区域 配置项 说明
      基础设置 状态

      设置生命周期规则的状态,可选择启动禁用

      策略

      选择生命周期规则作用的Object。您可以选择按前缀匹配配置到整个Bucket

      是否允许前缀重叠
      OSS默认会检查各个生命周期规则的前缀是否重叠。例如,您设置了以下两条包含重叠前缀的生命周期规则:
      • 规则1

        指定该Bucket内所有前缀为dir1/的Object在距离最后一次修改时间180天后删除。

      • 规则2

        指定该Bucket内所有前缀为dir1/dir2/的Object在距离最后一次修改时间30天后转低频访问类型,60天后删除。

      在未选中该选项的情况下,因后台检测到dir1/dir2/目录下的Object同时匹配两条删除规则,因此会拒绝设置以上两条生命周期规则,并报错Overlap for same action type Expiration.

      在选中该选项的情况下,dir1/dir2/下的Object会在30天后转低频访问类型,60天后删除。dir1/下的其他Object会在180天删除。

      前缀
      输入规则要匹配的Object名称的前缀。
      • 前缀设置为img,表示匹配名称以img开头的所有Object,例如imgtest.png、img/example.jpg等。
      • 前缀设置为img/,表示匹配名称以img/开头的所有Object,例如img/example.jpg、img/test.jpg等。
      标签

      生命周期规则仅针对拥有指定标签Object生效。例如选择了按前缀匹配,设置前缀为img,并设置标签的key为a,value为1。则该规则将匹配所有名称以img开头,标签为a=1的Object。关于对象标签的更多信息,请参见对象标签

      NOT

      NOT选项用于设置生命周期规则对指定前缀和标签的Object不生效。

      重要
      • 开启NOT选项时,前缀和标签必须至少存在一项,即同时设置前缀和标签或者只设置前缀或标签。
      • NOT语义定义标签中的key不支持与标签配置项中定义的key相同。
      • 开启NOT选项后,不支持设置碎片过期策略。
      文件执行策略设置 文件过期策略

      选择Object过期策略,可选择过期天数不启用。选择不启用时,文件过期策略不生效。

      生命周期管理规则

      配置转换Object存储类型或者删除过期Object的规则。

      当您选择了最后一次访问时间策略,然后将过期天数设置为30,并指定数据在超出指定过期天数后将自动转换为低频存储类型(数据被访问后,依旧保留在低频档),则最后访问日期为2021年09月01日的Object会在2021年10月01日被转换为指定的存储类型。

      说明 当您选择基于最后一次访问时间的生命周期管理规则时,允许指定该规则仅对大于64 KB的文件生效,也可以指定为对所有文件生效。
      碎片执行策略设置 碎片过期策略

      设置对过期碎片执行的操作。如果选中了标签,则无法配置该选项。您可以选择碎片过期策略的过期天数过期日期,也可以选择不启用碎片过期策略。当选择不启用时,碎片过期策略不生效。

      重要 生命周期规则至少包含文件过期策略或碎片过期策略。
      碎片规则

      根据碎片过期策略选择的过期天数或过期日期设定碎片何时过期,碎片过期后会被自动删除,且删除后不可恢复。

    • 存储空间已开启版本控制

      开启版本控制后,基本设置碎片执行策略设置区域涉及的配置项,与未开启版本控制的配置方法相同。以下表格仅介绍与未开启版本控制相比,开启版本控制后配置项存在的差异。

      区域 配置项 说明
      当前版本文件执行策略设置 清理对象删除标记

      开启版本控制后,清除策略中增加了清理对象删除标记选项,其他选项与未开启版本控制时相同。

      选择此选项后,如果当前Object仅有一个版本且为删除标记时,则OSS将删除过期Object的删除标记。如果当前Object有多个版本,且Object的最新版本为删除标记时,则OSS将保留该删除标记。关于删除标记的更多信息,请参见删除标记

      历史版本文件执行策略设置 文件过期策略

      设置历史版本文件的过期策略,可选择过期天数不启用。当选择不启用时,文件过期策略不生效。

      生命周期管理规则

      设定一个过期天数N,历史版本的Object会在其被转换为历史版本的N天后过期,并在过期的第二天执行指定操作。例如设置为30,则在2021年09月01日被转为历史版本的Object会在2021年10月01日被转换为指定存储类型或被删除。

      重要 您可以通过Object下一个版本的最后一次修改时间确定Object被转为历史版本的时间。
  6. 单击确定
    生命周期规则保存成功后,您可以在策略列表中查看已设置的生命周期规则。

使用阿里云SDK

仅Go SDK支持基于最后一次访问时间创建生命周期规则。创建基于最后一次访问时间的生命周期规则前,您需要为指定Bucket开启访问追踪功能。关于基于最后一次访问时间的生命周期规则的代码示例,请参见SDK简介

package main

import (
    "fmt"
    "os"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // 填写Bucket名称,例如examplebucket。
    bucketName := "examplebucket"

    isTrue := true
    isFalse := false
    // 指定生命周期规则1。规则中指定前缀为logs,且小于等于64 KB的所有文件在距离最后一次访问时间30天后转为低频访问类型。且再次访问前缀为logs的文件时,这些文件仍保留为低频访问类型。
    rule1 := oss.LifecycleRule{
        ID:         "rule1",
        Prefix:     "logs",
        Status:     "Enabled",
        Transitions: []oss.LifecycleTransition{
            {
                Days: 30,
                StorageClass: oss.StorageIA,
                IsAccessTime: &isTrue,
                ReturnToStdWhenVisit: &isFalse,
                AllowSmallFile:       &isTrue,
            },
        },
    }
    // 指定生命周期规则2。规则中指定前缀为dir,且大于64 KB的所有历史版本文件在距离最后一次访问时间10天后转为低频访问类型。且再次访问前缀为logs的文件时,这些文件将转为标准存储。
    rule2 := oss.LifecycleRule{
        ID:         "rule2",
        Prefix:     "dir",
        Status:     "Enabled",
        NonVersionTransitions:[]oss.LifecycleVersionTransition {
            {
                NoncurrentDays: 10,
                StorageClass: oss.StorageIA,
                IsAccessTime: &isTrue,
                ReturnToStdWhenVisit: &isTrue,
                AllowSmallFile:       &isFalse,
            },
        },
    }
    // 设置生命周期规则。
    var rules = []oss.LifecycleRule{rule1,rule2}
    err = client.SetBucketLifecycle(bucketName, rules)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Printf("%s\n", "set bucket life cycle success")
}

使用REST API

如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见PutBucketLifecycle

常见问题

创建的生命周期规则为什么没有即刻生效?

生命周期规则创建后的24小时内,OSS会加载规则。规则加载完成后,OSS会在每天的北京时间8:00开始执行规则,并在随后的24小时内执行完毕。因此,生命周期规则创建后最多可能需要48小时才会生效。

如果针对Bucket内相同前缀的Object创建了两条生命周期规则,其中一条规则基于最后一次修改时间,另外一条规则基于最后一次访问时间,最终执行效果会怎么样?

例如,针对目标存储空间examplebucket创建了两条生命周期规则,规则一指定该Bucket内所有前缀为doc的Object在距离最后一次修改时间30天后删除,规则二指定该Bucket内所有前缀为doc的Object在距离最后一次访问时间30天后转低频访问类型。

由于OSS执行生命周期规则时遵循以用户较低开销为原则,因此仅规则一生效。原因是规则一中指定30天后直接删除与前缀匹配的Object,此后将不再产生费用。而规则二转为低频访问类型仍会收取相关存储费用或者数据取回费用等。

已配置的生命周期规则变更后何时生效,原有规则命中的数据如何处理?

例如,您已经针对前缀为er的Object配置了距离最后一次访问时间30天后转低频、又过了30天后当Object被访问时选择将其转为标准存储类型的生命周期规则。但是在距离最后一次访问时间的35天后,您将生命周期指定的前缀er变更为re,此时原有Object仅转存为低频访问类型,转存为标准存储类型的行为不生效。变更规则命中Object的最后一次访问时间也是从Bucket开启访问追踪时开始统计。

在已开启版本控制的Bucket内开启智能分层,Bucket内不同版本的Object存储层级如何分布?

在已开启版本控制Bucket内的每一个Object都有唯一的版本ID,且不同版本ID的Object相互独立。因此可能会出现历史版本Object为低频访问类型,但是最新版本Object为标准存储类型的情况。

是否支持关闭访问追踪?

支持,前提是当前Bucket不存在基于最后一次访问时间的生命周期规则。关闭访问追踪后,系统将停止追踪Object的最后一次访问时间信息。待下一次开启访问追踪后,将重新刷新所有Object的最后一次访问时间。