AWS S3是一个非常厉害的服务,上个月S3宕机4小时,江湖上传出了“半个互联网出现问题”的传言。姑且不谈S3的影响力有多大,在计算单元越来越小且移动存储设备近两年并未降价的趋势下,高可用高伸缩的云存储服务应该成为每一个开发者必备的知识。

简单来说S3提供了一些bucket,租户可以在其中存放一些对象,何为对象?所有静态文件都属于镜像。
关于S3的高持久和高可用:

S3有几个重要的特点

  • Sunolicity:简单,S3服务可以使用AWS console控制,可以使用命令行,可以通过各种语言的sdk与各应用深度集成。
  • Drability:数据持久,S3(除了冗余备份服务)可以提供高达11个9的数据持久性,且提供跨Region备份,版本管理,充分保证数据持久性和容灾性(数据丢失可通过版本管理即使回滚)。
  • Scalability:可扩展性,S3对租户的文件存储总量不做限制,租户可以存放需求相当的任何数量级的对象在S3上。
  • Security:安全,AWS S3的文件传输都经过SSL加密,租户可以通过设置IAM管理对象访问权限,租户也可以选择在本地加密后上传S3,使用前再选择解密文件。
  • Available:可用性,S3的Standard提供可用性达到99.99%的服务,IA(Infrequent Access)达到99.9%,RRS(Reduced Redundancy Storage)达到99.99%。
  • Low Cost:低花费,这一点除了体现在S3按需收费上,还体现在S3的生存周期管理上,S3可以定期将久不访问的数据转移到IA服务上,在定期归档备份至Glacier中。
  • Broad integration with other AWS services:与AWS其他服务广泛集成,包括安全(IAM, KMS),报警(CLoudWatch, CloudTrail & Event Notifications),计算(Lambda),数据库(EMR, Redshift)。
  • Enterprise-class Storage Management:企业级存储管理,S3允许租户采用数据驱动的方式提高存储优化,数据安全性和管理效率。

S3的使用场景

内容存储及分发

S3可以用以上传/下载文件,包括音频视频文件,比如构建一个提供给用户分享视频的网站,S3可以提供无限伸缩的空间,以及跨Region的备份,和定期的存储转移,充分保证网站可用性和高负载能力,另外还提供上传下载加密,以及访问请权限控制的功能。

数据分析存储

S3可以用于存储用于数据分析的原始数据,因其很容易和EC2,Lambda等AWS的计算资源或事件触发器集成,可以轻松使用S3构建数据驱动的Data Pipeline,用于数据分析。且S3也可以用于存放数据分析产生的报告。

备份,存档以及灾难恢复

因为S3的版本管理和跨Region备份特特性,S3很适合作为备份,且可以定期将数据转归档存储到Glacier中,且易于恢复。

静态网站部署

利用S3的高持久和4个9的可用性,可以将自己的静态网站部署到S3上,有以下几个好处:

  • 不用担心激增的访问量,S3可以处理激增的访问量,而不用改变网站架构
  • S3是全球的,意味着你的网站可以在瞬间被部署到全球任意一个或多个节点
  • S3是按使用付费的

S3的功能及特性

S3有很多功能特性用于构建服务,这些服务都往往相互依存,了解服务功能固然重要,但结合使用场景才能凸显其价值。
参照:https://aws.amazon.com/s3/details/https://www.amazonaws.cn/en/s3/details/

属性

Version

开启版本控制后,对于bucket里每一个object的操作都会在版本中被记录,租户可以在console中下载历史版本,回滚,删除版本。值得一提的是,在跨Region备份功能开启时,主Bucket的版本删除并不会影响到备份bucket的版本。

Logging

该功能可以指定一个bucket和一个路径用于存放租户对于S3使用的所有日志,包括该bucket内的存取更新对象的操作。

Staic website hosting

开启此功能可以将一个bucket变成一个静态网站,只需要制定入口index.html和错误页面即可。当然还有一个前提是设置对象权限为所有人外部可访问。

Tags

给Bucket资源打上一个或多个标签,方便管理。

Cross-region replication

制定一个另一个Region的Bucket作为备份,需要Version功能开启。

Transfer Acceleration

加速上传功能,类似于CloudFront,通过缓存在Globle Infrastructure的节点加速上传。

Events

开启这个功能,当S3的bucket或object发生动作时,可以触发SNS topic或SQS队列,或者Lambda Function。

授权

Access Control List

大概就是IAM的某一个用户,可以对对象/权限控制执行如何操作(读/写),值得注意的是,默认情况下一个bucket创建出来后它的全显是只有它的创建者可以读/写这个bucket,粒度较大,适用于整个bucket的权控制。

Bucket Policy

更细粒度的权限控制方案,以资源标识符为单位,与IAM相对应,可用于指定某个用户可以对bucket内部的哪些资源做何种操作。

Cross-Origin Resource Sharing (CORS)

允许外链请求,在网站中使用API调用S3的资源的时候必须将调用url添加到该项信任中。

管理

Lifecycle

生存周期主要针对一个文件被上传到S3中,一段时间后访问会减少,再过一段时间可能根本不会被访问而只需要备份的应用场景,可以设置Standard S3 -> IA S3 -> Glacier 的转移顺序,主要价值是减小开支。
关于Lifecycle还有一个重要的表格:

Analytics

可以按标签过滤bucket中的object,生成csv报告,并手动将过滤出来的object转存到另一个同Region的bucket内。

Metrics

分为Storage metrics,Request metrics,Data transfer metrics,跟Cloudwatch结合,从多个维度度量租户的S3使用情况。

Inventory

S3的一个对象分拣服务,通过Inventory的方式定期将对象分类。

限制

  • 一个对象最大不能超过5TB。
  • 一个账号最多可创建100个bucket。
  • S3普通上传模式最大只支持5GB以下的文件大小,开启multipart uploadingenable多进程上传和断点续传,从而提高上传效率,在带宽充足且有大文件需要上传的时候可以开启这个功能。