冷归档数据恢复最佳实践

对象存储OSS提供标准、低频访问、归档、冷归档四种存储类型,全面覆盖从热到冷的各种数据存储场景。提供了高持久性的对象存储服务,存储费用在四种存储类型中最低。数据需解冻后访问,解冻时间根据数据大小和选择的解冻模式决定,解冻会产生数据取回费用。适用于需要超长时间存放的极冷数据,例如因合规要求需要长期留存的数据、大数据及人工智能领域长期积累的原始数据、影视行业长期留存的媒体资源、在线教育行业的归档视频等业务场景。本文主要通过解冻的优先级时效性、批量解冻、感知解冻状态几个方面来介绍解冻的整个过程。


1 如何解冻Object

1.1 发起Restore请求进行解冻

使用OSS OpenAPI接口发起RestoreObject请求,冷归档解冻天数最短为1天,最长支持365天,解冻后在此解冻天数内文件均可读。不同解冻优先级的首字节取回时间如下:

  • 高优先级(Expedited):表示1小时内完成解冻。
  • 标准(Standard):表示2~5小时内完成解冻。如果不传入JobParameters节点,则默认为Standard。
  • 批量(Bulk):表示5~12小时内完成解冻。

请求发起后,需要等待以上时间解冻完成。优先级越高,取回价格越贵,一般而言,批量取回流量费用是标准的1/2,是高优先级的1/7。如果不着急的需求,建议使用批量(Bulk)取回


1.2 通过ossutil来批量恢复Object

通过ossutil restore加上-r可以递归把指定目录下的object批量恢复出来,如:

./ossutil restore -r oss://testforcashanghai/abc/ -i XXX -k XXX -e oss-cn-shanghai.aliyuncs.com

冷归档数据恢复最佳实践

另外可以在使用ossutil时携带xml指定优先级和解冻天数,如:

./ossutil restore -r oss://testforcashanghai/abc/ cold_archive_xml -i XXX -k XXX -e oss-cn-shanghai.aliyuncs.com

xml格式如下:

<RestoreRequest>
    <Days>3</Days>
    <JobParameters>
        <Tier>Bulk</Tier>
    </JobParameters>
</RestoreRequest>

文件较多时,可以加上-j参数来加大并发任务数。

冷归档数据恢复最佳实践


2 如何感知解冻过程

2.1 通过事件通知来被动感知解冻完成

第一步,先在mns控制台创建好收消息的队列,注意mns队列所属的区域需要和oss bucket所属的区域一致。

冷归档数据恢复最佳实践

冷归档数据恢复最佳实践


第二步,在oss控制台找到事件通知配置入口。

冷归档数据恢复最佳实践


第三步,创建FinishRestore事件规则

冷归档数据恢复最佳实践

冷归档数据恢复最佳实践

1.事件类型选择FinishRestore;

2.如果想要接收该bucket所有的object FinishRestore事件,前后缀填空即可;

3.队列填入在mns同区域创建的queue的名字,当然也可以使用另一种http方式作为接收终端。


第四步,触发restore,验证完整链路。

冷归档数据恢复最佳实践

假如选用的是最高优先级,SLA承诺时间是1小时。等待一小时后,可以通过mns控制台或API接口查收到如下消息:

冷归档数据恢复最佳实践

收到此消息表示该文件已经解冻完成,用户可以下载此文件了。


2.2 通过HeadObject来主动感知解冻过程

OSS提供HeadObject OpenAPI来获取单个object描述信息,将在header中返回恢复进程,如:

X-Oss-Restore:ongoing-request="true",表示正在恢复中;

X-Oss-Restore:ongoing-request=”false”, expiry-date=”Sun, 16 Apr 2017 08:12:33 GMT”,表示已经恢复完成,expiry-date是Restore完成后Object进入可读状态的过期时间。

示例

./ossutil stat oss://bucket/object -i xxx -k xxx -e oss-cn-hangzhou.aliyuncs.com

冷归档数据恢复最佳实践


2.3 通过ListObject来主动感知解冻过程

OSS提供ListObject/ListObjectVersions OpenAPI来枚举object/版本,返回body中将根据以下3种情况返回RestoreInfo信息来表示恢复进程:

  • 如果没有提交Restore或者Restore已经超时,则不返回该字段。
  • 如果已经提交Restore,且Restore没有完成,则返回的RestoreInfo值为ongoing-request=”true”。
  • 如果已经提交Restore,且Restore已经完成,则返回的RestoreInfo值为ongoing-request=”false”, expiry-date=”Sun, 16 Apr 2017 08:12:33 GMT”,其中expiry-date是Restore完成后Object进入可读状态的过期时间。

示例

bucket为bucketA,

分别有三个文件,

aaa,ColdArchive类型,未提交restore,

bbb,ColdArchive类型,提交了restore,还未完成,

ccc,ColdArchive类型,提交了restoer,且restore完成。

请求

GET / HTTP/1.1
Host: bucketA.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue

响应

HTTP/1.1 200 OK
x-oss-request-id: 534B371674E88A4D8906****
Date: Mon, 24 Jun 2020 12:01:27 GMT
Content-Type: application/xml
Content-Length: 1866
Connection: keep-alive
Server: AliyunOSS
<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns=”http://doc.oss-cn-hangzhou.aliyuncs.com”>
  <Name>bucketA</Name>
  <Prefix></Prefix>
  <Marker></Marker>
  <MaxKeys></MaxKeys>
  <Delimiter></Delimiter>
  <IsTruncated>false</IsTruncated>
  <Contents>
        <Key>aaa</Key>
        <LastModified>2020-06-22T11:42:32.000Z</LastModified>
        <ETag>"5B3C1A2E053D763E1B002CC607C5A0FE1****"</ETag>
        <Type>Normal</Type>
        <Size>344606</Size>
        <StorageClass>ColdArchive</StorageClass>
        <Owner>
            <ID>0022012****</ID>
            <DisplayName>user-example</DisplayName>
        </Owner>
  </Contents>
  <Contents>
        <Key>bbb</Key>
        <LastModified>2020-06-22T11:42:32.000Z</LastModified>
        <ETag>"5B3C1A2E053D763E1B002CC607C5A0FE1****"</ETag>
        <Type>Normal</Type>
        <Size>344606</Size>
        <StorageClass>Standard</StorageClass>
        <RestoreInfo>ongoing-request="true"</RestoreInfo>
        <Owner>
            <ID>0022012****</ID>
            <DisplayName>user-example</DisplayName>
        </Owner>
  </Contents>
  <Contents>
        <Key>ccc</Key>
        <LastModified>2020-06-22T11:42:32.000Z</LastModified>
        <ETag>"5B3C1A2E053D763E1B002CC607C5A0FE1****"</ETag>
        <Type>Normal</Type>
        <Size>344606</Size>
        <StorageClass>Standard</StorageClass>
        <RestoreInfo>ongoing-request="false", expiry-date="Thr, 24 Mon 2020 12:40:33 GMT"</RestoreInfo>
        <Owner>
            <ID>0022012****</ID>
            <DisplayName>user-example</DisplayName>
        </Owner>
  </Contents>
</ListBucketResult>


上一篇:事件与委托


下一篇:.Net Winform开发笔记(一)