AWSS3技术点分析
一、S3的特点:
l 面向Internet的对象存储
对象通俗来讲就是一个完整文件,没有进行追加写入的、可断电保存在物理介质(硬盘或其他磁盘)中的文件。
l 一个对象的大小可以高达5TB
l 每个对象存储在存储桶中,通过开发人员分配的唯一密钥进行检索
l 弹性存储,无限存储空间、无限对象
l 原生在线HTTP/HTTPS访问
l 通过在同一区域不同可用区间进行复制,可以达到99.999999999%的持久性
l 提供版本管理和生命周期管理
l 可提供基于静态页面的网站托管服务
二、依托S3进行的存储方式:
依托S3进行的存储方式:标准存储、低访问存储、低冗余存储、Glacier(冰川)。
所有上传到S3上的存储文件都是以标准存储的方式存放,必须通过策略才能转换成后两者,但转换成后两种方式的存储文件可以让外部进行直接访问。
低访问存储适合的是低访问量的文件进行存放,它的可靠性也是99.999999999%,文件存储费用只有标准存储的四分一,但每次的访问费用要比标准存储的方式要高;
低冗余存储适合于存放不太重要的数据,可靠性只有99.99%,文件存储费用介于低访问存储和标准存储之间,每次的访问费用与标准存储的一致,但此方式在AWS北京暂时没有提供;
Glacier(冰川)它是一种用于存档的对象存储服务,可类比于传统环境中的磁带,因此所有存放到Glacier的数据,都需要进行几小时的解冻后才能进行调用;
S3上提供文件生命周期的管理方式,来对存放与S3的文件进行基于时间的管理,可以将文件从标准存储转换到另外几种格式,或者直接删除。在调用生命周期管理的时候注意转换成低访问或者低冗余的文件必须超过30天或以上,而Glacier的则是60天。
三、S3的分布式:
S3的命名是唯一的,其逻辑存储介质是桶,而桶的位置在新建时已经固定了桶中的所有数据存储在那个区域当中,默认在不同区域的桶之间是不会进行数据同步的。
S3的分布式应用有两方面,分别是分布式存储和分布式访问。
分布式存储指在一个区域中的文件进行分布式存储到一个地区里若干各数据机房的介质存储中;
分布式访问是指S3可以有多个接入点进行访问,每个点的带宽虽有上限,但多线路叠加的带宽理论上没上限。
注意:S3的分布式存储只是在区域中进行,而它分布式访问就需要依托AWS的Route53进行,因为AWS在全球有50多个网络的边缘接入点,所有访问S3(北京地区只提供南北两个不同的边缘接入点)通过Internet先访问到AWS的边缘接点上,然后通过AWS全球的局域网来连接上S3上,从而降低全球性访问的低延时问题(S3北京除外)。
四、S3与EC2群及本地数据的连接
4.1、S3与EC2群的连接
S3与EC2群可以通过Internet和LAN的方式来进行连接,两者的区别在于Internet需要收费,LAN免费。默认EC2中的VPC与S3是没有建立LAN连接的,需要搭建Endpoint来作为S3的网关连接VPC建立LAN通信。
注意:Endpoint只支持连接同区域的桶,也就是说非同区域的桶连接还是会通过AWS全球局域网进行访问,费用上来说会比Internet要低些;
4.2、S3与EC2群的搭配使用
有两种方式可以让S3成为EC2群的扩展存储:StorageGateway(存储网关)、第三方软件(s3fs-fuse)直接挂载。
StorageGateway(存储网关)是有AWS官方提供的一种服务,它的工作原理是将存储网关安装在其中一台EC2中并桥接到EC2群和S3之间,将S3的存储空间虚拟成iSCSI设备,再让需要的EC2进行存储扩展性连接(AWS北京没有提供)。
s3fs-fuse是第三方软件,可以将S3直接以磁盘的形式挂载到EC2上,可以支持多台设备同时挂载一个桶,此方法需要有足够权限的Key支持挂载,同时只能将整个桶进行挂载,不能是单独的文件夹。
注意:以上两种方法,从逻辑上来讲S3成为了EC2 的一部分,但S3对象存储的本质没有改变,所有需要追加写入或更改已存在S3的文件,都是暂时写入到缓存中,等确定的文件完整性后在异步到S3上。
4.3、S3与本地数据中心的连通
通过安装StorageGateway(存储网关)到本地虚拟设备上,然后桥接到本地集群跟S3上进行连接,从逻辑上来讲与EC2群连接S3的方式没什么区别,但前提需要确保本地数据中心与S3连通的稳定性,因为存储网关虽然异步读写S3,但本质上的对象读写是不支持断点续传的。
五、S3的权限策略
S3支持两个服务提供的策略,IAM和S3,S3桶缺省拒绝所有访问,两个服务策略都可以对S3服务的访问权限进行管控,但IAM只授权给AWS用户或角色对S3进行访问,而S3的策略则可针对所有资源的访问管控,包括:访问源地址、访问域、跨AWS用户的访问等等;当两者策略冲突时,以S3策略优先。
六、S3的数据加密
S3支持多种的数据加密方法,其中官方支持的有三种:使用具有Amazon S3 托管加密密钥的服务器端加密(SSE-S3)、使用具有AWS KMS 托管密钥的服务器端加密(SSE-KMS)、通过使用客户提供的加密密钥的服务器端加密(SSE-C)。这些方式都需要通过API或SDK调用,详细方法请查看S3开发手册。