S3应该是Amazon发布的最早的一项网页服务了,已经有十年了,到现在功能越来越多,考试中也是必考的内容,见过最简单的一道送分题问的是S3代表的是什么,S3是英文的缩写,是simple storage service,直译的话是简单存储服务。
S3被用到的最多的功能就是存储数据了,但同时也有很多其他的性能,最简单的使用场景,比如说我搭建了一个资源共享网站,比如说视频,文件啊,这些文件由于大小的原因,很适合放在s3中,在代码中引用就可以了。
S3存储桶
那在s3中存放数据的时候,就需要有个容器来存放,这个容器就叫做s3存储桶,存储桶是s3中用于数据存储的基础容器,需要在指定的AWS区域内创建桶,每个桶的名字必须是整个AWS系统内唯一的,就像域名一样,已经有了淘宝网了,你就不可能再注册一个网站还叫淘宝。每个AWS账户下最多能生成100个S3桶,在S3的桶内还可以任意创建文件夹。当生成存储桶并在其中存放数据后可以根据数据对象的url来对对对象进行访问,美国东部(弗吉尼亚北部)区域内的存储桶访问url就是,http://s3.amazonaws.com/bucket,其他区域的存储桶url是http://s3-aws-region.amazonaws.com/bucket,在考试中也遇到过,告诉你一个区域,然后这个区域内有某个桶,和保存的数据对象,让你选出该对象的url是什么。
在桶内可以存储无限量的数据,就是说桶的大小没有限制,放多少数据都可以,但是每个数据对象的大小是有限制的,范围是从0B到5TB,当数据对象大于100M的时候,推荐使用分段上传。数据对象的存储是以鍵值对的形式保存的。当在某个区域内创建一个存储桶,并在桶内存储数据后,aws会自动的将存储的数据同时复制到这个区域内的所有可用区中,所以默认的存储类型中s3里保存的数据具有很高的可用性(具有11个9)以及持久性(99.99%)也就是说1000亿个数据里最多会丢失一个数据。
注意点:存储桶不能跨区域,只能存在于一个区域内;每个AWS账户只能生成100个S3存储桶;存储桶的命名必须是唯一的;存储桶的拥有着不能转移;只有当存储桶中没有数据的时候,才可以删除该存储桶。
S3数据对象
S3的数据对象就是存放在S3存储桶中的数据,所有的数据都是按照键值对的形式存在的。同时,数据对象还拥有元数据,例如content-type, size等;版本ID,当在S3存储桶中存储数据的时候,如果对存储桶启动版本管理的话,所有的存储对象都会有一个版本ID,当上传具有同样名字的数据的时候,已被保存的数据会被最新的版本所覆盖,但由于启用了版本管理功能,仍然能够将原来的版本恢复。
这里还有两个概念需要大家理解一下,考试中也见到过:
就是s3中的数据写后读一致性和写后读最终一致性,其实这两个也很简单,在任何区域中的s3存储桶中对新生成的对象,然后通过api或直接访问,马上就能读取到新生成的数据文件,利用的就是写后读一致性。但是对已有的数据进行重写覆盖或者是删除的话,不能马上得到结果,得需要一些时间来反映,利用的就是写后读最终一致性。
在存储桶中存储数据对象的时候,还可以选择对这个对象以什么存储类别来存储,最常用的有四种存储类别,可以根据使用场景选择适合自己的存储类别。
有通用型,这个是默认存储类别,当上传对象时没有指定存储类别的话,s3将会采用这个通用性存储类别。这个具有高持久性,以及高可用性,存储的花费也是最高的。
还有不经常访问的Standard—IA,这个用于不频繁访问的数据,但是当访问的时候需要能够快速访问到数据,也具有高持久性和高可用性,花费比通用性低一些。
低冗余存储,主要应用在不是特别重要的,可以通过程序再生的数据,比如说网站在上传了自己的头像,然后网站利用程序生成了头像的缩略图,原图片一般会保存在通用类别中,而生成的缩略图会以低冗余存储类别保存,就算这个图片丢失了,还可以再利用程序对原图片生成一个缩略图,也具有高可用性和高持久性,10000个对象中每年可能会丢失一个对象。
还有最后一个Glacier,这个适用于存档数据,这些数据一般不经常访问,而且存档对象不能用于实时访问,得需要先从glacier里把数据还原出来之后才可以访问,这是和前三个存储类别的一个不同点,而且上传对象时不能一开始就指定以glacier的存储类别保存数据,必须得利用对象的生命周期将对象转成glacier存储类别,它存储对象时成本特别的低。glacier一般都是最后将数据存档,而不能将数据当作备份用,因为从这个存档类别中读取数据需要很长的时间。