第4章 Windows Azure存储服务
Windows Azure存储服务(Storage Service)是Windows Azure平台提供一套云端的、高可靠性的、高可用性的并且是持久化和中心化的存储服务。之前介绍过的本地存储(Local Storage)也可以保存数据,但是它们之间有着本质的区别。
表4-1简单对比了Storage Service和本地存储的特点。Storage Service是Windows Azure平台针对数据存储需要而特别优化的服务,它不单有99.9%高可用性的支持,而且提供了自动的纵向和横向扩展能力。关于横向扩展和负载均衡,我们将在稍后针对每个Storage Service的章节中详细介绍。
表4-1 Storage Service和本地存储的区别
用户使用HTTP/HTTPS协议通过一系列REST API访问Storage Service。这就意味着,Storage Service不仅可以由部署在Windows Azure数据中心的计算服务消费,还可以通过Internet由任意客户端消费。即使是运行在本地的应用程序,也可以通过Windows Azure SDK中的类库或RESTful API使用Storage Service,甚至可以把Storage Service作为一个网络硬盘来使用。为了方便.NET应用程序的调用,Windows Azure SDK提供了一整套访问Storage Service的类库。而本书主要介绍如何基于SDK类库进行访问。
同时,由于Storage Service可以通过HTTP/HTTPS从Internet进行访问,每一个Storage Service都会有一个唯一的URL,这个URL在创建Storage Service的时候就需要指定。
和Hosted Service类似,Storage Service在创建的时候也需要为其指定一个数据中心。用户可以为其单独指定,也可以通过Affinity Group指定到和Hosted Service一致的数据中心来避免数据传输的费用。
Storage Service还提供了CDN(Content Delivery Network,即内容分发网络)服务,使用者可以将Storage Service中的数据分发到微软全球20个CDN节点,加速应用程序的访问速度。关于CDN服务请参考本书8.6节。
安全性方面,Storage Service可以将内容按照不同的级别分为公有信息和私有信息,而访问服务支持HTTP和HTTPS两种访问协议。每一个Storage Service有两个512位的密钥:主密钥和副密钥。应用程序必须设定密钥才能访问私有信息。而且对于私有信息,Storage Service还提供了名为Shared Access Signatures的受控安全机制便于内容的安全分发。关于Shared Access Signatures请参考本书4.3.3节。
4.1 创建新的Storage Service
和Hosted Service类似,用户需要首先申请存储服务才能使用它。登录到Developer Portal,从左侧的导航栏进入Hosted Service,Storage Accounts & CDN并从分类栏选择Storage Accounts。
在主界面中列出了当前登录用户所申请的Storage服务,如图4-1所示,此用户在Ethos Tech这个订阅中申请了两个Storage Service:ethosbeijing和kdrgold。选择一个订阅,然后单击工具栏的New Storage Account按钮便可以建立一个新的Storage Service。如图4-2所示,在弹出的对话框中填入如下信息:
图4-1 在Developer Portal中选择Storage Accounts
图4-2 创建新的Storage Service对话框
· Choose a subscription:选择一个Storage Service所在的Subscription。
· Enter a URL:为这个Storage Service指定一个访问URL。默认格式是[URL前缀].[存储服务类型].core.windows.net。由于Storage Service里面包含了Table、BLOB和Queue三个服务,如果当前指定的URL前缀是shaunxu,那么这个Storage Service对外的URL就是——
■ shaunxu.table.core.windows.net:Table Service的地址。
■ shaunxu.blob.core.windows.net:BLOB Service的地址。
■ shaunxu.queue.core.windows.net:Queue Service的地址。
· Choose a region or affinity group:选择这个Storage Service所在的数据中心。我们可以直接选择一个Region,或者从Affinity Group里面选择一个配置好的地址。如图4-2所示,由于此前在创建Hosted Service的时候建立了一个Affinity Group并且将其指向位于中国香港的东亚数据中心,因此在这里就可以直接选择这个Affinity Group。这样可以最大限度地避免由于选择了错误的数据中心从而造成跨数据中心数据传输的费用问题。
单击OK按钮之后,Windows Azure将会创建一个新的Storage Service。虽然对于每个Storage Service来说都可以使用最高100TB的空间,但这个时候新创建的Storage Service并不需要收费,因为并没有存储任何东西——Storage Service是按使用量收费的。
在右侧的属性栏中可以看到这个Storage Service的详细信息,包括访问BLOB、Table和Queue Service的URL,Storage Service Account的名字以及所在的数据中心等。其中需要特别关注属性栏最上面两个属性,即Primary Access Key和Secondary Access Key。这两个Key就是之前介绍过的两个512位加密访问密钥。单击右侧的View按钮将会弹出一个对话框,显示出这两个Key的内容,通过旁边的Copy to Clipboard按钮可以进行复制,如图4-3所示。
图4-3 获取Storage Account Key
上一章我们在介绍Visual Studio的Role Settings界面中提到过,有一种Setting的类型是Connection String,它包含了Account Name和Account Key两个主要部分。其中Account Name就是在属性栏中看到的Account Name的值,也就是Storage Service URL最前面的部分;而Account Key就是这里的Primary Key或者Secondary Key。
提示
单击Copy to Clipboard按钮之后浏览器会弹出一个警告框,提示Silverlight应用程序尝试访问系统剪贴板,这时候我们只需选择Yes同意访问就可以复制Key了。
Account Key对于安全性来说至关重要,开发人员一定要好好保护,因为任何人一旦获得了这个Key便拥有了对这个Storage Service的完全访问权限。那么如果不小心泄露了这个Key怎么办呢?还好Windows Azure平台提供了重新生成Key的功能。通过工具栏的Regenerate Access Keys按钮便可以重新生成指定Storage Service的Key,如图4-4所示。
图4-4 在Developer Portal中重新生成Storage Key
如图4-5所示,在弹出的Regenerate Access Keys对话框中,选择需要重新生成的Key(Primary Key或者Secondary Key),按下OK按钮,Windows Azure平台就会生成一个新的Account Key。
图4-5 重新生成Account Key对话框
同样,用户还可以通过工具栏的Delete Storage按钮删除一个Storage Service。
现在已经创建好了Storage Service,下一步就是如何使用它。我们知道Windows Azure Storage Service包含三个主要服务,即Table Service、BLOB Service和Queue Service。接下来我们将结合实例来看一下这三个服务的特点以及使用方法。