AWS S3
业务场景
挑战
- Web服务器传输大型文件可能引起网络延迟
- 用户生成的内容需要分配到所有的web服务器中
解决方案
- 静态资产存放在S3中
- S3中的对象设置为公开,用户可以直接访问
S3的好处
- 通过API或者HTTP进行访问
- S3是以冗余方式将对象存储,至少在三个可用区存放副本
- S3使用校验和来验证数据的完整性
- 提供完善的版本控制使用户能够保存、检索和还原每个对象的各个版本
- 多副本的数据一致性
S3 属性
存储桶 Buckets
- 存储S3的容器
- Bucket 名 最多包含63个字符,且在全球AWS都必须是唯一的
- 最佳实践是包含并符合DNS域名规范来对Bucket命名
- 在靠近用户的区域创建Bucket以优化性能
- 每用户最多可创建100个存储桶
- 存储桶需要指定区域,但是不能指定可用区
对象 Object
- 每一个存储在S3的实体或文件都是对象
- 最大支持单个对象5TB
- 对象由文件本身和元数据组成
- 文件本身在S3看来只是一串字节流
- 元数据包含了对象的名称和键值,系统元数据包括了MD5,上次修改日期等系统信息,用户元数据是用户的可选项
- 获取对象使用的Request包头
- x-amz-meta-
- x-amz-storage-class
- Content-MD5
- Content-Length
数据结构
键(Key):可以认为是数据的名字
值(Value):表示数据本身
版本号(Version ID):对于启用了版本控制的存储桶来说很重要
元数据(Metadata):关于数据的描述,比如说数据的创建时间,更改时间,文件类型,文件大小等信息
访问控制信息:能管理对Bucket内文件的访问权限
Key
每个对象的标识,在存储桶内唯一
最大支持1024字节的UTF-8字符,可以包含斜杠等
存储桶名+Key 组成S3对象的唯一标识
最佳命名实践是利用/进行命名对对象进行逻辑组织,但记住这并不代表文件是被层次组织的,S3对象始终处于一个平面而不是一个真正的File System
S3对象可以基于其唯一标识通过Internet直接寻址访问,URL就是其唯一标识
对象标签
每个对象添加最多10个标签
用标签标记后可以用于IAM策略管理
S3 特性
S3 操作
基于REST API接口进行操作,将HTTP动词映射到CRUD操作
实际使用更高级的接口(如编程语言,SDK,CLI和控制台)来调用REST API
可用性和持久性
S3采用高度持久和可用的存储基础架构
持久性 = 11个9
可用性 = 4 个 9
建议采用版本控制、跨域区复制、MFA删除等方式来防止用户意外造成的逻辑错误
一致性
S3会自动在区域内对数据进行自动复制
S3是一个最终一致性系统,保证所有的获取都是一致的
为新对象PUTS 提供 先写后读一致性
为 Overwrite PUTS和DELETE提供最终一致性
S3 定价策略
存储容量
读取操作
数据传输
S3高级功能
存储级别
S3-Standard
提供高耐用、高可用、低延迟和高性能的存储对象
S3-Standard-IA
提供较低的高可用标准但仍然是多可用区部署的,但设计用于长期存取和访问频率较低的数据,
利用规模效应对存储超过30天以上的提供更低成本的选项,最小收费粒度128KB,最短使用30天。
S3-ONEZONE-IA
类似于Standard-IA,但是仅部署在一个可用区内提供高可用
用于非关键性和易重现数据,用于替代RRS
INTELLIGENT_TIERING
自动分层的数据,类似于IA的持久性和可用性
能够提供标准的读写性能但不是一致的,取决于读写请求频率
有额外的监控和自动分层的成本,最短使用30天,小于128K的对象没有资格进行自动分层但仍收费。
S3减少冗余存储 RRS
适用于非关键数据或易于重现的派生数据,支持低延迟访问,不支持高可用的(4个9持久性)
目前已经不再推荐,使用S3-ONEZONE-IA替代
Glacier
成本极低的归档数据存储,不需要实时数据访问
原文地址:https://blog.51cto.com/wzlinux/2422636