【问题标题】:File not found with multiple azure instances找不到多个 Azure 实例的文件
【发布时间】:2013-09-05 15:03:57
【问题描述】:

我在托管网站的云服务上运行 2 个 Azure 实例。

我将文件上传到文件夹,并保存在其中一个实例中。当我尝试加载它时,如果 azure 选择了错误的实例,它不会找到该文件。我有什么办法可以解决这个问题?

我想将文件保存在 blob 存储中,但如果我能以这种方式保存它,它将节省我一些时间。

【问题讨论】:

    标签: azure multiple-instances file-not-found


    【解决方案1】:

    正如您在问题中提到的,您应该将其保存在 blob 存储中。有几个原因:

    1. Windows Azure 默认使用循环负载平衡策略。这意味着,如果您在一个实例中上传文件,并且当用户请求该文件时,如果该请求由第二个实例提供,则将找不到该文件(您遇到的错误)。
    2. 更重要的是,云服务是stateless by nature。这意味着,一旦 VM 出现故障,您在该 VM 上执行的任何操作(例如保存文件等)都会消失。

    另一方面,Blob 存储是持久存储,可通过简单的 http 协议访问。因此,当用户上传文件时,您将其保存在 blob 存储中。当用户请求它时,您只需从 blob 存储中提供 blob。

    更新 - 基于以下评论

    关于您的第一条评论,您仍然可以使用 blob 存储。您可以做的是创建一个 blob 容器来保存临时文件,一旦用户完成所有步骤,您就可以将它们移动到另一个容器(我们称之为永久容器)。要将 blob 从一个容器复制到另一个容器,您甚至不必将 blob 下载到 VM。 Windows Azure 支持服务器端异步复制,它将 blob 从一个容器复制到另一个服务器端。

    关于您的第二条评论,我认为您无法更改负载平衡策略。有一个叫做Application Request Routing (ARR) 的东西确实实现了粘性会话,但不幸的是我不熟悉它。你可能想调查一下。

    【讨论】:

    • 是的,但问题是我正在上传图像并且这些图像不是最终的,所以我将它们保存在一个临时文件夹中。当用户完成流程并且他不能再更改图像时,这些文件就没有用了。
    • 对了,如何更改负载均衡策略?
    • 根据您的 cmets 更新了我的回复。
    【解决方案2】:

    您使用的是虚拟机,对吧?如果切换到 Azure 网站是一种选择,那么您的应用程序文件/图像将位于一个共享网络驱动器上,始终可供所有实例使用。 http://azure.microsoft.com/en-us/documentation/videos/web-sites-internals-and-the-file-system/

    【讨论】:

    • 虽然可以,但这不是最佳做法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2019-10-07
    • 2014-08-13
    相关资源
    最近更新 更多