IBM Cloud对象存储系列之Archive存储及恢复

对象存储是一种提供海量存储和低成本访问的存储服务,具备高性能、高可靠、安全、低成本等特性,并且通过标准的S3接口提供非结构化数据(图片、音视频、文本等格式文件)的存储服务,可以满足用户在任何地方通过互联网对数据进行管理和访问的需求。

为了满足各种业务场景的数据访问,使客户以最低成本来使用对象存储服务,云厂商都会提供多种存储类型,例如IBM Cloud就提供了覆盖热数据到冷数据访问的多种存储类型。

  1. “Smart Tier”存储类型:该存储类型专为希望在数据访问模式发生变化时自动优化存储成本而不会影响性能或运维管理的客户而设计。这种存储类型会根据客户数据的访问频率智能的将数据进行分层存储,分别为“Standard”,“Vault”,“Cold Vault”层,当你的数据访问频率降低时,会将数据从“Standard”层移动到“Vault”或“Cold Vault”层,因为“Vault”和“Cold Vault”相比“Standard”层,有更低的存储价格。后续如果当数据访问频率提高时,会将数据从“Vault”或“Cold Vault”层移动到“Standard”层,从而降低数据的访问处理成本。

  2. “Standard”存储类型:适合存储频繁访问的数据,“Standard”存储类型具有低延迟访问,高吞吐量和低访问成本等特性,适合绝大多数业务场景,例如云应用程序、网站、社交、移动和游戏应用以及大数据分析等

  3. “Vault”存储类型:适合存储1个月左右访问单次或个位数频率的数据,“Vault”存储类型具有较高的吞吐量以及较低的访问延迟。有最低存储时间(30天)和文件最小计量单位(128 KB)要求。

  4. “Cold Vault”存储类型:适合存储3个月左右访问单次或个位数频率的数据,“Cold Vault”存储类型具有跟“Vault”存储类型同样的吞吐量以及较低的访问延迟。但要求最低存储时间为90天,文件最小计量单位要求为128KB。

上面四种存储类型的数据都可以通过在bucket层设置规则转换成”Archive”冷数据,“Archive”冷数据存储方式为客户提供了一种高持久性、极低存储成本的存储方式,这些数据需解冻才能正常访问,解冻会产生数据取回费用。适用于数据长期保存且访问次数极少的业务场景,例如归档数据、医疗影像、科学资料、影视素材等。IBM Cloud对象存储上的“Archive”冷数据提供两种方式:

  1. “Archive”:数据解冻时间较长,通常需要12小时左右,但存储单价最低
  2. “Accelerated Archive”:数据解冻时间较短,通常在2小时左右,但存储单价较“Archive”方式要高

接下来我们主要针对“Archive”冷数据方面,给大家介绍一下如何设置“Archive”规则,以及如何访问和处理“Archive”冷数据

首先我们在创建存储桶的时候,可以创建一个归档规则来实现热数据到“Archive”冷数据的自动转换
在这里插入图片描述
Time to archive部分是指该对象存储中的数据在存放多长时间以后自动从热数据变成“Archive”冷数据,可根据具体的业务场景设置天数
也可以为以后的存储桶添加归档规则
在这里插入图片描述
当我们设置完归档规则以后,查看存储桶里的数据对象的详细信息
在这里插入图片描述
State是Archived,表示该数据已经从热数据转换成“Archive”冷数据,使用的是“Accelerated Archive”方式
如果该数据还未转换成“Archive”冷数据,那么State应该是Active,如下图所示
在这里插入图片描述
已经转换成“Archive”冷数据的对象是无法直接进行数据操作的,例如下载等
在这里插入图片描述

而尚未转换成“Archive”的热数据是可以直接下载的
在这里插入图片描述
可以直接在UI上把“Archive”冷数据转换成热数据
在这里插入图片描述
在这里插入图片描述
Restore下面的Duration参数是指当这个数据对象restore成热数据以后,以热数据方式存放多少天。
这里我们要注意的是一个数据对象从冷数据恢复成热数据的过程,实际上是将该冷数据复制成一个新的热数据,而原来的那一个冷数据对象在存储桶里还是继续保留着的。当Duration参数指定的天数到期后,热数据会自动删除,同时存储桶里还是会继续保留原来的那个冷数据对象。
在这里插入图片描述
在数据Restore的过程中,我们如果查看该数据对象的详细页面,可以看到State是Restoring
在这里插入图片描述
接下来我们以Python为例,来看一下如何用API方式来restore “Archive”冷数据:
S3.Client Class提供了一个方法restore_object(**kwargs)可以用来restore “Archive”冷数据,该方法需要指定以下参数:

• Bucket (string) –
[REQUIRED]
The bucket name containing the object to restore.
When using this API with an access point, you must direct requests to the access point hostname. The access point hostname takes the form AccessPointName -AccountId .s3-accesspoint.Region .amazonaws.com. When using this operation with an access point through the AWS SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see Using Access Points in the Amazon Simple Storage Service Developer Guide .
When using this API with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form AccessPointName -AccountId .outpostID .s3-outposts.Region .amazonaws.com. When using this operation using S3 on Outposts through the AWS SDKs, you provide the Outposts bucket ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see Using S3 on Outposts in the Amazon Simple Storage Service Developer Guide .
• Key (string) –
[REQUIRED]
Object key for which the operation was initiated.
VersionId (string) – VersionId used to reference a specific version of the object.
RestoreRequest (dict) –
Days (integer) – [REQUIRED]
Lifetime of the active copy in days. Do not use with restores that specify OutputLocation .
The Days element is required for regular restores, and must not be provided for select requests.
GlacierJobParameters (dict) –
Glacier related parameters pertaining to this job. Do not use with restores that specify OutputLocation .
Tier (string) – [REQUIRED]
Retrieval tier at which the restore will be processed.
其中Tier参数根据你的Archive方式设置成不同的值,如果是“Accelerated Archive”方式,那么需要指定成ACCELERATED,如果是“Archive”方式,那么需要指定成Bulk

以下是具体实现的代码,供大家参考,该代码将名为"archive-restore"的存储桶下的所有以API开头的数据对象筛选出来,并执行restore操作,恢复后的数据对象存放三天

# initial COS environment
import ibm_boto3
from ibm_botocore.client import Config, ClientError

# Constants for IBM COS values
COS_ENDPOINT = "https://s3.us-south.cloud-object-storage.appdomain.cloud"
COS_API_KEY_ID = "P_SdfdfdfdfutimBTTGcS7a80a9OWwZHP5"
COS_INSTANCE_CRN = "crn:v1:bluemix:public:cloud-object-storage:global:a/965hgjkdlit1d0aeb7fb4dfoy82a229a:7g56747c4-767e-4ec3-ab97-b600f89084cb::"

# Create s3 resource
cosresource = ibm_boto3.resource('s3',
    ibm_api_key_id=COS_API_KEY_ID,
    ibm_service_instance_id=COS_INSTANCE_CRN,
    config=Config(signature_version="oauth"),
    endpoint_url=COS_ENDPOINT
)

# Create s3 client
cosclient = ibm_boto3.client('s3',
    ibm_api_key_id=COS_API_KEY_ID,
    ibm_service_instance_id=COS_INSTANCE_CRN,
    config=Config(signature_version="oauth"),
    endpoint_url=COS_ENDPOINT
)

# get objects that prefix is "API" in bucket "archive-restore"
files = cosresource.Bucket('archive-restore').objects.filter(Prefix='API')

for file in files:
            try:
               print("Item: {0} ({1} bytes).".format(file.key, file.size))
#restore object one by one
               response = cosclient.restore_object(
                  Bucket='archive-restore',
                  Key=file.key,
                  RestoreRequest={
                    'Days': 3,
                    'GlacierJobParameters': {
                    'Tier': ' Accelerated '
                         },
                      }
                  )
               print(response)

            except ClientError as be:
               print("CLIENT ERROR: {0}\n".format(be))
            except Exception as e:
               print("Unable to restore object: {0}".format(e))

参考文档:
https://cloud.ibm.com/objectstorage/create#pricing

https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-object-operations#object-operations-archive-restore

https://ibm.github.io/ibm-cos-sdk-python/reference/services/s3.html#S3.Client.restore_object

https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-python#python-examples-init

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值