冰泉视觉


2011-01-22

谈谈Google Storage

前天收到了来自Google Storage的注册邀请信,这才想起来自己在半年之前申请过这玩意儿,无奈当时限制美国境内的开发者申请使用,而且申请周期很长,几个月过去了都没有反应,自己就把这件事给忘了。现在来的虽然有点晚,但是有总比没有强。迟来了,但是自己不能又迟一步,冰泉在初步尝试后第一时间给大家来介绍一下。

先来说说Google Storage吧!从名称上就知道是Google提供的一个数据存储服务,具体说来是Google利用“云”技术提供的一个给应用程序开发人员使用的数据存储服务,数据种类不做限制,而且大小只要未超过用户限额即可。目前Google提供给开发着的配额是100G,每月流量300G,如果大小超标的话服务会停止,直至开发者删除文件或者花钱购买空间,流量同样如此,有点类似与Google App Engine的限制。但是超过100G级别的这种免费配额在任何其他服务商是不可能见到的,作为Google云计算的主要竞争对手Amazon的S3服务却没有这么豪气,只提供了短时间的体验时间。是不是心动了?现在就开始来介绍一下冰泉的使用体验!

Google Storage的域名绑定问题

作为给应用开发人员的服务来讲,自定义域名是自己作品的一个展现,也是一个开放性的特征。虽然在google的各大服务中,自定义域名是标配,Google Storage也不例外。那么如何进行绑定呢?下面来讲一讲具体步骤

首先登录Google Storage manager(Google Storage manager是Google Storage的在线管理UI)https://sandbox.google.com/storage/m/如下图

image

在这里冰泉已经添加了taiku.net的域名,

如果要添加新的域名需要在顶级域名中

1,在Google webmastershttps://www.google.com/webmasters/verification/

中按照提示验证你对该域名的所有权;

2,在Google Storage中添加名为你自己需要绑定域名的bucket,如冰泉需要绑定的是file.taiku.net则新建file.taiku.net的bucket,注意不带http://;

3,在域名控制面板中添加对于域名的cname记录到 c.commondatastorage.googleapis.com;

4,等待记录生效。

这里给大家一个绑定后的效果

http://file.taiku.net/Matlab%E5%BC%95%E6%93%8E%E8%B0%83%E7%94%A8.doc

Google Storage的管理方式

Google 提供了基于Web的管理工具Google Storage manager和基于客户端的命令行工具gsutil,,但是Google Storage manager不支持IE,并且功能有限,不能改变,不能批量改变授权等,命令行工具gsutil也不能运行在windows平台上,而且操作不是很方便,但是值得高兴的是许多开发者已经开发了基于Google Storage API的管理工具,包括windows,MAC等系统。
- Boto: a Python interface to GS and S3
- CloudBerry: a file manager for Windows
- Cyberduck: a browser for Mac
- Dasein Cloud: an open source Java API
- Data Nucleus: JDO/JPA plug in
- Gladinet: maps network drives and provides AFS support
- gstore: a Ruby client library
- SharpGs: a C# library

下面来补一张冰泉现在使用的CloudBerry界面

CloudBerry

Google Storage的API及实例

Google所称的“RESTful interface”并非是指"you can program with the API restfully",no!no!no!验证部分可以把人搞疯掉(下面的演示代码大部分都是为了验证)

这里的"RESTful"指的是一种设计风格(虽然不是一种标准,但是这样理解可能更容易些),因此在开篇我就直接引用了单词“RESTful”。

GS API的实现依赖标准的HTTP方法,诸如如DELETE, GET, HEAD, 还有 PUT,熟悉web service的话应该很容易上手。

废话不多说,下面来看看这个RESTful的API到底是个什么东西。

上文提到了一个概念“用户存储的任何数据(文件)都所属于某个Bucket之下”。

一个用户可以有多个Bucket,但是Bucket的命名是严格限制的。

说到这里Bucket的概念跟Windows里的驱动器盘符就很相似了,要对GS内的数据进行操作(除了创建一个Bucket)首先要知道这个数据的所在的Bucket

因此我们先从列出所有的Bucket开始。

Google的文档告诉我们使用GET Service可以获取所有的Buckets

因此我们按照Google的要求发送一个符合条件的HTTP请求即可。

这个请求有如下头域(header)

  • Authorization   验证字符串
  • Content-Length     HTTP请求内容的长度
  • Date HTTP请求的日期
  • Host Google Storage服务器的URI

每个header都是必须的

Authorization     这个问题最复杂,等下说
Content-Length     在此例中应该为0,因为发送的HTTP请求只包含若干header,body部分为空
Date 请求发送的日期,看起来很简单但是设置这个Date还真是耗了我不少时间(见代码注释)
Host 确实很简单,Google有提供,一串URI就行了 

 

这就是全部了,发送一个包含这些headers的请求然后等着Google的回应就行了。

从服务器返回的response是一个XML文档,包含所请求的信息,本例中如下图所示:

可以看到,所有Buckets的信息都在里面了,取得了这个XML文档之后进行解析就能得到我们想要的

现在有 1 条评论啦 »

  1. 阿修罗
    阿修罗 发表于 2011-1-30 , 0:18:52 Internet Explorer 6.0 Windows XP 回复

    文章有点长啊!

打劫!!留下你的评论 »

贴图表情