知识大全 如何用Java平台访问开源云存储

Posted

篇首语:一个人必须学习与自己不同类型的人相处,不然生活何其孤苦。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 如何用Java平台访问开源云存储相关的知识,希望对你有一定的参考价值。

如何用Java平台访问开源云存储?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  尽管云计算这一术语并不新鲜(Amazon在 年就开始提供它的云服务) 但从 年起它才开始真正成为流行词 这期间 Google和Amazon的云服务逐渐获得了公众的关注 Google的App Engine使用户能够在Google基础设施上构建和托管 Web 应用程序

  连同S AmazonWeb Services还包括Elastic Cloud Compute (EC )计算Web服务 该服务可以在Amazon的基础设施上托管应用程序 其他公司也开始蠢蠢欲动 准备与Amazon和Google一决高下 其中就包括 Microsoft?的 Azure 甚至 Sun Microsystems(其云计算还没有正式推向市场)也想分一杯羹 例如IBM最近宣布 它将提供某些产品供开发人员在AmazonEC 环境中使用

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

  面向开源的S 云平台介绍

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

  以Amazon的S 产品为例 顾名思义 这是一个公开的服务 使 Web 开发人员能够存储数字资产(如图片 视频 音乐和文档等) 以便在应用程序中使用 使用S 时 它就像一个位于 Internet 的机器 有一个包含数字资产的硬盘驱动 实际上 它涉及到许多机器(位于各个地理位置) 其中包含数字资产(或者数字资产的某些部分) Amazon还处理所有复杂的服务请求 可以存储数据并检索数据 您只需要付少量的费用(大约每月 美分 /GB)就可以在Amazon的服务器上存储数据 美元即可通过Amazon服务器传输数据

  Amazon的S 服务没有重复开发 它公开了RESTful API 使您能够使用任何支持 HTTP 通信的语言访问S JetS t项目是一个开源Java库 可以抽象出使用S 的RESTful API的细节 将API公开为常见的Java方法和类 编写的代码越少越好 难道不是吗?充分利用其他人的成果也是不错的 在本文中您将看到 JetS t使S 和Java语言的工作变得更加简单 从根本上提高了效率

  S 开源应用模式介绍

  理论上 S 是一个全球存储区域网络(SAN) 它表现为一个超大的硬盘 您可以在其中存储和检索数字资产 但是 从技术上讲 Amazon的架构有一些不同 您通过S 存储和检索的资产被称为对象 对象存储在存储段(bucket)中 您可以用硬盘进行类比 对象就像是文件 存储段就像是文件夹(或目录) 与硬盘一样 对象和存储段也可以通过统一资源标识符(Uniform Resource Identifier URI)查找

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

  存储段在S 中是URI的根 也就是说 存储段的名称将是指向S 中某个对象的URI的一部分 例如 如果我有一个名为 agdocs 的存储段以及一个名为 whitepaper pdf 的对象 URI将是

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

  这里Amazon有一个神奇的DNS魔术 用户不用担心S 资产的 URL 通过 Domain Name System (DNS) 和 CNAME(canonical name的缩写)记录 您可以将自定义程度更高的 URL 映射到S 的 URL 这样一来 您就隐藏了您(或您的应用程序)依赖S 的事实!

  开始使用开源S 和JetS t

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

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

  有了访问密钥和秘密密钥 您可以下载 JetS t并使用它通过RESTful API与S 交互

  使用编程手段通过 JetS t 登录S 可以分为两步 首先 必须创建一个 AWSCredentials 对象 然后将它传递到 S Service 对象 AWSCredentials 对象非常简单 它将访问密钥和秘密密钥视为 String S Service 对象实际上是一个接口类型 因为S 同时提供RESTful API和一个 SOAP API JetS t 库可以提供两种实现类型 RestS Service 和 SoapS Service 就本文而言(包括大部分S 事务) RESTful API的简洁性让它成为一个很好的选择

  创建一个连接的 RestS Service 实例很简单 如清单 所示

  步骤 创建一个 JetS t 的 RestS Service 实例

  def awsAccessKey = blahblah

  def awsSecretKey = blah blah

  def awsCredentials = new AWSCredentials(awsAccessKey awsSecretKey)

  def s Service = new RestS Service(awsCredentials)

  现在可以执行一些有趣的操作了 例如 创建存储段 添加一个影片 然后获取一个有时间限制的URL 实际上 这听起来像一个业务流程 不是吗?这是一个与发布有限资产(比如影片)有关的业务流程

  创建存储段

  对于虚构的电影业务 我将创建一个称为 bc i 的存储段 借助 JetS t 该流程很简单 通过 S Service 类型 您有几个选项 我更喜欢使用 getOrCreateBucket 调用 如清单 所示 顾名思义 调用该方法可能返回一个存储段实例(表示为 S Bucket 类型的实例)或在S 中创建代码段

  S 平台详细使用步骤简介

  步骤 在S 服务器上创建存储段

  def bucket = s Service getOrCreateBucket( bc i )

  不要被我这个简单的代码示例所蒙蔽 JetS t 库的扩展性非常强 例如 您可以快速确定拥有多少存储段 —— 只需通过 listAllBuckets 调用请求一个S Service 实例即可 该方法返回一个 S Bucket 实例数组 对于任何存储段实例 您可以询问它的名称和创建日期 更重要的是 您可以通过JetS t 的 AccessControlList 类型控制与之相关的权限 例如 我可以获取 bc i 存储段实例 并允许任何人可以公开读取和编写 如清单 所示

  步骤 修改存储段的访问控制列表

  def bucket acl = AccessControlList REST_CANNED_PUBLIC_READ_WRITE

  当然 通过 API 您也可以随意删除存储段 Amazon甚至允许您指定创建存储段的地理位置 Amazon简化了存储实际数据的复杂性 但是您可以告诉Amazon要将存储段(及其内部所有的对象)放在美国或欧洲(当前可用选项)

  向存储段添加对象

  使用JetS t 的API创建S 对象就像操作存储段一样简单 JetS t 库也很智能 可以负责处理与S 存储段内文件相关的内容类型 例如 我想向S 上传一段影片nerfwars mp 以便用户能够在有限的时间内观看 创建一个S 对象与创建常见的 java io File 类型一样简单 并能将S Object 类型与存储段关联 如清单 所示

  步骤 创建一个S 对象

  def s obj = new S Object(bucket new File( /path/to/nerfwars mp ))

  使用文件和存储段初始化 S Object 之后 要做的所有事情就是通过 putObject 方法上传 如清单 所示

  步骤 上传影片

  s Service putObject(bucket s obj)

  使用清单 可以完成上传 现在影片位于Amazon服务器了 影片的键就是它的名称 当然 您可以根据需要重写该名称以调用其他对象 实际上 JetS t API(以及 AmazonS RESTful API)公开了许多信息 供您创建对象时使用 我们知道 您还可以提供访问控制列表 S 中的任何对象都可以保存API允许您创建的其他元数据 之后可以通过该元数据的S API(以及派生的 JetS t)查询任何对象

  创建对象的URL

  到现在为止 我的S 实例有一个包含影片的存储段 实际上 我的影片可以通过以下URI获取 但是 只有我才能获取 (在本例中 我只能通过编程方式访问它 因为与所有内容关联的默认访问控制被设置为拒绝任何未授权访问) 我的目的是为选择的用户提供一种方式查看新影片(在有限的时间内) 直到我开始收取访问费用(S 也会提供帮助)

  创建一个公共 URL 是S 提供的一个便捷功能;实际上 使用 S 您可以创建一个公共 URL 但只在一段时间内有效(例如 小时内) 对于我刚刚存储在S 服务器上的影片 我将创建一个 小时内有效的 URL 然后我将向选定的用户提供该 URL 以便他们下载并观看(假定他们在两天内下载)

  处理带有效期的文件

  要创建一个针对S 对象的时间敏感型URL 您可以使用 JetS t 的createSignedGetUrl 方法 这是一个 S Service 类型的静态方法 该方法采用一个存储段名称 一个对象键(在本例中是影片名 还记得吗?) 一些凭证(以 JetS t 的AWSCredentials 对象的形式) 截止日期 如果您了解所需的存储段和对象键 则可以通过清单 中的 Groovy 代码快速获取 URL

  步骤 创建一个时间敏感型URL

  def now = new Date()

  def url = S Service createSignedGetUrl(

  bucket getName() s obj key awsCredentials now + )

  使用 Groovy 我可以通过 + 语法轻松指定一个 小时的限定日期 得到的 URL 如下所示(只有一行)

  Signature=rZvk Gkms=

  如果您的带宽和存储需求不稳定 则S 能提供很多帮助 例如 想想我演示的业务模型 — 影片在一年中特定的时间发布 在传统的存储模型中 您需要在某处机架上购买许多空间(或提供通向它的硬件和管道) 很可能下载量很大 但随后会相对降低 但是 您不能根据需要付费 使用 S 该模型将根据需要付费 — 公司仅在需要时为存储和带宽付费 更重要的是 S 的安全特性可以帮助您进一步指定人们何时可以下载视频 甚至可以指定谁可以下载

  使用S 实现这些需求非常容易 在高水平上 创建一个受限的影片公共下载需要 个步骤

   登录S

   创建存储段

   向存储段添加所需的视频(或对象)

   创建一个指向该视频的时间敏感型 URL

  就是这样!

  使用后记 便利的按需付费模式

  与传统存储模型相比 S 的随需付费模型有很多明显的优势 例如 在自己的硬盘上存储音乐收藏 我必须预先花 美元购买一个 GB 的存储单元 我没有 GB 的数据可以存储 因此我为自己不需要的空间花费了 美分 /GB(虽然很便宜) 我还需要维护设备并支付电费 如果我使用 Amazon 我不需要预先为不重要的资产支付 美元 我只需要支付 美分 /GB 无需为管理和维护存储硬件付费

  现在想想在整个企业范围内实现这些服务的好处 以 Twitter 为例 在S 上为 万个用户帐户存储图片 通过按照使用付费的方式 Twitter 不需要花费大量资金购买硬件基础设施来存储和提供图片服务 也不需要支出人力和部件成本来配置和维护图片

  云的好处还不止这些 您还可以实现低延迟和高可用性 假设存储在Amazon云中的资产遍布全世界 那么为各个位置提供内容的速度将会更快 更重要的是 由于您的资产分布在各种机器上 您的数据在一些机器(或部分网络)瘫痪时也能保持高可用性

cha138/Article/program/Java/JSP/201311/19323

相关参考

知识大全 国外最牛的Php开源建站平台

国外最牛的Php开源建站平台  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  大量的PHP开源(开

步入大数据时代,人们越来越关注数据的存储问题。有研究表明,用于即时访问的“热数据”,最好用闪存:而那些及时性不强,人们又

步入大数据时代,人们越来越关注数据的存储问题。有研究表明,用于即时访问的“热数据”,最好用闪存:而那些及时性不强,人们又经常使用的“温数据”则应保存在磁盘里;用于长期存档的“冷数据”就适合用专用磁带记

知识大全 求推荐几个好的java方面开源项目还有基本学习java好用的书

求推荐几个好的java方面开源项目还有基本学习java好用的书mvnForum,一个小的开源论坛系统,java开源论坛中做得较好的一个;OpenCms,历史最悠久和使用广泛的java开源CMS系统的老

CPU能直接访问存储在内存中的数据,也能直接访问存储在外存中的数据

CPU能直接访问存储在内存中的数据,也能直接访问存储在外存中的数据。_____答案:错误解析:CPU只能直接访问内存中的数据,外存中的数据必须调人内存后,才能被访问。故本题判断错误。

知识大全 用Java+MySQL+PHP轻松构建跨平台的搜索引擎

用Java+MySQL+PHP轻松构建跨平台的搜索引擎  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 Java开源UML建模

Java开源UML建模  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ArgoUML  使用ja

知识大全 Java开源项目Hibernate快速入门

Java开源项目Hibernate快速入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  其实H

知识大全 Java开源项目Hibernate包作用详解

Java开源项目Hibernate包作用详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hi

知识大全 开源以后 Java还能继续创造神话吗?

开源以后Java还能继续创造神话吗?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在柏林的JBos

知识大全 java 开源数据库项目 Derby的问答

java开源数据库项目Derby的问答  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  IBM?在