AWS Simple Storage Service(S3)介绍

关键词:对象存储,文件存储,S3 Intelligent-Tiering

简介


在Amazon的购物网站上,我们可以挑选成千上万的商品,每种商品都有自己的图片展示。

在背后保存这些海量图片的服务就是AWS Simple Storage Service(S3)。

S3早期只是为了Amazon购物网站内部使用,后来随着性能不断完善,成为了AWS推出的第一个商用云服务。

对于我们来说,S3大概是AWS中最容易上手的服务了。只要新建一个Bucket,就可以往里面存取各种文件,十分方便。

我们在之前的文章中多次使用过S3,但没有正式介绍过。从本篇开始我们稍微详细地介绍一下S3,并做一些测试。

本篇纯理论,测试安排在后面的文章中。

目录


  • S3介绍
    1. 什么是S3,什么是对象存储
      • 对象存储 vs 文件存储
    2. S3存储类型(Storage classes)
    3. s3存储管理
    4. 访问控制(Access management)
    5. 数据处理
    6. s3的主要概念
  • 后记

S3介绍


1. 什么是S3,什么是对象存储

Amazon Simple Storage Service (Amazon S3)是AWS提供的对象(object)存储服务,在可扩展性、可用性、安全以及性能上都属于业界领先的。

S3可以为不同用户、不同场景提供存储服务,比如数据湖,网站,移动应用,一般数据的备份恢复,大数据分析等等。

对象存储 vs 文件存储

“对象存储是用来描述解决和处理离散单元的方法的通用术语。对象在一个层结构中不会再有层级结构,是以扩展元数据为特征的。”

这是网上给对象存储的定义,估计第一次看没几个人能看懂什么意思。

简单点理解,对象存储就是把一个文件(离散单元),保存在某个地方,同时生成一个Key。之后每次访问时,我们只需要提供Key就可以找到文件。

与对象存储相对应的是文件存储,我们把一个文件,保存在某个地方的某些文件夹之中,之后每次访问时,根据这个文件所在的文件夹和文件名,找到这个文件。

可以理解为,对象存储与文件存储最主要的区别在于存储的方法不同。

使用对象存储时,我们不知道也不关心文件存在哪里(哪个文件夹下),我们只需要记住这个文件对应的Key(一串字符)就可以找到我们保存的文件。

而使用文件存储时,我们需要明确地知道文件保存的路径,找回文件时需要按文件夹的路径依次找到文件。

这里需要特别说明的是,我们在使用S3时也会看到按路径存储的文件。但这里的路径并不是代表一层一层的文件夹,而只是Key。

下图中的“bootstrap-example-st/SourceArti/0BG2fGF”就是key,它只是一串字符串,这里面的“/”并不是用来区分文件夹的。
AWS Simple Storage Service(S3)介绍

我们在S3界面中看到有“Create folder”的选项,同样的这个文件夹(folder)也只是Key的一部分,是S3为了提供分组的功能而借用的文件夹这个概念,其本身并不是文件夹。
AWS Simple Storage Service(S3)介绍

可能有人会问,那我不创建文件夹只把文件放在硬盘根目录,这样没有一层层的文件夹,只通过文件名访问文件,这和对象存储不就一样了?

我们这里说的文件夹,其实指的是文件系统,我们平时用的电脑硬盘都是有文件系统的,

而对象存储存放对象的“硬盘”是没有文件系统的或者说没有我们传统的文件系统。

对象存储的好处是易于访问,方便扩展,降低成本。我们用以下的简化例子说明原因。

当我们使用文件存储时,需要文件系统支持,简单点说就是要建各级文件夹然后把文件放在对应的文件夹中。

我们可以认为文件夹是建在一个硬盘上的,当这个硬盘满了的时候,我们需要增加新的硬盘,

可是已经创建好的文件夹是不可能扩展到这个新硬盘中的,只能在新硬盘中创建新的文件夹,然后再保存数据。

对于对象存储就没有这样的问题,所有文件(或者叫对象,其实是一回事)都放
“硬盘”根目录上,不需要各级文件夹,只有每个文件对应的key,

当前硬盘满了,增加新硬盘之后,新的文件就直接放在新硬盘的根目录下不需创建各种文件夹。

用户并不清楚自己的文件是放在哪个硬盘上,反正只要有key就可以找到自己的文件。

从上面这个简化的例子,我们可以看到对象存储的以下特点

  • 提取文件只需要文件对应的Key,不需要知道各级路径(易于访问)
  • 对象存储扩展时只需要加硬盘,不用创建文件系统(方便扩展)
  • 因为不需要统一的文件系统,所以各种硬盘的规格限制也少了很多(降低成本)

说了这么多,具体使用时对象存储和文件存储有什么不同吗?

对用户来说其实差不多,只是命令换成了对象存储自己的命令而已。对象存储可以保存所有文件存储能保存的文件,而且保存成本更低。

(至于具体价格,有兴趣的朋友自己查吧,AWS的定价机制挺复杂的,一下子也说不清,反正就是便宜:))

2. S3存储类型(Storage classes)

S3提供了多种存储类型(Storage classes)以适用于不同的业务场景,默认的存储类型为S3 Standard

  • S3 Standard:需要快速存取的数据
  • S3 Standard-IA,S3 One Zone-IA:不需要频繁存取的数据
  • S3 Glacier,S3 Glacier Deep Archive:归档数据

S3默认的存储类型为Standard。

当我们不确定数据的存取需求时,我们也可以选择S3 Intelligent-Tiering类型。

S3 Intelligent-Tiering会根据我们存取数据的模式(pattern)改变,自动调整数据的存储类形,使之适用于相应的场景。

3. s3存储管理

S3提供了多种功能特性来进行存储管理

  • S3 Lifecycle:通过lifecycle policy来管理存储对象,比如可以转换存储类型或者使对象过期
  • S3 Object Lock:可以在一定期限或者永久地阻止对象对删除或者修改
  • S3 Replication:把对象和其元数据、tag等复制到一个或多个Regions的bucket中
  • S3 Batch Operations:通过S3 Api或者控制台大批量(十亿级别)操作存储对象

4. 访问控制(Access management)

S3提供了各种方法来监控和管理访问权限。默认情况下,用户创建的Bucket和对象(object)均为私有,即用户只能访问自己创建的对象。

当需要访问其它Bucket时,可以通过以下方式控制访问权限

  • S3 Block Public Access:阻止public(任意用户可以是非IAM用户)访问Bucket或者对象。默认情况下,新建的Bucket都是不能被public访问的
  • AWS Identity and Access Management (IAM):通过IAM来管理Bucket和对象的访问权限,我们在《一文搞懂 AWS IAM 权限 基础篇下 实战》中用S3来测试了相关权限管理内容
  • Bucket policies:resource-based policy,在bucket中设置访问权限控制,我们同样在《一文搞懂 AWS IAM 权限 基础篇下 实战》中进行了测试
  • Access control lists (ACLs):早期的权限控制方法,现在AWS官方推荐使用IAM和Bucket policies的权限管理方法

5. 数据处理

为了数据传输以及触发workflow, s3还提供以下的功能

  • S3 Object Lambda:利用AWS Lambda函数,可以添加自己的代码到S3 GET request中,以便修改及处理数据。比如,过滤数据,动态调整图像大小,编辑加密信息等等
  • Event notifications:当S3对象有变动时,触发AWS SNS,SQS,Lambda等其它AWS服务

6. S3的主要概念

S3是AWS的对象存储服务,在使用时我们先创建一个Bucket,Bucket是存放对象(Object,可以是文件,图片,视频)的容器。在创建Bucket时,我们定义Bucket的名称并且选择一个Region(一般选择离自己最近的Region)。

当我们把对象(Object)存放到Bucket中时,会指定一个Key,Key是对象的唯一标识。

我们可以利用S3 Versioning来保存对象的每个不同版本,这样可以防止对象被意外删除或者修改。

我们通过IAM和Bucket policy来控制访问Bucket和对象的权限。

S3一般是通过intenet访问的,当我们需要从不能访问internet的VPC subnet中访问S3服务时,我们可以利用S3 Access Points来实现。

后记


之前写EKS,Kubernetes相关内容太多了,感觉越写越多,快成EKS专场了。是时候换个AWS服务写写了。

有朋友“27149”提建议说,“不要写AWS服务时,只说贵或者便宜,可以写上具体价格。”

当时我觉得这主意不错,今天写文章时也想把S3的价格列出来,结果一看价格算法,实在是太繁琐了,直接放弃了。。还是用贵和便宜吧:)


喜欢请点赞,禁止转载,转发请标明出处

关注 B 站 UP 主“我是手拉面” 观看更多视频

51CTO博客
https://blog.51cto.com/tansong

微信公众号“全是 AWS 干货”