Azure Services Platform Step by Step-(9) Windows Azure Storage 概览

作者:流牛木马 来源:流牛木马 日期:2009-3-25

在本系列的第一篇 Azure Services Platform Step by Step-(1) INTRODUCING THE AZURE SERVICES PLATFORM 里就介绍过了,Azure Services Platform 包括 4 个部分。其中,Windows Azure 是支撑整个微软云平台(Azure Services Platform)的基础。换句话说,Windows Azure 是“云平台的操作系统”,它提供了云平台最基本、最重要的服务。

Windows Azure 由两个重要部分构成:

  1. 虚拟化计算服务(提供基于 VM 主机。在上一篇里已经示范过它。)
  2. 各种数据存储服务。即本文要介绍的 Windows Azure Storage

Windows Azure Storage 可以让程序员存储他们想存储的任何数据。按照“云计算”的概念,数据一旦存储到“云”中,就永远不会丢失,程序员可以在任何时候、从任何终端和任何地方获取任意大小的数据。Windows Azure Storage 正是继续遵循这一思想。

Windows Azure Storage 由三个重要部分构成:

  1. Windows Azure Blob:存储大型数据
  2. Windows Azure Table:存储表数据。类似关系数据库中的数据表,但不同。
  3. Windows Azure Queue:为异步工作提供分派消息服务。有点类似Windows系统自身的消息队列。

接下来我们来以此介绍这3个数据服务。

Windows Azure Blob

刚才说过了,这个牛X的服务,就是用来存储大型的数据的。怎么样的数据算大型呢?文件!不知道你是否和笔者一样,刚看到这个服务时第一个反应就是:用它来做网络硬盘。: )

Windows Azure Blob 的数据模型非常简单,看一眼就不会忘记。我们真的大可以把它想象成云端的一个无限大的硬盘。它的结构如下图:

image

大家先别看“Block”部分。很一目了然吧? 一起继续 YY:  如果 Account 是那块硬盘,Container 就代表不同分区(可惜分区里没有文件夹概念),Blob 就是分区根目录里不同的文件。那么上图的意思是:在我的那块叫做"sally”的硬盘里,有"pictures”和"movies”两个分区,"pictures”分区根目录里有"IMG001.JPG “”IMG002.JPG”这两个文件。

这块云端的无限大硬盘在哪里呢?怎样才能找到它?也很简单,它仍然采用 Azure 的管理,使用 REST 的方式操作它。地址是:

http://<account>.blob.core.windows.net/<container>/<blobname>

例如:http://maheshwar.blob.core.windows.net/livesearchimages/AcacusDesert_EN-US1025081982.jpg (这是一张图片,点击链接可直接访问)

现在可以继续解释上图中的“Block”了。既然是采用REST的方式,就是通过 HTTP 的方式,那么真正很大很大的文件,比如 1G 的电影,要直接传上去显然是一件非常困难的事。Block 就是为解决这个问题而存在的。只要你心情好,你大可以把这个电影分割成 1000 个 1M 的 Block 来上传。Block 对下载流程是透明的,下载者根本不知道也不用去知道它正在下载的文件被分成了多少个 block。

(事实上笔者真的用它做自用的网络硬盘,从开发和使用角度来说都非常方便,以后有机会我整理一下代码与大家分享一下)。

Windows Azure Table

这个服务是很多人心中的最爱。

正在使用 VS200X 来开发简单 ASP.NET 应用程序的时候,你会许和很多人一样有以下两个重要习惯:使用关系数据库(如SQL Server);数据库中的某些表直接对应程序里的实体类。你或许会使用代码生成工具,ORM 工具,或者自己写三层架构来完成关系数据库 to 对象的映射。发现没,此时的你是多么希望能够直接将实体存入数据库当中啊!

Windows Azure Table 服务就是用来解决这个问题的。它可以直接将实体类、实体对象存入表格结构当中。它让太多的人感到欣喜。

它比较类似传统关系数据库当中的表格,但是又有很大不同。先看下图的结构:

image

与你想的一样,它支持 LINQ, REST。HTTP 地址是      http://<account>.table.core.windows.net

这部分内容比较多,过几天我会单独使用一节的内容来做一个简单 Demo 讲解它的使用。

Windows Azure Queue

Windows Azure Queue 因为 Windows Azure 的服务架构而存在——这个一个需要消息队列的架构。

我们在《Azure Services Platform Step by Step-(7) 别把 Windows Azure 当虚拟主机使——理解 Windows Azure 服务架构》里了解过,Windows Azure VM 中是如何引入了 Web Role 和 Worker Role 这一非常创新的概念,从而脱离了普通虚拟主机,晋升为“云主机” : )

Windows Azure Queue 最常见的一个应用就是作为 Worker Role 和 Web Role 之间通讯的消息队列。

再举个例子。Web Role 是前台卖牛肉面的,Worker Role 是后台煮牛肉面的。顾客只能接触到 Web Role 这个店员,它收集不同顾客的需求,保持先来后到的顺序记录这些需求到一叠纸条上递给大厨 Worker Roler。大厨 Worker Role 带着口罩,什么话也说不出来,他的工作就是按顺序完成纸条记录的任务。Windows Azure Queue 就充当了这个“任务纸条”的作用。

理解完了“牛肉面”的例子,再看看下图结合一下“云计算”的实际吧。是不是很容易理解呢?

image

Windows Azure Table 与SQL Data Services 的重要不同之处:

在实际开发中,这两者都是最常用的数据存储服务。

博客园网友 montaque 和老赵同志在《Azure Services Platform Step by Step-(8) 开发部署Azure留言板》一文的评论中一起讨论了 Windows Azure Table 和 SQL Data Services 的不同。

Windows Azure Table 旨在提供轻便快捷低成本的大规模存储数据,包含实体和属性。它不是关系数据库,所以不能提供类似 SQL 中 joins 的方法,也不能管理 foreign keys。

SQL Data Services 旨在提供严谨的关系数据方法。

在当前的 Azure 版本中(Azure 平台第一个版本,feasure 还很不完善),如果开发者对 joins 或 foreign keys 等关系数据库的功能需求较大,你可以选择 SQL Data Services,反之建议使用开发更为快捷的 Windows Azure Table。

相关文章