《Windows Azure Platform 系列文章目录》
如果读者使用的是国内由世纪互联运维的Azure China服务,请参考笔者的博文Azure China (4) 管理Azure China Storage Account
update 2014-3-31
Windows Azure Storage带宽10GB,WindowsAzure Blob带宽60MB
Windows Azure PaaS本质上来说就是将你本地的应用程序打包,然后上传到Windows Azure VM进行托管运行。
临时的、非持久化的。比如,我通过Windows Azure
VM在D盘新建了一个txt文件,这个文件不会一直被保存。因为某些特殊情况,VM节点会宕机(系统升级、物理损坏)等,后台Fabric Controller会把该VM下的Web Role和Worker Role的内容迁移到同一数据中心的另外一台机器上,但是不会自动迁移D盘新建的txt文件!如果需要保存持久化的内容,一定要使用Windows Azure Storage,切记切记!
Windows Azure Storage是支持三重冗余的,也就是说,保存在Azure Storage的内容,会在同一个数据中心保留有3个副本。这样的好处显而易见:当数据中心发生一般性故障的时候,比如磁盘损坏,机架服务器损坏等,用户保存在Azure Storage的数据不会丢失。每次对于Storage的写操作,都会对三个副本进行同步写操作,等到在副本操作完毕之后,才会返回执行成功给客户端。
Windows Azure提供了三种不同类型的存储服务(这里的存储是非关系型数据,比如图片、文档等文件),用来提供给Windows Azure上运行的应用程序存储数据使用。依据不同的存储格式会有不同的限制,因为这些存储服务都是以分散式巨量存储(Distributed Mass Storage)为核心概念所设计出来的,为了要达成快速在分散式存储空间中存储与管理数据(还包含高可用度的赘余存储管理),微软有在数据的存储上做一些限制。
微软还提供了REST API来方便用户操作Storage Service。
1.BLOB
BLOB(大型二进制对象)数据是用来存储文件、图片、文档等二进制格式的文件。
BLOB分为2种:
-Block BLOB(区块型BLOB存储),这类的存储以4M为一个区块单位,单一文件最大可以存储200GB,且区块不会连续存储,可能会在不同的存储服务器分块存放。为了适应文件的上传和下载而专门进行了优化。当应用程序要求时,会一招文件的KEY以及区块存储区提供数据。
-Page BLOB,是优化的随机访问。它会在存储区中划分一个连续的区域供应用程序存放数据,它本身可以视为一个大型的VHD(虚拟机软盘)。如果我们拿我们的应用程序迁移到Windows Azure平台上,对于文件的读写操作可能需要进行一些修改,但是通过Page Blob就可以方便我们迁移:微软特别在Page BLOB上提供了一组将Page BLOB虚拟成软盘的功能,称为Windows Azure Drive(研发代号为XDrive),它能够支持NTFS API,也就是说应用程序可以利用现有的文件管理API(包含System.IO的类型)来访问Windows Azure Drive中的文件夹与文件数据,并且这些数据会保存在Windows Azure数据中心内。
Block Blob和Page Blob的区别,请参考Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob
BLOB服务由BLOB本身以及其收纳容器(Container)构成,容器可视为一般本机上的文件夹。
你可以通过REST API来访问,如下:
http://accountName.blob.core.windows.net/<containerName>/<blobName>
accountName表示哪个Azure帐号(Account)下的资源。
blob.core.windows.net表示我访问的是blob的资源。
containerName表示容器的名字,可以认为是访问某一文件夹下的资源
blobName表示我要访问的资源的名字。
ContainerName容器,从概念上来将类似于文件夹
Container类型分为三种: Public Container,Public Blob和Private
Private(私有)表示,这个Container(文件夹)里面的内容,都不允许匿名访问
比如 http:/mystorage.blob.core.chinacloudapi.cn/privatephotos/1.jpg
上面的container name是privatephotos,类型是私有(private)
所以不允许匿名文档,这也是为什么你之前上传的资源无法通过IE匿名访问
对于某些私密的信息,比如内部的图片、文件,可以设置private类型
公共blob,表示允许访问这个某一个资源,但是无法递归访问这个container (文件夹)
对于可以匿名访问资源,比如公共图片、照片,可以设置公共blob
公共容器(container),表示可以递归访问这个container(文件夹)下的所有资源
注意:ContainerName的命名规则
1.必须以英文或数字开头,且名称内只能有英文、数字及dash(-)
2.不能以dash(-)开头或结尾,dash(-)不能连续出现
3.所有英文的字符都必须是小写
4.长度为3-63之间
Blob的命名规则:
1.除了URL的保留字符以外,其他的字符组合都可以使用
2.长度为1-1024个字符
3.尽量避免以dot(.)或者是forward slash(/)结尾。否则会造成Blob Service误判。
2.Table
这里的Azure Table是非关系型数据库的表,不能与SQL Server中的Table混淆。
Azure Table中表最大容量是200T,每个Azure Table 都必须有Partition Key和Row Key。
Partition Key的值可以设置记录的物理位置。在Azure Table中的2条数据,如果Partition Key值相同,则表示这2条数据存储的物理位置是相同的;如果Partition Kay不同,则表示这2条数据可能存储在同一台物理介质上,或者不同的2台物理介质之上。
Row Key表示一行数据的唯一值。使用PartitionKey和RowKey可以定位一个唯一的实体。
Azure Table也提供REST API来访问,如下:
http://accountName.table.core.windows.net/<TableName>
3.Queue
Queue(队列)是一种先到先服务(First-Come, First-Serve),或称为FIFO(先入先出)的存储服务,它可以允许应用程序将消息存储到队列中排队,然后由负责处理的应用程序(通常是Worker)由队列提取消息并处理以后,将消息由队列中移除。消息可以是字符串或是最长8KB的二进制数据,队列经常会作为跨运行个体通信以及工作切割通知的消息传递之用。
Queue消息队列的每个消息(Message)最大支持64K,Queue最大容量200TB
http://<account>.queue.core.windows.net/<QueueName>