a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 177|回复: 1

[其他] JAVA技巧:如何用Java平台访问开源云存储

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
 尽管云计较这一术语并不新奇(Amazon在2006年就瞥绶供给它的云处事),但年夜2008年起它才起头真正成为风行词,这时代,Google和 Amazon的云处事逐渐获得了公家的关注。 Google的App Engine使用户能够在Google基本行动措施上构建和托管 Web 应用轨范。   连同S3,AmazonWeb Services还搜罗Elastic Cloud Compute (EC2)计较Web处事,该处事可以在Amazon的基本行动措施上托管应用轨范。其他公司也起头捋臂张拳,筹备与Amazon和Google一决高下,其中就搜罗 Microsoft?的 Azure,甚至 Sun Microsystems(其云计较还没有正式推向市场)也想分一杯羹。例如IBM比来公布揭晓,它将供给某些产物供开发人员在AmazonEC2 情形中使用。( ]9 F9 M: W' i
  AmazonSimple Storage Service (S3)是一个公开的处事,Web应用轨范开发人员可以使用它存储数字资产,搜罗图片、视频、音乐和文档。S3供给一个 RESTful API以编程体例实现与该处事的交互。经由过程本文,您将体味若何使用开源的JetS3t库操作Amazon的S3云处事存储和检索数据。
; B8 S3 }2 a; T" M8 k( k9 ]+ j5 D面向开源的S3云平台介绍 # O( ]" _# T8 G' N5 @$ {
  云是一个抽象的概念,暗示松散毗连在一路的计较机组,这些计较机配合执行某项使命或者处事,就像是使用一个零丁的实体完成一样。此概念背后的架构也很抽象:每个云供给者都可以按照各自情形随意设计它的产物。软件即处事(Software as a Service,SaaS)是一个与云相关的概念,暗示云向用户供给某种处事。云模子可以降低用户成本,因为他们无需采办软件和硬件也可以运行 — 处事供给者已经为用户供给了需要的组件。
% u, Y; `5 d' ]- y7 V. \' b  以Amazon的S3产物为例。顾名思义,这是一个公开的处事,使 Web 开发人员能够存储数字资产(如图片、视频、音乐和文档等),以便在应用轨范中使用。使用S3时,它就像一个位于 Internet 的机械,有一个包含数字资产的硬盘驱动。现实上,它涉及到良多机械(位于各个地舆位置),其中包含数字资产(或者数字资产的某些部门)。Amazon还措置所有复杂的处事请求,可以存储数据并检索数据。您只需要付少量的费用(年夜约每月 15 美分 /GB)就可以在Amazon的处事器上存储数据,1 美元即可经由过程Amazon处事器传输数据。* _; {# }1 ]8 _$ [$ k8 k
  Amazon的S3处事没有一再开发,它公开了RESTful API,使您能够使用任何撑持 HTTP 通信的说话访谒S3。 JetS3t项目是一个开源Java库,可以抽象出使用S3的RESTful API的细节,将API公开为常见的Java体例和类。编写的代码越少越好,莫非不是吗?充实操作其他人的成不美观也是不错的。在本文中您将看到,JetS3t使S3和Java说话的工作变得加倍简单,年夜根柢上提高了效率。
, _$ G3 v; S( G2 D5 @, CS3开阅暌功用模式介绍 2 y) r  ~% h5 u, y1 u
  理论上,S3是一个全球存储区域收集(SAN),它默示为一个超年夜的硬盘,您可以在其中存储和检索数字资产。可是,年夜手艺上讲,Amazon的架构有一些分歧。您经由过程S3存储和检索的资产被称为对象。对象存储在存储段(bucket)中。您可以用硬盘进行类比:对象就像是文件,存储段就像是文件夹(或目录)。与硬盘一样,对象和存储段也可以经由过程统一资本标识符(Uniform Resource Identifier,URI)查找。5 s( Z0 O/ e5 i, H" r' t
  例如,在我的硬盘中,我有一个名为 whitepaper.pdf 的文件,它位于主目录中名为 documents 的文件夹中。响应的,该pdf文件的URI为/home/aglover/documents/whitepaper.pdf 。在S3中,URI有一点分歧。首先,存储段只能是顶级的 — 无法像嵌套硬盘中的文件夹(或目录)一样进行嵌套。其次,存储段必需遵循 Internet 命名法例;句点旁边没有斜杠,名称不搜罗下划线等等。最后,因为存储段名称已经是Amazon域内的 (s3.amazonaws.com) 公共URI的一部门,存储段名称必需在所有S3中是惟一的。(好动静是每个帐户只能包含 100 个存储段,是以不用担忧别人占用了所有的好名字)。
8 N/ K9 M8 F( {% D2 Y' d5 `) j  存储段在S3中是URI的根。也就是说,存储段的名称将是指向S3中某个对象的URI的一部门。例如,如不美观我有一个名为 agdocs 的存储段以及一个名为 whitepaper.pdf 的对象,URI将是:http://agdocs.s3.amazonaws.com/whitepaper.pdf 。, Q+ E2 }. |' w: T! O$ D9 A
  S3还供给了指定存储段和对象的所有者和权限的能力,就像看待硬件的文件和文件夹一样。在S3中界说对象或存储段时,您可以指定一个访谒节制策略,注明谁可以访谒您的S3资产以及若何访谒(例如,读和写权限)。响应地,您可以经由过程良多体例供给对您的对象的访谒,使用RESTful API只是其一一种。0 X* \7 f0 j7 s& C& C3 A
, Z, D# w4 W: K! Y- t% A& x9 `& E
  这里Amazon有一个神奇的DNS魔术,用户不用担忧S3资产的 URL 。经由过程 Domain Name System (DNS) 和 CNAME(canonical name的缩写)记实,您可以将自界说水平更高的 URL 映射到S3的 URL 。这样一来,您就潜匿了您(或您的应用轨范)依靠S3的事实!
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:24 | 显示全部楼层

JAVA技巧:如何用Java平台访问开源云存储

</p>起头使用开源S3和JetS3t * l9 z  L% c( x0 O$ p; n
  要起头使用S3,您需要一个帐户。S3不是免费的,是以在建树帐户时您必需向Amazon供给一种支出手段(好比信用卡号码)。不用担忧:不收初装费;您只需要为使用付费。对于本文的示例,只需要支出不到 1 美元的费用。5 n/ J& b5 R! _6 [
  在建树帐户的过程中,您还需要建树凭证:访谒密钥和奥奥密钥(境傺用户名和密码)。(您还可以获取 x.509 证书;可是,只有在使用Amazon的 SOAPAPI时才需要使用该证书)。和任何访谒信息一样,都必需保管好您的奥奥密钥。因为任何人使用您的凭证访谒S3时,您都将为此付费。是以,每当建树存储段或对象时,默认的行为是让所有内容都私有;您必需显式获取对外部世界的访谒。7 s, k. m' L- a' m, W3 @
  有了访谒密钥和奥奥密钥,您可以下载 JetS3t并使用它经由过程RESTful API与S3交互。' ]  W8 Q# O4 s
  使用编程手段经由过程 JetS3t 登录S3可以分为两步。首先,必需建树一个 AWSCredentials 对象,然后将它传递到 S3Service 对象。AWSCredentials 对象很是简单。它将访谒密钥和奥奥密钥视为 String。S3Service 对象现实上是一个接口类型。因为S3同时供给RESTful API和一个 SOAP API,JetS3t 库可以供给两种实现类型:RestS3Service 和 SoapS3Service。就本文而言(搜罗年夜部门S3事务),RESTful API的精练性让它成为一个很好的选择。
! p9 x' l9 I3 t1 q  k2 p  建树一个毗连的 RestS3Service 实例很简单,如清单 1 所示:
) Q* A% U+ {4 j% t  轨范 1. 建树一个 JetS3t 的 RestS3Service 实例. z2 W( _* n# k+ |
  def awsAccessKey = "blahblah"
! `; W2 y7 ~! \- c. T% m, Y. X  def awsSecretKey = "blah-blah"( c" z1 c4 Y, E1 z! q5 {
  def awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey)
% ~: B! f5 _( {* y  def s3Service = new RestS3Service(awsCredentials)
/ b* w' B# n; ~4 \+ E. h+ u) d  此刻可以执行一些有趣的操作了:例如,建树存储段、添加一个影片,然后获取一个有时刻限制的URL 。现实上,这听起来像一个营业流程,不是吗?这是一个与发布有限资产(好比影片)有关的营业流程。
& l2 Y5 \( G! y( L  建树存储段
' `2 j- H) N% w7 i7 R" [, g  对于虚构的片子营业,我将建树一个称为 bc50i 的存储段。借助 JetS3t,该流程很简单。经由过程 S3Service 类型,您有几个选项。我更喜欢使用 getOrCreateBucket 挪用,如清单 2 所示。顾名思义,挪用该体例可能返回一个存储段实例(暗示为 S3Bucket 类型的实例)或在S3中建树代码段。  ]0 a: T$ _3 w6 L- r
  S3平台具体使用轨范简介
) u3 C# r& [5 w* Q0 H* Y1 i  轨范 2. 在S3处事器上建树存储段- z, W: U4 j+ s6 k4 C5 P
  def bucket = s3Service.getOrCreateBucket("bc50i")
! w( }) t3 n/ l' U( F% A* X6 ^  不要被我这个简单的代码示例所蒙蔽。JetS3t 库的扩展性很是强。例如,您可以快速确定拥有若干好多存储段 —— 只需经由过程 listAllBuckets 挪用请求一个S3 Service 实例即可。该体例返回一个 S3Bucket 实例数组。对于任何存储段实例,您可以询问它的名称和建树日期。更主要的是,您可以经由过程JetS3t 的 AccessControlList 类型节制与之相关的权限。例如,我可以获取 bc50i 存储段实例,并许可任何人可以公开篡夺和编写,如清单 3 所示:
# ]* l& y2 ?& u, n% W; `; f+ Q6 K  轨范 3. 改削存储段的访谒节制列表" Q  L  X! f7 P+ \
  def bucket.acl = AccessControlList.REST_CANNED_PUBLIC_READ_WRITE
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 15:00 , Processed in 2.678777 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表