技术开发 频道

微软云实践:VS 2010构建云服务

  云中的数据

  现在我们已经拥有一个非常简单的云服务,按下F5开始调试,但现在你在浏览器中看到的是一个空白页面,为了处理应用程序的其它通信量,需要增加每个角色的实例数量,这样请求就可以跨角色实现负载均衡了,当然这也会影响到你如何设计和实现你的应用程序。

  特别是对访问和存储数据有要求,许多人都知道数据存储和检索方法是不可伸缩的,例如,在云中,不应该在本地文件系统上存储数据,因为它是不可伸缩的。

  为了实现云的伸缩特性,你需要使用新的云存储服务,Windows Azure Storage提供可伸缩的blob,队列和表存储服务,Microsoft SQL Azure提供基于云的关系数据库服务,Microsoft SQL Azure是构建在Microsoft SQL Server之上的,Blob用于存储命名文件和元数据,队列服务提供可靠的消息存储和传递,表服务提供结构化存储,这里的表指一组实体,每个实体包含一组属性。

  为了帮助这些服务的使用,Visual Studio提供了一个本地仿真环境,叫做开发存储(Development Storage),它模拟这些存储服务在云中的运行方式,在你的应用程序中,你可以使用云存储服务中相同的API应用到开发存储服务中。

  要讨论Windows Azure提供的各种存储服务的正确用法已经超出了本文的范围,在tiny-url.com/ yfkxb86有大量的实例可供参考,此外,你可以通过对象浏览器(Object Browser)查看新的程序集,IntelliSense将会显示所有的类型和API,包括它们的XML文档,按F1将会把你导向该类型的在线帮助页面。

  调式

  为了演示在本地运行和调试Windows Azure的方法,我们使用一个MSDN代码库中的例子,首先去MSDN示例代码页面下载例子代码,然后解压到Documents文件夹中。

  以管理员权限运行Visual Studio 2010,打开刚刚解压的thumbnails(缩略图)解决方案,这个解决方案演示了Web角色和Worker角色,以及blob和表服务的使用。

  Web角色为用户上传照片提供了一个前端应用程序,然后添加一个工作项到队列中,Worker角色匹配队列中的工作项,然后在指定的目录中创建照片的缩略图。

  当你打开这个解决方案后,你会发现它包含了三个项目,Thumbnails是关联了两个角色(Thumbnails_Web-Role和Thumbnails_WorkerRole)的云服务,Thumbnails_WebRole是Web角色项目,它实现上传照片和向队列添加工作项,Thumbnails_WorkerRole是Worker角色项目,它匹配队列中的工作项并在指定目录创建缩略图。

  这个例子展示了StorageClient库与队列和blob服务交互的用法。

  在Default.aspx.cs文件中submitButton_Click方法处增加一个断点,当用户在页面上选择一张照片点击提交后,就会命中该断点:

protected void submitButton_Click(

  
object sender, EventArgs e) {

  
if (upload.HasFile) {

  var name
= string.Format("{0:10}", DateTime.Now.Ticks,

  Guid.NewGuid());

  GetPhotoGalleryContainer().GetBlockBlob(name).UploadFromStream(upload.FileContent);

    然后在WorkerRole.cs文件的Run方法处增加一个断点,之后的代码从队列检查消息是否存在,当Web角色向队列推送一条消息,刚好又被Worker角色检索到时,就会命中该断点。

while (true) {

  
try {

  CloudQueueMessage msg
= queue.GetMessage();

  
if (msg != null) {

  
string path = msg.AsString
0
相关文章