您的位置:首页 > 其它

使用 Amazon S3 云服务轻松实现存储(1)

2010-07-05 11:34 411 查看
级别: 中级 Andrew Glover, 合伙人, ThirstyHead.com

  2009 年 5 月 04 日
Amazon Simple Storage Service (S3) 是一个公开的服务,Web
应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档。 S3 提供一个 RESTful API
以编程方式实现与该服务的交互。通过本文,您将了解如何使用开源的 JetS3t 库利用 Amazon 的 S3 云服务存储和检索数据。

 
 简介
云是一个抽象的概念,表示松散连接在一起的计算机组,这些计算机共同执行某项任务或者服务,就像是使用一个单独的实体完成一样。此概念背后的架构也很抽
象:每个云提供者都可以根据各自情况随意设计它的产品。软件即服务(Software as a
Service,SaaS)是一个与云相关的概念,表示云向用户提供某种服务。云模型可以降低用户成本,因为他们无需购买软件和硬件也可以运行―
服务提供者已经为用户提供了必要的组件。 云计算简介

  尽管云计算这一术语并不新鲜
(Amazon 在 2006 年就开始提供它的云服务),但从 2008 年起它才开始真正成为流行词,这期间,Google 和 Amazon
的云服务逐渐获得了公众的关注。 Google 的 App Engine 使用户能够在 Google 基础设施上构建和托管 Web 应用程序。连同
S3,Amazon Web Services 还包括 Elastic Cloud Compute (EC2) 计算 Web 服务,该服务可以在
Amazon 的基础设施上托管应用程序。其他公司也开始蠢蠢欲动,准备与 Amazon 和 Google 一决高下,其中就包括
Microsoft®的 Azure,甚至 Sun Microsystems(其云计算还没有正式推向市场)也想分一杯羹。 IBM®
最近宣布,它将提供 某些产品 供开发人员在 Amazon EC2 环境中使用。 以 Amazon 的 S3
产品为例。顾名思义,这是一个公开的服务,使 Web 开发人员能够存储数字资产(如图片、视频、音乐和文档等),以便在应用程序中使用。使用 S3
时,它就像一个位于 Internet
的机器,有一个包含数字资产的硬盘驱动。实际上,它涉及到许多机器(位于各个地理位置),其中包含数字资产(或者数字资产的某些部分)。 Amazon
还处理所有复杂的服务请求,可以存储数据并检索数据。您只需要付少量的费用(大约每月 15 美分 /GB)就可以在 Amazon
的服务器上存储数据,1 美元即可通过 Amazon 服务器传输数据。

  Amazon 的 S3 服务没有重复开发,它公开了
RESTful API,使您能够使用任何支持 HTTP 通信的语言访问 S3 。 JetS3t 项目是一个开源 Java 库,可以抽象出使用
S3 的 RESTful API 的细节,将 API 公开为常见的 Java
方法和类。编写的代码越少越好,难道不是吗?充分利用其他人的成果也是不错的。在本文中您将看到,JetS3t 使 S3 和 Java
语言的工作变得更加简单,从根本上提高了效率。 S3 概述 理论上,S3 是一个全球存储区域网络
(SAN),它表现为一个超大的硬盘,您可以在其中存储和检索数字资产。但是,从技术上讲,Amazon 的架构有一些不同。您通过 S3
存储和检索的资产被称为对象。对象存储在存储段(bucket)中。您可以用硬盘进行类比:对象就像是文件,存储段就像是文件夹(或目录)。与硬盘一样,
对象和存储段也可以通过统一资源标识符(Uniform Resource Identifier,URI)查找。

  例如,在我的硬
盘中,我有一个名为 whitepaper.pdf 的文件,它位于主目录中名为 documents 的文件夹中。相应的,该 pdf 文件的 URI
为 /home/aglover/documents/whitepaper.pdf 。在 S3 中,URI
有一点不同。首先,存储段只能是顶级的― 无法像嵌套硬盘中的文件夹(或目录)一样进行嵌套。其次,存储段必须遵循 Internet
命名法则;句点旁边没有斜杠,名称不包括下划线等等。最后,由于存储段名称已经是 Amazon 域内的 (s3.amazonaws.com) 公共
URI 的一部分,存储段名称必须在所有 S3 中是惟一的。(好消息是每个帐户只能包含 100 个存储段,因此不用担心别人占用了所有的好名字)。 DNS
魔术


  不用担心 S3 资产的 URL 。通过 Domain Name System (DNS) 和
CNAME(canonical name的缩写)记录,您可以将自定义程度更高的 URL 映射到 S3 的 URL
。这样一来,您就隐藏了您(或您的应用程序)依赖 S3 的事实! 存储段在 S3 中是 URI 的根。也就是说,存储段的名称将是指向 S3
中某个对象的 URI 的一部分。例如,如果我有一个名为 agdocs 的存储段以及一个名为 whitepaper.pdf 的对象,URI
将是:http://agdocs.s3.amazonaws.com/whitepaper.pdf 。

  S3
还提供了指定存储段和对象的所有者和权限的能力,就像对待硬件的文件和文件夹一样。在 S3
中定义对象或存储段时,您可以指定一个访问控制策略,注明谁可以访问您的 S3
资产以及如何访问(例如,读和写权限)。相应地,您可以通过许多方式提供对您的对象的访问,使用 RESTful API 只是其中一种。 开
始使用 S3 和 JetS3t

  要开始使用 S3,您需要一个帐户。 S3 不是免费的,因此在创建帐户时您必须向 Amazon
提供一种支付手段(比如信用卡号码)。不用担心― 不收初装费;您只需要为使用付费。对于本文的示例,只需要支付不到 1 美元的费用。

 
 在创建帐户的过程中,您还需要创建凭据:访问密钥和秘密密钥(就像用户名和密码)。(您还可以获取 x.509 证书;但是,只有在使用 Amazon
的 SOAP API 时才需要使用该证书)。和任何访问信息一样,都必须保管好您的秘密密钥。因为任何人使用您的凭据访问 S3
时,您都将为此付费。因此,每当创建存储段或对象时,默认的行为是让所有内容都私有;您必须显式获取对外部世界的访问。

  有了访问密
钥和秘密密钥,您可以下载 JetS3t并使用它通过 RESTful API 与 S3 交互。

  使用编程手段通过 JetS3t
登录 S3 可以分为两步。首先,必须创建一个 DE>AWSCredentialsDE> 对象,然后将它传递到
DE>S3ServiceDE> 对象。DE>AWSCredentialsDE> 对象非常简单。它将访问密钥和秘密密钥视为
DE>StringDE>。DE>S3ServiceDE> 对象实际上是一个接口类型。因为 S3 同时提供
RESTful API 和一个 SOAP API,JetS3t 库可以提供两种实现类型:DE>RestS3ServiceDE> 和
DE>SoapS3ServiceDE>。就本文而言(包括大部分 S3 事务),RESTful API
的简洁性让它成为一个很好的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: