我刚刚在Windows中设置了一个额外的小型VM实例,以运行我们公司的帮助控制台。帮助文件可以通过简单的.NET接口更新和发布。显然,平面html文件被部署到VM上的本地驱动器,并通过IIS公开。我只是想知道这有多稳定?如果VM遇到硬件故障,那么大概没有自动故障转移,我们对帮助系统所做的任何修改都会丢失吗?
有人能推荐我把源文件从VM传送到blob存储中的方法吗?我可以写一个应用程序来做这个,我只是想知道是否有一个现成的解决方案?
附加信息:
发布于 2013-02-24 14:50:16
答案取决于您是如何在Windows虚拟机中或在角色中运行此操作的。
如果您在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网站。Windows网站中网站文件的底层存储是一个共享位置,因此更新其中的文件将立即反映在所有实例中。此外,站点的内容存储在BLOB存储中,可以通过FTP、源代码管理或直接从代码中更新。这里有很多选择。最后,您可能会转移到保留实例,以帮助避免Web站点所具有的某些配额。Web站点对于您来说可能不是一个选项,这取决于其他需求(比如您需要多少对环境的控制,因为您对Web站点没有太多的控制)。
https://stackoverflow.com/questions/15052455
复制相似问题