使用 Amazon S3 云服务轻松实现存储(2)
2010-07-05 11:35
856 查看
创建一个连接的 DE>RestS3ServiceDE> 实例很简单,如清单 1 所示: 现在可以
执行一些有趣的操作了:例如,创建存储段、添加一个影片,然后获取一个有时间限制的 URL
。实际上,这听起来像一个业务流程,不是吗?这是一个与发布有限资产(比如影片)有关的业务流程。
创建存储段
对于虚构的电影业务,我将创建一个称为 bc50i 的存储段。借助 JetS3t,该流程很简单。通过 DE>S3ServiceDE>
类型,您有几个选项。我更喜欢使用 DE>getOrCreateBucketDE> 调用,如清单 2
所示。顾名思义,调用该方法可能返回一个存储段实例(表示为 DE>S3BucketDE> 类型的实例)或在 S3 中创建代码段。 不
要被我这个简单的代码示例所蒙蔽。 JetS3t 库的扩展性非常强。例如,您可以快速确定拥有多少存储段 ―― 只需通过
DE>listAllBucketsDE> 调用请求一个 DE>S3ServiceDE> 实例即可。该方法返回一个
DE>S3BucketDE> 实例数组。对于任何存储段实例,您可以询问它的名称和创建日期。更重要的是,您可以通过 JetS3t 的
DE>AccessControlListDE> 类型控制与之相关的权限。例如,我可以获取 bc50i
存储段实例,并允许任何人可以公开读取和编写,如清单 3 所示: 当然,通过 API,您也可以随意删除存储段。
Amazon 甚至允许您指定创建存储段的地理位置。 Amazon 简化了存储实际数据的复杂性,但是您可以告诉 Amazon
要将存储段(及其内部所有的对象)放在美国或欧洲(当前可用选项)。
向存储段添加对象
使用 JetS3t 的
API 创建 S3 对象就像操作存储段一样简单。 JetS3t 库也很智能,可以负责处理与 S3 存储段内文件相关的内容类型。例如,我想向
S3 上传一段影片 nerfwars2.mp4,以便用户能够在有限的时间内观看。创建一个 S3 对象与创建常见的
DE>java.io.FileDE> 类型一样简单,并能将 DE>S3ObjectDE> 类型与存储段关联,如清单 4
所示: 使用文件和存储段初始化 DE>S3ObjectDE> 之后,要做的所有事情就是通过
DE>putObjectDE> 方法上传,如清单 5 所示: 使用清单 5
可以完成上传。现在影片位于 Amazon 服务器了,影片的键就是它的名称。当然,您可以根据需要重写该名称以调用其他对象。实际上,JetS3t
API(以及 Amazon S3 RESTful API)公开了许多信息,供您创建对象时使用。我们知道,您还可以提供访问控制列表。 S3
中的任何对象都可以保存 API 允许您创建的其他元数据。之后可以通过该元数据的 S3 API(以及派生的 JetS3t)查询任何对象。 创
建对象的 URL
到现在为止,我的 S3 实例有一个包含影片的存储段。实际上,我的影片可以通过以下 URI
获取:http://bc50i.s3.amazonaws.com/nerfwars2.mp4
。但是,只有我才能获取。(在本例中,我只能通过编程方式访问它,因为与所有内容关联的默认访问控制被设置为拒绝任何未授权访问)。我的目的是为选择的用
户提供一种方式查看新影片(在有限的时间内),直到我开始收取访问费用(S3 也会提供帮助)。
图 1
展示了默认的访问控制。返回的 XML
文档(相应地显示在我的浏览器中)告诉我对当前资产的访问被拒绝(http://bc50i.s3.amazonaws.com
/nerfwars2.mp4)。
创建一个公共 URL 是 S3
提供的一个便捷功能;实际上,使用 S3,您可以创建一个公共 URL,但只在一段时间内有效(例如,24 小时内)。对于我刚刚存储在 S3
服务器上的影片,我将创建一个 48 小时内有效的 URL 。然后我将向选定的用户提供该 URL,以便他们下载并观看(假定他们在两天内下载)。
要创建一个针对 S3 对象的时间敏感型 URL,您可以使用 JetS3t 的 DE>createSignedGetUrlDE>
方法,这是一个 DE>S3ServiceDE>
类型的静态方法。该方法采用一个存储段名称、一个对象键(在本例中是影片名,还记得吗?)、一些凭证(以 JetS3t 的
DE>AWSCredentialsDE> 对象的形式)、截止日期。如果您了解所需的存储段和对象键,则可以通过清单 6 中的
Groovy 代码快速获取 URL: 使用 Groovy,我可以通过 DE>+ 2DE>
语法轻松指定一个 48 小时的限定日期。得到的 URL 如下所示(只有一行): 现在,通过该 URL,可以在浏览器中获得图 2 所示的内容:
这个过程是不是很简单?通过几行代码,
我在云中创建了一个安全资产,该资产只能通过特殊的 URL 下载。
利用 S3 完成时间敏感型下载
如果您
的带宽和存储需求不稳定,则 S3 能提供很多帮助。例如,想想我演示的业务模型―
影片在一年中特定的时间发布。在传统的存储模型中,您需要在某处机架上购买许多空间(或提供通向它的硬件和管道),很可能下载量很大,但随后会相对降低。
但是,您不能根据需要付费。使用 S3,该模型将根据需要付费― 公司仅在需要时为存储和带宽付费。更重要的是,S3
的安全特性可以帮助您进一步指定人们何时可以下载视频,甚至可以指定谁可以下载。
使用 S3
实现这些需求非常容易。在高水平上,创建一个受限的影片公共下载需要 4 个步骤: 登录 S3 。
创建存储段。
向存储段添加所需的视频(或对象)。
创建一个指向该视频的时间敏感型 URL 。
就是这样! 结
束语
与传统存储模型相比,S3 的随需付费模型有很多明显的优势。例如,在自己的硬盘上存储音乐收藏,我必须预先花 130
美元购买一个 500GB 的存储单元。我没有 500GB 的数据可以存储,因此我为自己不需要的空间花费了 25 美分
/GB(虽然很便宜)。我还需要维护设备并支付电费。如果我使用 Amazon,我不需要预先为不重要的资产支付 130 美元。我只需要支付 10
美分 /GB,无需为管理和维护存储硬件付费。现在想想在整个企业范围内实现这些服务的好处。以 Twitter 为例,在 S3 上为 100
万个用户帐户存储图片。通过按照使用付费的方式,Twitter
不需要花费大量资金购买硬件基础设施来存储和提供图片服务,也不需要支出人力和部件成本来配置和维护图片。
执行一些有趣的操作了:例如,创建存储段、添加一个影片,然后获取一个有时间限制的 URL
。实际上,这听起来像一个业务流程,不是吗?这是一个与发布有限资产(比如影片)有关的业务流程。
创建存储段
对于虚构的电影业务,我将创建一个称为 bc50i 的存储段。借助 JetS3t,该流程很简单。通过 DE>S3ServiceDE>
类型,您有几个选项。我更喜欢使用 DE>getOrCreateBucketDE> 调用,如清单 2
所示。顾名思义,调用该方法可能返回一个存储段实例(表示为 DE>S3BucketDE> 类型的实例)或在 S3 中创建代码段。 不
要被我这个简单的代码示例所蒙蔽。 JetS3t 库的扩展性非常强。例如,您可以快速确定拥有多少存储段 ―― 只需通过
DE>listAllBucketsDE> 调用请求一个 DE>S3ServiceDE> 实例即可。该方法返回一个
DE>S3BucketDE> 实例数组。对于任何存储段实例,您可以询问它的名称和创建日期。更重要的是,您可以通过 JetS3t 的
DE>AccessControlListDE> 类型控制与之相关的权限。例如,我可以获取 bc50i
存储段实例,并允许任何人可以公开读取和编写,如清单 3 所示: 当然,通过 API,您也可以随意删除存储段。
Amazon 甚至允许您指定创建存储段的地理位置。 Amazon 简化了存储实际数据的复杂性,但是您可以告诉 Amazon
要将存储段(及其内部所有的对象)放在美国或欧洲(当前可用选项)。
向存储段添加对象
使用 JetS3t 的
API 创建 S3 对象就像操作存储段一样简单。 JetS3t 库也很智能,可以负责处理与 S3 存储段内文件相关的内容类型。例如,我想向
S3 上传一段影片 nerfwars2.mp4,以便用户能够在有限的时间内观看。创建一个 S3 对象与创建常见的
DE>java.io.FileDE> 类型一样简单,并能将 DE>S3ObjectDE> 类型与存储段关联,如清单 4
所示: 使用文件和存储段初始化 DE>S3ObjectDE> 之后,要做的所有事情就是通过
DE>putObjectDE> 方法上传,如清单 5 所示: 使用清单 5
可以完成上传。现在影片位于 Amazon 服务器了,影片的键就是它的名称。当然,您可以根据需要重写该名称以调用其他对象。实际上,JetS3t
API(以及 Amazon S3 RESTful API)公开了许多信息,供您创建对象时使用。我们知道,您还可以提供访问控制列表。 S3
中的任何对象都可以保存 API 允许您创建的其他元数据。之后可以通过该元数据的 S3 API(以及派生的 JetS3t)查询任何对象。 创
建对象的 URL
到现在为止,我的 S3 实例有一个包含影片的存储段。实际上,我的影片可以通过以下 URI
获取:http://bc50i.s3.amazonaws.com/nerfwars2.mp4
。但是,只有我才能获取。(在本例中,我只能通过编程方式访问它,因为与所有内容关联的默认访问控制被设置为拒绝任何未授权访问)。我的目的是为选择的用
户提供一种方式查看新影片(在有限的时间内),直到我开始收取访问费用(S3 也会提供帮助)。
图 1
展示了默认的访问控制。返回的 XML
文档(相应地显示在我的浏览器中)告诉我对当前资产的访问被拒绝(http://bc50i.s3.amazonaws.com
/nerfwars2.mp4)。
创建一个公共 URL 是 S3
提供的一个便捷功能;实际上,使用 S3,您可以创建一个公共 URL,但只在一段时间内有效(例如,24 小时内)。对于我刚刚存储在 S3
服务器上的影片,我将创建一个 48 小时内有效的 URL 。然后我将向选定的用户提供该 URL,以便他们下载并观看(假定他们在两天内下载)。
要创建一个针对 S3 对象的时间敏感型 URL,您可以使用 JetS3t 的 DE>createSignedGetUrlDE>
方法,这是一个 DE>S3ServiceDE>
类型的静态方法。该方法采用一个存储段名称、一个对象键(在本例中是影片名,还记得吗?)、一些凭证(以 JetS3t 的
DE>AWSCredentialsDE> 对象的形式)、截止日期。如果您了解所需的存储段和对象键,则可以通过清单 6 中的
Groovy 代码快速获取 URL: 使用 Groovy,我可以通过 DE>+ 2DE>
语法轻松指定一个 48 小时的限定日期。得到的 URL 如下所示(只有一行): 现在,通过该 URL,可以在浏览器中获得图 2 所示的内容:
这个过程是不是很简单?通过几行代码,
我在云中创建了一个安全资产,该资产只能通过特殊的 URL 下载。
利用 S3 完成时间敏感型下载
如果您
的带宽和存储需求不稳定,则 S3 能提供很多帮助。例如,想想我演示的业务模型―
影片在一年中特定的时间发布。在传统的存储模型中,您需要在某处机架上购买许多空间(或提供通向它的硬件和管道),很可能下载量很大,但随后会相对降低。
但是,您不能根据需要付费。使用 S3,该模型将根据需要付费― 公司仅在需要时为存储和带宽付费。更重要的是,S3
的安全特性可以帮助您进一步指定人们何时可以下载视频,甚至可以指定谁可以下载。
使用 S3
实现这些需求非常容易。在高水平上,创建一个受限的影片公共下载需要 4 个步骤: 登录 S3 。
创建存储段。
向存储段添加所需的视频(或对象)。
创建一个指向该视频的时间敏感型 URL 。
就是这样! 结
束语
与传统存储模型相比,S3 的随需付费模型有很多明显的优势。例如,在自己的硬盘上存储音乐收藏,我必须预先花 130
美元购买一个 500GB 的存储单元。我没有 500GB 的数据可以存储,因此我为自己不需要的空间花费了 25 美分
/GB(虽然很便宜)。我还需要维护设备并支付电费。如果我使用 Amazon,我不需要预先为不重要的资产支付 130 美元。我只需要支付 10
美分 /GB,无需为管理和维护存储硬件付费。现在想想在整个企业范围内实现这些服务的好处。以 Twitter 为例,在 S3 上为 100
万个用户帐户存储图片。通过按照使用付费的方式,Twitter
不需要花费大量资金购买硬件基础设施来存储和提供图片服务,也不需要支出人力和部件成本来配置和维护图片。
相关文章推荐
- 使用 Amazon S3 云服务轻松实现存储(3)
- 使用 Amazon S3 服务轻松实现存储
- 使用 Amazon S3 服务轻松实现存储
- 使用 Amazon S3 云服务轻松实现存储(1)
- 使用Go Hijack和jQuery轻松实现异步推送服务
- [转] 使用 PHP 实现云计算,第 1 部分: 结合使用 Amazon S3 和 Zend Framework
- 使用Go Hijack和jQuery轻松实现异步推送服务 推荐
- Linux下通过s3cmd使用Amazon S3服务
- 脚本军火库:使用Amazon S3服务备份指定文件
- 使用 PHP 实现云计算,第 1 部分: 结合使用 Amazon S3 和 Zend Framework
- 使用Go Hijack和jQuery轻松实现异步推送服务
- PHP如何使用Amazon S3进行存储
- 使用MyBatis轻松实现递归查询与存储过程调用
- Nginx+Tomcat+Memcached 集群Session共享[memcached服务安装、tomcat使用memcache存储session、nginx安装配置实现tomcat负载均衡]
- (使用Amazon S3服务自动备份MySQL数据库)
- 使用Heartbeat V1实现nfs作为共享存储的高可用
- Amazon S3存储中断 影响企业营运
- C#编写Windows服务程序 (服务端),客户端使用 消息队列 实现淘宝 订单全链路效果
- 轻松实现基于Heartbeat的高可用web服务集群
- 使用CGLIB轻松实现延迟加载(Lazyload)