Azure在文件绑定应用程序中的体系结构设计和角色通信

时间:2011-03-20 19:33:07

标签: azure azure-storage azure-storage-blobs azure-worker-roles

我正在考虑将我的Web应用程序移动到Windows Azure以实现可伸缩性,但我想知道如何最好地对我的应用程序进行分区。

我希望我的方案是典型的,如下所示:我的应用程序允许用户上传原始数据,处理这些数据并生成报告。然后,用户可以查看其原始数据并查看其报告。

到目前为止,我正在考虑一个网络角色和一个工人角色。但是,据我所知,VHD可以安装到具有读/写访问权限的单个实例,因此我的Web角色和辅助角色都需要访问公共文件存储。因此,我可能需要一个Web角色和两个单独的工作者角色,一个用于处理的辅助角色,另一个用于读取和写入文件存储。这是一个好方法吗?

我很难描绘角色之间的管道,并且担心这个分区之间的通信所引起的开销,所以欢迎任何输入。

2 个答案:

答案 0 :(得分:2)

添加Stuart的优秀答案:Blob可以存储任何尺寸高达200GB的东西。如果您需要/想要保留一个持久的整个目录结构,您可以使用几行代码安装VHD。它是您的应用可以与之交互的NTFS卷,就像任何其他驱动器一样。

在您的情况下,vhd不合适,因为您的Web应用程序必须安装vhd并且是它的唯一编写者。如果您有多个Web角色实例(如果您想要SLA并希望扩展,则可以使用),您只能拥有一个编写器。在这种情况下,单个blob更适合。

正如斯图尔特所说,这是一种非常正常和常见的模式。再次,只需几行代码,您就可以调用存储sdk将文件从blob存储复制到实例的本地磁盘。然后,您可以使用常规文件IO操作处理该文件。报告完成后,另外几行代码可以将报告复制到新的blob中(最有可能是Web角色知道要查看的知名容器中)。

您可以更进一步,将行插入由客户分区的Azure表中,行键标识单个上载的文件,第3个字段表示已完成报告的URI。这使得Web应用程序显示客户已完成的报告变得微不足道。

答案 1 :(得分:1)

Blob存储是存储文件的最简单的地方,许多角色和角色实例可以访问这些文件,而这些文件都不需要特殊访问。

建议的正常模式似乎是:

  • 允许使用Web角色实例上载原始文件
  • 这些Web角色实例返回HTTP调用而不进行处理 - 它们将原始文件存储在blob存储中,并将“执行此工作消息”添加到队列中。
  • 工作者角色实例从队列中获取消息,读取原始blob,执行工作,存储报告结果,然后从队列中删除消息
  • 然后,当用户要求时,所有Web角色都可以访问该报告

这是“建议的正常模式”,您可以看到它在第一个Azure PDC中的照片上传/缩略图生成应用程序中实现 - 它也在此training course中使用 - 跟随到第二页

当然,在实践中,您可能需要根据您正在处理的数据的大小和类型来构建此模式。