《AWS云计算实战》7.对象存储:S3 和 Glacier

AWS 对象存储服务 描述
AWS S3 AWS 提供的对象存储服务
AWS Glacier 备份和归档的存储服务

对象存储

对象存储可以帮助用户存储图片、视频、文档和可执行文件。

  • 在对象存储中,数据存储为对象,每个对象包含:一个全球唯一的标识符、元数据和数据本身。
  • 客户可以直接操作「元数据」来管理和查询数据。
  • 「元数据」还可以用来存储访问权限信息和其他管理任务。

Amazon S3

Amazon S3 将数据作为对象存储在被称为 “存储桶” 的资源中。您可以在一个存储桶中尽可能多地存储对象,并写入、读取和删除您的存储桶中的对象。对象大小最多可为 5 TB。

  • 无限存储空间、高可用、高度持久化。
  • 可存储任何类型的数据,如图片、文档和二进制文件。
  • 单个对象的容量不超过 5 TB。单个存档最大可达 40TB。
  • 上传/下载对象方式:HTTPS 协议、命令行工具(CLI)、SDK、第三方工具。
  • S3 使用「存储桶」组织对象。「存储桶」是对象的容器。用户可以创建最多100个存储桶。
  • 建议选择域名(如 com.google.* )或者公司名称作为「存储桶」名的前缀。

示例:备份用户的数据

使用 AWS CLI 命令行工具上传数据。并从 S3 下载数据。

1⃣️ 为数据创建一个 S3 存储桶。

# 格式
$ aws s3 mb s3://com.domain-$YourName

$ aws s3 mb s3://com.arlingbc-andy
make_bucket: com.arlingbc-andy

2⃣️ 从本地的目录上传数据到 S3 存储桶。

# 格式
# sync:比较 $Path 目录和 S3 存储桶里的 /backup 目录 ,只上传新的或者修改过的文件
# $Path:为目录路径
$ aws s3 sync $Path s3://com.domain-$YourName/backup

$ aws s3 sync /Users/huqilin/Desktop/image s3://com.arlingbc-andy/backup
upload: image/sunset.jpeg to s3://com.arlingbc-andy/backup/sunset.jpeg

3⃣️ 测试数据恢复。

# 格式
$ aws s3 cp --recursive s3://com.domain-$YourName/backup $Path

$ aws s3 cp --recursive s3://com.arlingbc-andy/backup /Users/huqilin/Desktop/image 

4⃣️ 为存储桶激活版本保护(启用版本控制)。

默认情况下,S3 存储桶禁用了版本保护功能(同名文件会被覆盖)。

$ aws s3api put-bucket-versioning --bucket com.arlingbc-andy --versioning-configuration Status=Enabled

5⃣️ 获取所有对象和版本

$ aws s3api list-object-versions --bucket com.arlingbc-andy

6⃣️ 资源清理。

$ aws s3 rb --force s3://com.arlingbc-andy
delete: s3://com.arlingbc-andy/backup/sunset.jpeg
remove_bucket failed: s3://com.arlingbc-andy An error occurred (BucketNotEmpty) when calling the DeleteBucket operation: The bucket you tried to delete is not empty. You must delete all versions in the bucket.

移除存储桶造成 BucketNotEmpty 报错
如果激活了存储桶的版本功能,删除存储桶时将报错 BucketNotEmpty。这种情况下请使用管理控制台来删除存储桶。

归档对象以优化成本

Amazon S3 Glacier 是一款安全、持久且成本极低的云存储服务,适用于数据存档和长期备份。它能够提供 99.999999999% 的持久性以及全面的安全与合规功能,可以帮助满足最严格的监管要求。Amazon S3 Glacier 提供就地查询功能,允许您针对静态存档数据直接运行强大的分析。客户能以每月每 GB 低至 0.004 USD 的价格存储数据,与本地解决方案相比,显著降低了成本。为了保持成本低廉,同时满足各种数据检索需求,Amazon S3 Glacier 提供三种访问存档的选项,各自的检索时间从数分钟到数小时不等。

在 Glacier 中存储数据的成本大概是 S3 中的 1/3。

S3 Glacier
每 GB 容量成本 0.03 美元 0.01 美元
数据访问速度 立即可以访问 在提交请求 3~5h 后
持久性 设计为年度 99.999999999% 的数据持久性 设计为年度 99.999999999% 的数据持久性

示例:创建 S3 存储桶配合 Glacier 使用

集成 S3 和 Glacier 以降低存储数据的成本。

可以为存储桶添加多条生命周期规则。

生命周期规则:在给定的日期之后归档或者删除对象,它还可以帮助把 S3 的对象归档到 Glacier。

添加生命周期转换规则,「创建制定天数后转换到 Amazon Glacier」。

AWS S3 Glacier 数据检索策略

  • 加急检索:存档通常在 1-5 分钟内可供使用。

    当您偶尔需要加急请求档案子集时,可以使用加急检索来快速访问您的数据。除了最大的存档 (250MB+) 以外,对于使用加急检索方式访问的所有数据,通常在 1-5 分钟内即可使用。有两种加急检索:按需和预置。按需请求类似于 EC2 按需实例,绝大部分时间都可以使用。预置请求可保证在您需要时获得数据。

    加急检索针对偶尔需要紧急请求少量存档的情况进行了优化。除了最大的存档 (250MB+) 以外,对于使用加急检索方式访问的所有数据,通常在 1-5 分钟内即可使用。如果您的应用程序或工作负载需要确保加急检索在您需要时就能使用,则您应该考虑使用预置容量

  • 标准检索:档通常在 3-5 小时内可供访问。

    标准检索是在数小时内访问数据的低成本方式。例如,您可以使用标准检索来恢复备份数据,检索存档的数据以便当天进行编辑和分发,或者获取并分析日志以便在数小时内做出业务决策。

  • 批量检索:

    批量检索是 S3 Glacier 提供的成本最低的检索方式,使您能够以低廉的成本在一天内检索大量数据,甚至可以达到 PB 级。批量检索通常在 5-12 小时内完成。

    批量检索的设计宗旨是让客户以经济高效的方式获取大量数据,以便满足非紧急使用案例的需要,例如对数 PB 的原始视频内容进行转码或分析大量基因组序列。

  • 预置容量

预置容量可确保加急检索所检索的容量在您需要时即可使用。每单位容量可确保每 5 分钟内至少可执行 3 次加急检索,并提供高达 150MB/s 的检索吞吐量。

如果您需要满足特定的加急检索速率要求,则可以预置检索容量。如果没有预置容量,则只有在发出请求时有容量可用的情况下,才会接受加急检索请求。

示例:使用程序的方式存储对象

S3 可以通过 HTTPS 和 API 来访问。也就是说,用户可以集成 S3 (SDK)到应用程序里,用程序调用 API 来提交请求到 S3。

在应用程序中集成 S3 有助于实现无状态的服务器架构

...

示例:使用 S3 来实现静态网站托管

1⃣️ 创建一个新的 S3 存储桶;

aws s3 mb s3://static.arlingbc.com

2⃣️ 上传文件(helloworld.html)到 S3;

aws s3 cp /Users/huqilin/Desktop/helloworld.html s3://static.arlingbc.com/helloworld.html
upload: ./helloworld.html to s3://static.arlingbc.com/helloworld.html

3⃣️ 添加存储桶策略到存储桶;

配置存储桶策略,以允许所有人查看和下载该存储桶里的文档。

存储桶策略生成器

bucketpolicy.json

{
  "Id": "Policy1547005345057",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1547005342595",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::static.arlingbc.com/*",
      "Principal": "*"
    }
  ]
}

上传存储策略:

aws s3api put-bucket-policy --bucket static.arlingbc.com --policy file:///Users/huqilin/Desktop/bucketpolicy.json

4⃣️ 激活和配置 S3 服务静态网站;

aws s3 website s3://static.arlingbc.com --index-document helloworld.html

配置完成,访问路径为:$BucketName.s3-website-$Region.amazonaws.com

即:https://s3.us-east-2.amazonaws.com/static.arlingbc.com/helloworld.html

5⃣️ 使用别名(CNAME)关联一个自定义的域名到 S3 的存储桶;

为自己的域名添加一个 CNAME 别名记录,让记录指向 S3 存储桶的端点。

CNAME 别名记录只在满足下面条件的时候生效。

  • 存储桶名必须和 CNAME 别名记录一样。要创建一个 CNAME 给 static.yourdomain.com,存储桶名也必须是 static.yourdomain.com。
  • CNAME 别名记录不适用于主域名。可以给子域名创建别名记录的资源。如 static 或者 www 这样前缀的域名。如果想关联主域名到S3存储桶,需要使用AWS提供的 Route53 的 DNS 服务。

6⃣️ 清理资源

aws s3 rb --force s3://static.arlingbc.com

对象存储的内部机制

确保数据一致性

  • S3 是最终一致性:如果更新一个对象然后尝试读取,对象可能还包含旧的版本。在有些情况下,最新的版本可以访问到。

  • S3 上创建、更新或者删除对象的操作是原子操作。

  • 在上传新对象之后,立即提交的读请求会读到一致的数据。但是在更新或者删除操作之后的读请求操作将返回最终一致的结果。

选择合适的键

挑战:如何合理地设置主键来实现 S3 的 I/O 性能的最大化?

  • 为所有对象的键在开头的部分使用相同的字符串,将限制 S3 存储桶的最大 I/O 性能。(不合理的命名示例,像:image1.png、image2.png、image3.png、image4.png、image5.png...)
  • 为了改善 S3 的 I/O 性能,不要使用开头相同的字符串作为键。
  • 可以为每个对象的键添加散列(MD5)前缀的方式解决这个问题。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容