在实例之间是否在approot或sitesroot中同步手动文件系统?

时间:2012-05-25 23:57:19

标签: azure

我有一个Web应用程序,可以接收用户上传的文件。这些文件存储在Web服务器的目录中。其他用户可以下载这些文件。我正在自定义此应用程序以在Windows Azure上进行迁移。 在Windows Azure上,这些文件存储在sitesroot和approot中。 Windows Azure是自动同步这些更改还是我应该手动同步它们?也许,用这种方法存储文件是不合适的?

2 个答案:

答案 0 :(得分:1)

实际上,Azure确实在实例之间同步目录。您希望将文件存储在集中存储中。 Azure Blob存储是目前最好的选择。访问存储的API相对简单

答案 1 :(得分:1)

@Igorek的精彩回答。只想添加一点。每个角色实例都完全独立运行。而且,从本质上讲,角色实例是Windows 2008 Server。如果您有5个Web角色实例,则运行5个VM,每个VM都有自己的本地存储。

而且,虽然您可以使用本地存储,但它是每个VM实例的单独存储,它是非持久的(这意味着如果磁盘崩溃,您的数据就会消失)。

正如@Igorek建议的那样,Blob存储独立于您的Role实例。您可以从任何位置(从任何角色实例,甚至从本地应用程序)访问它。 blob存储按容器组织,每个blob最高可达200​​GB。但最重要的是:它是持久:在数据中心内进行三重复制,并在地理位置复制到相邻的数据中心。

只要您的存储帐户与您的应用程序位于同一数据中心,访问速度极快(每个blob大约60MB /秒)。此外,您可以将单个blob(或容器)设置为 public private 。公共blob非常适合CSS,图像或您可能希望在网页上呈现的任何其他内容。它们可以通过URI访问,例如:

https://myapp.blob.core.windows.net/images/logo.png

使用这种类型的URI,您可以将其嵌入到网页中,浏览器现在可以直接从存储中检索这些图像,完全绕过您的IIS Web服务器,从而加载您的角色实例。从服务器上获得足够的负载,最终可以减少实例数量。

现在,使用私有 blob,外界无法看到这些;您需要使用存储帐户密钥才能访问这些密钥。对于您的Web服务器,这一切都是透明的。您可以快速将数据加载到Blob中,将Blob下载到本地存储,为最终用户提供内容......就像您从本地磁盘提供内容一样。如果您需要对文件执行操作,必须将其放在磁盘上,您可以先将其下载到本地存储,然后从本地存储执行操作。

私有blob还有一件事:您可以通过在查询字符串上使用共享访问签名对URL进行编码来授予对这些内容的临时访问权限。这是使用您的存储帐户密钥签署的,并授予访问权限长达一个小时。例如,如果您的最终用户拥有其他人无法访问的特定帐户的pdf,则您可以选择提供此内容。之一:

  • 将blob存储中的私有blob下载到本地存储,然后通过IIS(或任何备用Web服务器)将其发送回浏览器,或
  • 返回私有blob的链接,使用共享访问签名进行编码(有一些短TTL过期,可能是5分钟),并让最终用户从他们的浏览器访问blob(例如,通过链接点击)然后,它会直接从blob存储中下载blob,绕过您的角色实例。