优化 Amazon S3 存储成本:S3 智能分层配合 S3 Glacier 即时检索获得成本节约

存储
Amazon Simple Storage Service (S3)
0
0
## **1、背景** S3 Glacier Instant Retrieval (S3 GIR)存储类型是2021年 re:Invent 新发布的存储类型,原有的异步方式取回数据的 Glacier 存储类型则改名为 S3 Glacier Flexible Retrieval。新发布的 S3 Glacier Instant Retrieval 的存储费用与 S3 Glacier Flexible Retrieval 相近,在此基础上提供了立刻可取的性能,适合每年访问2-3次数据场景下的海量数据存储。 S3 Glacier Instant Retrieval 的特点如下: - 从费用方面评估:以亚马逊云科技宁夏区域为例,异步取回的 S3 Glacier Flexible Retrieval 价格是0.027054元/GB,新的 S3 Glacier Instant Retrieval 是0.03006元/GB。成本增加不足1分钱,保持在同一个数量级。 - 从数据取回时间评估:原有 S3 Glacier Flexible Retrieval 是异步机制,取回数据需要几分钟到几小时,即便使用加急检索并支付额外费用,也需要几分钟才能返回数据。而 S3 Glacier Instant Retrieval 存储类型是访问数据立刻可用。 - 从性能方面而言,**S3 官网 FAQ** 中提到 S3 Glacier Instant Retrieval 提供与 S3 Standard 和 S3 Standard-IA 存储类相同的毫秒延迟和高吞吐量性能。 S3 官网 FAQ: https://www.amazonaws.cn/s3/faqs/#Amazon_S3_Glacier_Instant_Retrieval_storage_class 基于以上特点,本文将分析 S3 Glacier Instant Retrieval 存储类的最佳使用场景,并结合 S3 智能分层特性优化成本。 ## **2、是否使用智能分层的的对比** ### **数据集假设和基础费用对比** 由于智能分层的特性要求文件大小大于 128KB,因此本文测算的场景定义如下: - 数据集容量是 50TB,即 50000GB; - 平均文件大小 1MB,且单个文件大于 128KB; - 文件在年初被一次性全量写入,并保存12个月满1年; - 一年期间数据经历几次读取,每次读取是全量读取。 为更好的对比成本,这里将读写等基础费用列表如下。 ![image.png](https://dev-media.amazoncloud.cn/29ff552476964488b732269a9bc00860_image.png "image.png") ### **不使用智能分层、直接将数据保存在 Glacier Instant Retrieval 存储类** #### **(1)基础费用** 如果直接将文件保存到 S3 Glacier Instant Retrieval,则主要成本如下(以宁夏区域为例): - 写入费(PUT、COPY 或 POST 请求):每1000个请求 ¥0.0981 - 存储成本:每 GB ¥0.03006/月 - 读取费(GET、SELECT 及所有其他请求):每10000个请求 ¥0.4905 - 数据检索:每 GB ¥0.1911 注意:如果数据写入到 S3 标准层,而后通过生命周期转换存储级别为 S3 Glacier Instant Retrieval,那么还要收取转换费每1000个请求 ¥0.0981。由于本例的测算直接写入 S3 Glacier Instant Retrieval 因此没有生命周期转换费。 由此可以看到,上传文件时候,直接声明写入 S3 Glacier Instant Retrieval 存储类,从写入的那一刻即第一天起,存储空间成本上就获得了显著的降低。不过,由此产生的写入费是 S3 Standard 标准级别的24倍,而后读取时候产生的读取收费是 S3 Standard 标准级别的36倍,并额外收取读取 S3 Standard 标准级别并不存在的数据检索费。在此场景下,如果数据在几个月内多次读取将产生大量访问费用,这部分开销甚至可能超过存储容量上节约出来的费用。 #### **(2)访问场景测算** 为了进一步测算多次读取后产生的升本影响,我们模拟一年内数据分别被全量读写1次到10次,其成本计算后如下表。 ![image.png](https://dev-media.amazoncloud.cn/ebd13cecc0404cdfbd05c16099f4d642_image.png "image.png") 以本文的数据样本为例,当每年数据读写6次后,S3 Glacier Instant Retrieval总体成本和使用 S3 标准类相当。读取次数大于6次后,读写越多总体成本越高。 #### **(3)结论** 综上所述,直接使用 S3 Glacier Instant Retrieval 的场景需要有明确的数据冷热特征,或需要人为的定义数据访问方式,确保数据读取频率足够低才能产生成本节约。如果已经预期要到发生大量频繁读取,建议先将数据从 S3 Glacier Instant Retrieval 复制回到 S3 标准类,然后对 S3 标准层发起频繁访问即可。 以上如果不希望对以上存储的生命周期做手工管理,则可以引入 S3 智能分层特性。 ### **使用 S3 智能分层自动将数据下沉到 S3 Intelligent-Tiering – Archive Instant Access Tier(S3-INT AIA)** ### **(1)基础费用** 在 S3 Glacier Instant Retrieval 存储类发布后,S3智能分层存储支持的存储分级也新增了名为 S3 Intelligent-Tiering – Archive Instant Access Tier(S3-INT AIA)这一级别的存储。当数据保存在 S3 智能分层存储级别时,S3 将根据文件最后访问时间来决定存储级别并适用不同费率: - 写入费(PUT、COPY、POST 或 LIST 请求):每1000个请求 ¥ 0.00405 - 刚写入的30天内,存储费按照 S3 标准级(S3-INT Frequent Access)收费,每 GB ¥0.1755/月 - 文件最后一次被访问的30天内,存储费按照 S3 标准级(S3-INT Frequent Access)收费,每 GB ¥0.1755/月 - 文件最后一次访问后的30-90天将按照 S3 不频繁访问级别(S3-INT Infrequent Access)收费,每 GB ¥0.1030029/月 - 文件最后一次访问后的90天以上将按照 S3 归档立刻取回级别(S3-INT Archive Instant Access)收费,每 GB ¥0.03006/月 - 不过之前数据存储在那一层、以及最后被访问之后多少天,只要数据被再次访问,数据将被移动到 S3 智能分层标准级(S3-INT Frequent Access),未来30天重新按照 S3-INT Frequent Access 存储级别收费 - 以上所有场景的读取费(GET、SELECT 及所有其他请求):每1000个请求 ¥ 0.00135 - 数据检索:不收取 结合以上可看出,使用 S3 智能分层,写入时候成本就是按照标准层写入费用计算。读取时候不管数据当前保存在哪一层,始终按照 S3 标准层的读取费用去计算,因此即便发生多次读取费用也很少,不会发生前文描述的当读取次数大于7次后 S3 Glacier Instant Retrieval 存储类成本反而高于 S3 标准类的情况。 另外请注意,S3 智能分层有如下适用范围和限制请予以考虑: - 收取文件管理费。费用定义是每1000个对象收取 ¥0.016675。小于 128KB 级别的文件不被在内; - 小于 128KB 的数据将始终保存在频繁访问层。 #### **(2)访问场景测算** 在享受到读取费用的好处后,对智能分层存储的调度逻辑可观察到: - 第一个月新写入数据时候按照标准层存储因此存储费用最高,满30天没有被访问后的转为不频繁访问层,由此第二个月存储费降低; - 满90天没被访问后,第4个月又显著降低; - 当文件被读取时,文件将回到 S3-INT FA 存储层级收费; - 直到再次经过下一个90天移动到 S3-INT AIA 按照最低存储成本计费。 这个逻辑的特点是,1年内读写频率足够低才会节省费用,如果隔一个月进行一次读取,那么数据还没有满足90天下沉的条件就又返回到最贵的标准层计费了。如此反复读取,意味着几乎全年数据都保存在标准层,也就没有实现成本节约的效果。 接下来我们模拟下这种场景,分别安排在不同的月份读取数据,测算访问频度对智能分层存储费的影响。 以下模拟数据在1月写入,然后在1月读取1次,后续没有读取的场景,成本节约为59%。 ![image.png](https://dev-media.amazoncloud.cn/2d8d8f2889734cdaac94377dc5487b77_image.png "image.png") 以下模拟数据在1月写入,然后在1月、3月、5月、7月、9月、11月各读写1次的场景,成本节约为11%。 ![image.png](https://dev-media.amazoncloud.cn/9b636d50ac424a1cb2cd81994a135277_image.png "image.png") 以下模拟数据在1月写入,然后在1月、7月、11月各读写1次的场景,成本节约为35%。 ![image.png](https://dev-media.amazoncloud.cn/0410f353bc2647aea5c7450d574462e5_image.png "image.png") 以下模拟数据在1月写入,1月读取10次,7月当月读写了10次,其他月份无读取的场景,成本节约为44%。 ![image.png](https://dev-media.amazoncloud.cn/4657dea5b11346bfb78c0f86c88ec190_image.png "image.png") 通过以上的场景可以看出,使用 S3 智能分层存储节约费用的秘诀是数据足够“冷”,或者两次访问间隔尽可能长。如果要对数据进行多次读写,建议集中在某窗口内(例如一个月)内集中完成数次读写,然后剩下的时间由 S3 智能分层自动的降低存储级别节省费用。 #### **(3)结论** 综上所述,S3 智能分层是大多数存储和数据分析场景下降低成本的好选择。 ## **3、将新数据存储和现有数据保存到 S3智能分层** ### **修改上传文件代码中的声明直接上传到 S3 智能分层** 以Python代码为例: ``` import boto3 BucketName = 's3int-workshop' LocalFileName = "image1.jpg" FileData = open(LocalFileName, 'rb') client = boto3.client('s3') response = client.put_object( ACL = 'private', Body = FileData, Bucket = BucketName, Key = LocalFileName, ContentType = 'image/jpeg', StorageClass = 'INTELLIGENT_TIERING' ) ``` 在上传参数中,指定 StorageClass = ‘INTELLIGENT_TIERING’ 即可将文件保存为智能分层类型。 由于修改上传代码只对新上传的文件有效,存量文件如果要修改存储类型则还是要通过生命周期规则实现。 ### **使用生命周期将现有数据转换到 S3 智能分层** 找到要修改的 S3 存储桶。可看到其中有两个存量文件。如下截图。 ![image.png](https://dev-media.amazoncloud.cn/28fa80224c0b47959f7e90c2c2157100_image.png "image.png") 点击 Management 管理标签页,点击 Create lifecycle rule 创建生命周期规则按钮。如下截图。 ![image.png](https://dev-media.amazoncloud.cn/7b15d8a6fc0b4143a116e1fb65790e99_image.png "image.png") 输入规则的名称立刻转换为 INT,这里可以使用中文,然后选中下方的 Apply to all objects in the bucket 对存储桶内所有对象有效的按钮。在下方的第二次确认对话框内,选中 I acknowledge that this rule will apply to all objects in the bucket.表示确认本规则将对存储桶内所有文件发起转换。接下来向下滚动页面。如下截图。 注意:慎重使用 Apply to all objects in the bucket 选项,本选项将对存储桶内所有文件发起转换。请慎重使用以免出现海量对象被错误转换。 ![image.png](https://dev-media.amazoncloud.cn/3c3765930e0847e3b5f93b33c80c06df_image.png "image.png") 在页面中间部分,生命周期规则位置,选择 Move current version 移动当前版本和 Move noncurrent versions 移动非当前版本两个选项。这表示如果本存储桶使用了版本管理功能,那么最新版和历史版本都将被更换存储类型。如下截图。 ![image.png](https://dev-media.amazoncloud.cn/06773c6ae5f746e3a099f37231d42092_image.png "image.png") 在配置生命周期规则的位置,将转换当前版本的条件设置为目标创建后0天,即立刻转换,将转换类型选择为 S3-INT。此外,将转换历史版本的条件设置为目标创建后0天,将转换类型也选择选择为 S3-INT。如下截图。 ![image.png](https://dev-media.amazoncloud.cn/a97f2fc6b276468d82e500ccc6d8570c_image.png "image.png") 将页面移动到最下方,点击创建规则。如下截图。 ![image.png](https://dev-media.amazoncloud.cn/bb791f69c6054443aefd0cdad8836428_image.png "image.png") 创建规则完成。如下截图。 ![image.png](https://dev-media.amazoncloud.cn/7243ee2b056e4a169f11aafbb52e53fc_image.png "image.png") 在经过24小时后,可看到文件级别已经变成了 INT 类型。 ![image.png](https://dev-media.amazoncloud.cn/6d8affcd6e5d4edc9827a4c28ef971d0_image.png "image.png") 注意:当转换规则填写的是第0天时候,刚上传的文件依然会被保存为 Standard 存储类。经过24-48小时,才会自动转为 S3-INT 存储类。因此如果希望文件上传后立刻保存为 S3-INT 存储类,则还是需要修改上传代码,在代码中指定将文件上传到智能分层。 ## **4、结论** 通过本文档模拟的场景可看出,有效的使用 S3 智能分层搭配 S3 Glacier Instant Retrieval,可显著节约存储成本。 ## **5、参考文档** 为存储桶配置生命周期: https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html https://aws.amazon.com/cn/premiumsupport/knowledge-center/s3-lifecycle-rule-delay/ **本篇作者** ![1.jpg](https://dev-media.amazoncloud.cn/78835819e9f64d6f8da3ead75907c8e1_1.jpg "1.jpg") **刘辛酉** *亚马逊云科技解决方案架构师,曾服务于 Parallels、Siemens,在 Atos 担任管理服务部首席架构师。拥有十余年数据中心、互联网技术经验,长期为制造、汽车等行业头部客户提供IT咨询和服务。加入亚马逊云科技后负责零售、快消、食品和制造等行业。擅长硬件、网络等领域设计。* ![2.jpg](https://dev-media.amazoncloud.cn/a88369be40dd4cf59eb2e02d6c25b6a3_2.jpg "2.jpg") **杨昌君** *亚马逊云科技解决方案架构师,曾服务于某 IDC&云服务提供商。拥有数据中心,互联网,云计算技术经验,2021年加入亚马逊云科技,负责零售,快消,餐饮等行业,对快消零售行业业务场景。擅长 CI/CD,Devops 等技术。*
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭
contact-us