1

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

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

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

我很难想象角色之间的关系,并担心此分区之间的通信造成的开销,因此欢迎在此提供任何输入。

4

2 回答 2

2

添加到 Stuart 的出色答案:Blob 可以存储任何内容,大小高达 200GB。如果您需要/想要持久保存整个目录结构,您只需几行代码即可挂载 VHD。它是一个 NTFS 卷,您的应用程序可以与之交互,就像任何其他驱动器一样。

在您的情况下,vhd 不太适合,因为您的网络应用程序必须安装 vhd 并成为它的唯一作者。如果您有多个 Web 角色实例(如果您想要 SLA 并想要扩展,您会这样做),您只能有一个编写者。在这种情况下,单个 blob 更适合。

正如 Stuart 所说,这是一种非常正常和普遍的模式。同样,只需几行代码,您就可以调用 storage sdk 将文件从 blob 存储复制到实例的本地磁盘。然后,您可以使用常规文件 IO 操作来处理文件。当您的报告完成后,另外几行代码可让您将报告复制到一个新的 blob 中(最有可能在 Web 角色知道可以查看的知名容器中)。

您可以更进一步,将行插入到按客户分区的 Azure 表中,行键标识单个上传的文件,第三个字段表示已完成报告的 URI。这使得 Web 应用程序可以轻松地显示客户已完成的报告。

于 2011-03-20T20:00:28.667 回答
1

Blob 存储是存储许多角色和角色实例随后可以访问的文件的最简单位置 - 它们都不需要特殊访问。

建议的正常模式似乎是:

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

这是“建议的正常模式”,您可以在第一个 Azure PDC 中的照片上传/缩略图生成应用程序之类的应用中看到它的实现——它也在本培训课程中使用——一直到第二页。

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

于 2011-03-20T19:45:17.473 回答