0

我刚刚在 Windows Azure 中设置了一个额外的小型 VM 实例来为我们公司运行帮助控制台。可以通过简单的 .NET 界面更新和发布帮助文件。显然,平面 html 文件正在部署到 VM 上的本地驱动器,并通过 IIS 公开。我只是想知道这有多稳定?如果虚拟机发生硬件故障,大概没有自动故障转移,我们对帮助系统所做的任何编辑都会丢失?

谁能推荐一种我可以将源文件从 VM 传送到 blob 存储的方法?我可以编写一个应用程序来执行此操作,我只是想知道是否有现成的解决方案?

附加信息:

  • VM 实例正在运行 Server 2008 R2 SP1(作为虚拟机而不是 Web 角色)
  • 需要每 24 小时创建一次备份
  • 需要从 blob 容器中自动清除过期备份(3 天以上)
  • 我们使用的帮助系统叫做 HelpConsole 2012
  • 每周以 myabe 2-3 的速度添加新页面
4

1 回答 1

2

答案取决于您是在 Windows Azure 虚拟机还是在 Windows Azure Web 角色上运行它。

如果您在 Windows Azure 虚拟机上运行此程序,则 VHD 存储在 BLOB 存储中,如果站点运行的是 C: 驱动器而不是数据磁盘,则系统为两者都打开了一些主机缓存读取和写入。在这种情况下,有可能(取决于您用来写出文件的方法)在发生故障之前数据不会被推回 BLOB 存储中的 VHD。您可以确保您的写入方法执行写入操作,或者关闭写入缓存。更好的是,为您的网站文件附加一个数据磁盘。默认情况下,数据磁盘已关闭读取和写入缓存(您可以打开读取缓存)。由于 VHD 是持久的,因此您不必担心编辑会丢失。您可以编写文件快照并将它们单独移动到 BLOB 存储,或者甚至将它们推送到其他地方。使用此选项要考虑的另一件事是,您必须关心 VM 实例并保持它们的补丁和最新状态。

如果您正在运行 Web 角色,那么是的,如果发生故障并且 VM 进行自我修复,它确实会使用旧文件重新部署。在这种情况下,我建议更改 Web 角色中的代码,以便在将更新写入本地文件时,还会将本地文件的副本放入 BLOB 存储中。此外,在 Web 角色 OnStart 中,您可以访问 BLOB 存储并在本地下载所有新内容。不过要非常小心这种方法,因为它只适用于一个实例,而不是多个实例。如果您计划运行服务器的多个实例(如果您想要 SLA 以保证正常运行,则必须这样做),那么您的代码将需要更健壮一些,并写入 BLOB 存储,然后提醒角色的所有实例有一个新文件要在本地下拉。

Web 角色的另一个选项是还为内容编写一个处理程序,以便请求进入并直接映射到文件 BLOB 存储。然后可以进行更新以将编辑定向到 BLOB 存储中的文件。这会将平面文件的服务从计算节点卸载到 BLOB 存储,您甚至可以实现一些缓存并通过处理程序将内容流回,而不是让它们直接访问 BLOB 存储。

现在,另一种选择是为此使用 Windows Azure 网站。Windows Azure 网站中网站文件的底层存储是一个共享位置,因此更新其中的文件将立即反映在所有实例中。此外,该站点的内容存储在 BLOB 存储中,可以通过 FTP、源代码控制或直接从代码进行更新。这里有很多选择。您最终可能会转向保留实例,以帮助避免网站拥有的某些配额。网站可能不是您当前的选择,具体取决于其他要求(例如,您需要对环境进行多少控制,因为您对网站没有太多控制权)。

于 2013-02-24T14:50:16.890 回答