Windows Azure Storage – 公有云存储(Blob Storage)管理及传输最佳实践

在使用公有云存储(WAS:Windows Azure Storage)过程中,一个常见的问题是,开发者需要上传较多或者较大的本地数据(文件)到WAS中,传输效率尤为关键。 本篇将对WAS中常用的数据上传方式进行总结和比较,供Windows Azure开发者参考。   上传本地文件到WAS存储中,主要有以下几种方法: 使用现成的界面化工具。 使用流行的脚本工具。 使用Azure SDK中提供的API上传数据文件。 调用REST API上传文件(数据)。 拆分大数据文件成多个数据块,结合SDK API或者REST API实现多线程上传。   1. 使用现成的界面化工具 WAS使用者可以使用流行的第三方工具如Azure Storage Explorer,Cloud Storage Studio, CloudBerry, CloudExplorer等等或者Visual Studio来管理WAS重的Blob、Table、Queue,这些工具的共同特点是:界面化操作,极易上手,简便实用。 以下分别是使用Azure Storage Explorer和Visual Studio的示例:   2. 使用流行的脚本工具(azcopy) azcopy工具可以在此:latest version of AzCopy 下载。按照提示安装azcopy后,可执行文件azcopy.exe会存储在本地计算机,如C:\Program Files(x86)\Microsoft SDKs\Azure\AzCopy>AzCopy.exe 。 azcopy工具可以通过cmd命令行启动,也可以通过PowerShell等脚本语言启动,其用法为: AzCopy  <source>   <destination>  [filepattern]  [options] 使用azcopy传输文件,最优速度可达50MB/s.    常见的用法: 本地目标文件(夹)如下 上传文件到WAS C:\Program Files (x86)\Microsoft…


Windows Azure Storage – 公有云存储独占访问(lease)与数据一致性

上一篇介绍了如何使用签名授权方式(SAS)来实现客户端程序操作Blob Storage,SAS方式较适用于授权临时读操作,如果是多个客户端需要写入或者更新同一个目标blob文件时,SAS授权方式将会带来很大的数据一致性问题。因此,在数据一致性检查以及写操作同步控制中,开发者可以采用Azure Storage中提供的独占锁(Lease)来保证独占访问和数据一致性。 当众多客户端访问同一个WAS中的数据时,数据一致性需要慎重处理,最简单的一种处理方式是查看每一个Blob对应的ETag、LastModifiedUtc、ContentMD5等属性。在应用程序代码中,开发者可以通过Azure SDK提供的CloudBlockBlob.Properties.ETag、CloudBlockBlob. Properties. LastModified和blockBlob.Properties.ContentMD5属性来确认目标Blob文件的最后更新状态,以此来检查Blob文件的更改操作是否和预期的一致。 如图所示,通过Azure Storage Explorer也可以查看Blob文件对应的ETag、LastModifiedUtc、ContentMD5等属性。     另外,和文件系统一样,开发者可以针对每个Container或Blob设置独占式访问权限,通过对某个Container或者Blob进行加锁(Lease)从而控制访问同步问题(Concurrency),客户端在访问Container或者Blob前将目标容器或Blob文件加锁并得到相应的标识符(Lease ID),紧接着,客户端可以凭借Lease ID进行目标文件的读写操作,如更新Blob文件内容。代码实现如下:   var Account = CloudStorageAccount.DevelopmentStorageAccount; // 或者使用开发者自己的Global Azure Storage帐号或者China Azure Storage帐号,如上一篇中最后的部分。   const int timeout = 90; BlobClient = Account.CreateCloudBlobClient(); try {     CloudBlobContainer container = BlobClient.GetContainerReference(“testcontainer”);     CloudBlob blob = container.GetBlobReference(“test.txt”);       //acquire lease to access the blob…


Azure PaaS 快速实践 2 – 设计实现第一个集成应用(托管服务/预启动任务)

本节中,我们会设计并实现第一个基于Azure的云服务,该实现中会使用到Azure公有云中的存储服务(Azure Storage),关于 Azure Storage详情,请了解:http://www.windowsazure.cn/zh-cn/manage/services/storage/what-is-a-storage-account/ Windows Azure Storage(WAS)存储提供持久的、可持续的、易扩展的存储空间,并且提供基于Internet的多种访问方式。包含3种类型的存储服务: „ 二进制大对象(Binary Large Object(Blob)Storage)服务,主要用于存储文件或二进制数据,用于文件存储分发、流媒体库存储、数据备份等。存储的文件提供对外的HTTP(s)访问地址。 „ 队列(Queue Storage)服务,用于存储实时消息数据,确保应用程序之间可靠的、持久的消息传递。 „ 表(Table Storage)服务,用于可被查询的动态结构化数据存储。与SQL Server等传统数据库中数据表不同的是,同一个Table Storage表中的数据实体可以拥有不同的数据结构,如学生成绩信息和客户联系信息,而SQL Server中同一个数据表内不可能同时含有学生成绩信息和客户联系信息。 在本节实践中,你需要使用你的Azure Storage存储来实现数据交互和存储,因此在本实践之前,请参考以下步骤创建一个属于你的Azure Storage帐号,并查看到帐号名和密码。 如何创建你的Azure Storage存储:http://www.windowsazure.cn/zh-cn/manage/services/storage/how-to-create-a-storage-account/ 如何查看你的存储帐号及密码:http://www.windowsazure.cn/zh-cn/manage/services/storage/how-to-manage-a-storage-account/#regeneratestoragekeys 进一步单独了解WAS提供的编程接口和访问方式,请参考: 如何编程访问Blob存储:http://www.windowsazure.cn/zh-cn/develop/net/how-to-guides/blob-storage-v17/ 如何编程访问Table存储:http://www.windowsazure.cn/zh-cn/develop/net/how-to-guides/table-services/ 如何编程访问队列存储:http://www.windowsazure.cn/zh-cn/develop/net/how-to-guides/queue-service/   提示:开发者可以使用Global Windows Azure中的WAS帐号或者China Azure中的WAS帐号来完成本实践,具体WAS连接字符串稍有不同,如下: 如开发者使用China Azure时,WAS连接字符串类似以下样例: CloudStorageAccount storageAccount = CloudStorageAccount.Parse(“BlobEndpoint=https://portalvhds88zyhq6kndn2p.blob.core.chinacloudapi.cn/;AccountName=portalvhds88zyhq6kndn2p;AccountKey=tbLt4dmW0vJFFYobuBvpN2RB6On63XjwKDkoxD/v7Hg1vkeS3y3FJ+BK0MT6Q1MYXCWbKOJSM8+9mUrHUzrLDg==”); 如开发者使用Global Windows Azure,WAS连接字符串类似以下样例: CloudStorageAccount storageAccount = CloudStorageAccount.Parse.(“DefaultEndpointsProtocol=https;AccountName=mytest3939393;AccountKey=sZjfJiETVsXC****&&$$$m4yfjdajf*****%%U3fvxVHqGmJhIcaVaX3g==”);   除此之外,开发者若单独进行WAS实践,可以使用本地模拟器中的WAS帐号进行测试,连接方式为:CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;   步骤六:深入集成应用 这一步,我们将尝试一个较综合的集成应用,架构图如下:  …