一、什么是AmazonS3
Amazon Simple Storaae Service 是互联网存储解决方案。该服务旨在降低开发人员进行网络规模级计算的难度。
Amazon S3 提供了一个简单 Web 服务接口,可用于随时在 Web 上的任何位置存储和检索任何数量的数据。此服务让所有开发人员都能访问同一个具备高扩展性、可靠性、安全性和快速价廉的数据存储基础设施 ,Amazon 用它来运行其全球的网站网络。此服务旨在为开发人员带来最大化的规模效益。
二、使用 Amazon S3 的优势
Amazon S3 特意内置了着重于简易性和稳健性的最小功能集。以下是使用 Amazon S3 的一些优势:
• 创建存储桶 – 创建和命名存储数据的存储桶。存储桶是 Amazon S3 中用于数据存储的基础容器。
• 存储数据 – 在存储桶中存储无限量的数据。可将所需数量的对象上传到 Amazon S3 存储桶。每个对象可
包含最多 5 TB 的数据。使用开发人员分配的唯一键值存储和检索每个对象。
• 下载数据 – 下载您的数据或允许其他人进行下载。随时下载您的数据或允许其他人进行下载。
• 权限 – 对于要在您的 Amazon S3 存储桶中上传或下载数据的其他人员,您可以授予其访问权限或拒绝其
访问_ 将上传和下载的许可授予三种类型的用户。身份验证机制可帮助确保数据安全,以防未授权访问。
• 标准接口 – 使用基于标准的 REST 和 SOAP 接口,它们可与任何 Internet 开发工具包搭配使用。(HTTP 上的 SOAP 支持已弃用,但是仍可在 HTTPS 上使用。对于 SOAP 将不支持新 AmazonS3 功能。建议您使用 REST API 或 AWS 开发工具包。)
三、基本概念
1、存储桶
存储桶是 Amazon S3 中用于存储对象的容器。每个对象都储存在一个存储桶中。例如,如果名为 photos/puppy.jpg 的对象存储在 johnsmith 存储桶中 ,则可使用 URL:http://iohnsmith.s3.amazonaws.com/photos/puppy.ipg 对该对象进行寻址。
存储桶可用于多种用途: 它们在最高级别组织 Amazon S3 命名空间;它们标识负责存储和数据传输费用的账户;它们在访问控制中发挥作用;它们用作使用情况报告的聚合单元。
用户可以配苦存储桶,以便在特定 AWS 区域进行创建。也可以配置存储桶,以便在每次向它添加对象时,Amazon S3 都会生成一个唯一的版本ID 并将其分配给对象。
2、对象
对象是 Amazon S3 中存储的其本实体。对象由对象数据和元数据组成。数据部分对 Amazon S3 不诱明。元数据是一组描述对象的名称-值对。其中包括一些默认元数据(如上次修改日期)和标准HTTP 元数据(如 Content-Type)。您还可以在存储对象时指定自定义元数据。
在存储桶中,对象将由键(名称)和版本 ID 进行唯一地标识。
3、键
键是指存储桶中对象的唯一标识符。存储桶内的每个对象都只能有一个键。存储桶、键和版本 ID 的组合唯一标识各个对象。因此,您可以将 Amazon S3 看作“存储桶 + 键 + 版本”与对象本身之间的基本数据映射。将 Web 服务终端节点、存储桶名、密钥和版本(可选)组合在一起,可唯一地寻址 Amazon S3 中的每个对象。例如,在 URL http://doc.s3.amazonaws.com/2006-0301/AmazonS3.wsdl 中,“doc”是存储桶的名称,“2006-03-01/AmazonS3.wsdl”是键。
4、区域
您可以选择一个 AWS 区域供 Amazon S3 存储您创建的存储桶。您可以选择一个区域,以便优化延迟、尽可能降低成本或满足法规要求。在某一区域存储的数据元将一直留在该区域,除非您特意将其传输到另一区域。例如,存储在欧洲(爱尔兰)区域中的对象将一直留在该区域。
5、用户id
账户访问密钥提供对账户拥有的 AWS 资源的完全访问权限。以下是访问密钥示例:
访问密钥 ID (20 个字符的字母数字字符串)。例如:AKIAIOSFODNN7EXAMPLE
访问密钥ID 可唯一标识 AWS 账户。
6、KEY SECRET
秘密访问密钥(40个字符的字符串)。
例如:wJalrXUtnFEMVK7MDENG/bPxRfiCYEXAMPLEKEY
可以使用这些访问密钥向 Amazon S3 发送经身份验证的请求。
7、Amazon S3 数据一致性模型
Amazon S3 在所有区域为 S3 存储桶中的新对象的 PUTS 提供写后读一致性,不过有一条警告。说明如下,
如果在创建对象之前对键名发出 HEAD 或 GET 请求 (查看该对象是否存在) Amazon S3 提供写后读最终一致性。
Amazon S3 在所有区域提供最终一致性用于覆盖 PUTS 和 DELETES。
单个键的更新是原子更新。例如,如果您对一个现有键执行 PUT 操作,则后续读取可能会返回旧数据或已更新的数据,但它永远不会返回损坏的数据或部分数据。
Amazon S3 通过在 AWS 数据中心内的多个服务器之间复制数据,从而实现高可用性。如果 PUT 请求成功,则数据已安全存储。但是,有关更改的信息必须在 Amazon S3 间进行复制,这可能需要一些时间,因此您可能会观察到以下行为:
• 这是一个过程,会将一个新对象写入 Amazon S3,并立即列出其存储桶内的密钥。在充分传播此更改前,此对象可能不会显示在列表中。
• 这是一个过程,会替换一个现有的对象,并立即尝试读取此对象。在充分传播此更改前,Amazon S3 可能会返回先前的数据。
• 这是一个过程,会删除一个现有的对象,并立即尝试读取此对象。在充分传播此删除前,Amazon S3 可能会返回删除的数据。
• 这是一个过程,会删除一个现有的对象,并立即列出其存储桶内的键。在充分传播此删除前,Amazon S3可能会列出删除的对象。
(Amazon S3 目前不支持对象锁定。如果同时对同一键发出两个 PUT 请求,则以带有最新时间戳的请求为准。如果这会导致问题,需要在应用程序中创建对象锁定机制。)
更新是基于键的。无法跨键值实现原子更新。例如,无法根据一个键值的更新对另一个键值进行更
新,除非将此功能设计到应用程序中。
下表描述了最终一致性读取和一致性读取的特征。
最终一致性读取 | 一致性读取 |
过时读取可能性 | 无过时读取 |
最低读取延迟 | 潜在的更高读取延迟 |
最高读取吞吐量 | 潜在的更低读取吞吐量 |