AmazonS3基本介绍

1 AWS S3基础

AWS S3 全名是 Simple Storage Service,简单存储服务。

基本特性:

  • 提供了统一的接口 REST/SOAP 来统一访问任何数据
  • 对 S3 来说,存在里面的数据就是对象名(键),和数据(值)
  • 不限量,单个文件最高可达 5TB
  • 高速。每个 bucket 下每秒可达 3500 PUT/COPY/POST/DELETE 或 5500 GET/HEAD 请求
  • 具备版本,权限控制能力
  • 具备数据生命周期管理能力

常用场景:

  • 备份
  • 存储内容
  • 大数据分析
  • 挂载静态网站
  • 灾难恢复

2 基本概念

2.1 Bucket

在 S3 里,数据存储的前提是建立一个 Bucket。Bucket 默认是不公开的。

Bucket 有几个特点:

  • 命名(Namespace)需全球唯一。每个帐号默认可建 100 个,可申请至最多 1000 个
  • 创建者的拥有权不可转让,也不可以从一个 Region 转去别的 Region
  • 没有对象存储数量限制
  • Bucket 就像是电脑里面的某一个顶层分区。所有的对象都必须保存在某一个 bucket 下面。

访问Bucket的方式:

2.2 Object

Bucket 里面每一个存储的数据就是对象,由对象名(键),和数据(值)组成。

  • 对象的键(Key)可以很长,甚至按照一定前缀格式来指定,从而模拟文件夹的层级结构,比如 Photo/Family/2020-01-25-new-year/altogether.jpg
  • 每一个对象其实还包含一些元信息(Meta-data),包括系统指定的文件类型,创建时间,加密算法等,和用户上传时指定的元信息。元信息在对象创建后都无法更改。
  • Version ID - 当versioning功能开启后,每个Object都会拥有一个Version ID,用来区分有相同Key的不同的Object(Bucket + Key + Version ID 三要素唯一定义了S3中的一个Object)
  • 可以为对象指定最多 10个标签(Tag),标签的键和值的最大长度是 128 和 256 个字符。标签是可以修改和新增的,能与权限控制,生命周期管理,和数据分析等结合使用。
  • 单个文件上传最大是 5GB。超过的话,需要使用 multipart upload API。最大支持 5TB。

3 一致性特性

对程序员来说,这么一个类似数据库的东西,肯定需要关心它的读写特性和一致性模型。

  • 没有锁的功能。如果同时(几乎)发起两个更新对象的 PUT 请求,键相同,那么,以到达 S3 时间先后处理更新。

  • 不同对象的更新,没法做到原子操作。

  • 对全新的对象来说,它是 Read-after-Write Consistency 的。也就是写了之后马上读,肯定就是你刚才上传的数据。

  • 如果你要更新数据,那就变成 Eventual Consistency 了。也就是说,更新后马上读,可能是旧的数据,也可能是新的。

这里有一个比较坑的地方是,如果你先调用 GET 请求访问一个不存在的资源,S3 告诉你它不存在。然后你马上上传数据,再调用一个 GET,这时候是有可能拿不回来的。

4 存储类别

S3提供了如下几种存储类型

  • S3 Standard: 默认的存储类型,提供99.99%可用性,99.999999999%持久性。数据文件会冗余地存储在多个设施的多个设备中。设计目的是可以支持同时两个设施损坏。适合性能敏感的使用案例和需要经常访问的数据。

  • S3 Standard - Infrequent Access: 提供99.99%可用性,99.999999999%持久性。 针对需要长期储存且不常访问, 但是需要立即能够访问到的数据 (例如备份以及访问频率已减少的较旧数据) 进行了优化。存储费用比S3 Standard要低,但是每个访问请求的费用要远高于S3 Standard。

  • Reduced Redundancy Storage(RRS): 提供99.99%可用性和99.99%的持久性。适用于能再次生成的数据,比如图片的缩略图等。

  • Glacier: 最便宜的存储方案,但是没法实时访问数据,必须要先恢复数据后才能进行访问。不适用于需要经常访问的数据。

S3 提供了生命管理周期(Lifecycle Management)的机制,可以将Object从S3 Standard转换到S3 Standard-Infrequent Access,再到Glacier。也可以在设定的时间过后自动删除object。但需要注意的是,不是一到达设定的时间后就立马开始转换,设定Lifecycle Management后,S3会将需要转换的object标记上转换时间,实际转换时间一般会延后。

5 参考

知乎 一文读懂 AWS S3 S3基础知识

往年同期文章