对象存储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>