1

我正在考虑将我的web应用迁移到Windows Azure以实现可伸缩性目的,但我想知道如何最好地对我的应用进行分区。在文件绑定应用中与Azure的体系结构设计和角色通信

我期望我的场景是典型的,如下所示:我的应用程序允许用户上传原始数据,这将被处理并生成报告。用户然后可以查看他们的原始数据并查看他们的报告。

到目前为止,我正在考虑一个web角色和一个工作者角色。但是,我知道一个VHD可以挂载到一个具有读/写访问权限的实例上,所以我的web角色和worker角色都需要访问一个通用的文件存储。所以也许我需要一个Web角色和两个独立的工作角色,一个工作角色用于处理,另一个角色用于读写文件存储。这是一个好方法吗?

我很难说明角色之间的关系和由此分区之间的通信所引起的开销之间的关系,因此欢迎任何输入。

回答

1

Blob存储是存储大量角色和角色实例可以访问的文件的最容易的地方 - 它们都不需要特殊访问。

建议正常模式似乎是:

  • 允许使用的Web角色
  • 这些Web角色实例返回HTTP调用而不做处理情况上传的原始文件 - 他们储存的原料blob存储中的文件,并将“执行此工作消息”添加到队列中。
  • 工作人员角色实例从队列中读取消息,读取原始数据块,完成工作,存储报告结果,然后从队列中删除消息
  • 所有Web角色都可以访问报告用户需要它

这是“正常模式建议”,你可以看到它在东西就像从第一天青PDC照片上传/缩略图生成应用程序中实现 - 它在这个training course也用 - 贯彻到第二页。

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

2

添加到Stuart的优秀答案:Blob可以存储任何内容,大小可高达200GB。如果您需要/想要坚持一个持久的整个目录结构,则只需几行代码即可安装VHD。这是您的应用可以与其他任何驱动器交互的NTFS卷。

在你的情况下,一个VHD不适合,因为你的Web应用程序将不得不挂载一个VHD并成为它的唯一编写者。如果您有多个Web角色实例(如果您想要SLA并希望扩展,那么您可能只有一名作者)。在这种情况下,单个斑点更适合更好。

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

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

+0

虽然我们建立在彼此的评论上,但我也想说,虽然Blob存储非常出色,队列存储性能很好,但是值得仔细考虑是否要使用Table存储或是否要使用SQL Server 。到目前为止,在我创建的所有内容中,SQL Server已经被证明具有更多的可用性和实用性 - 如果您需要做报表等工作,那么表存储仍然很难使用。这完全是“在我看来” - 我想我仍然部分停留在关系型思维模式中! – Stuart 2011-03-20 20:08:52

+0

在这种情况下,使用表与SQL Azure是个人选择,但查找起来似乎非常简单(当您只需要单个字段进行索引时,它非常适合Table Storage)。 Table Storage运行价格为0.15美元/ GB,其中SQL Azure的运行价格为10.00美元/ GB。使用表格存储功能,您可以测量您的存储空间使用情况。使用SQL Azure,即使存储1KB,最低成本也是10美元。但是,如果您需要在大型表中使用多个索引,则SQL Azure可以提高性能。 – 2011-03-20 20:47:36

+0

是的 - 对不起 - 可能比帮助困惑更多...因为我试着说“这是值得仔细考虑的” - 正如你所说的那样,也包括“个人选择”:) – Stuart 2011-03-20 21:05:49