对于IIS,更新静态文件的最佳方法是什么,同时保持实时网站的可用性?

对于IIS,更新静态文件的最佳方法是什么,同时保持实时网站的可用性?,iis,Iis,我对此进行了调查,发现了大量相关信息,但没有任何信息能够回答我的问题 有点背景。IIS 10静态共享一小部分文件。这些文件通常需要每周更新一次,但不超过一小时(除非有人手动运行更新实用程序进行测试)。这些文件的大小应该是几K字节,不超过10 KB。更新过程可以在IIS服务器上运行,并将在PowerShell或C#中写入 我更新IIS主动作为静态文件使用的文件的计划是: 将文件复制到临时本地位置(在同一卷上) 尝试将文件移动到IIS静态站点位置 如果文件正在(由IIS)使用,移动可能会失败。为

我对此进行了调查,发现了大量相关信息,但没有任何信息能够回答我的问题

有点背景。IIS 10静态共享一小部分文件。这些文件通常需要每周更新一次,但不超过一小时(除非有人手动运行更新实用程序进行测试)。这些文件的大小应该是几K字节,不超过10 KB。更新过程可以在IIS服务器上运行,并将在PowerShell或C#中写入

我更新IIS主动作为静态文件使用的文件的计划是:

  • 将文件复制到临时本地位置(在同一卷上)
  • 尝试将文件移动到IIS静态站点位置
    • 如果文件正在(由IIS)使用,移动可能会失败。为此实现一个简单的重试策略
如果发布这些文件时出现延迟,则不会导致问题。我真正想要避免的是IIS试图在错误的时间访问其中一个文件,这是在我的文件替换过程中出现的竞争条件。我无法控制HTTP客户端,该客户端可能是一个无法容忍IIS可能返回的错误类型的程序,如HTTP状态404“未找到”

我有几个随机的想法:

  • HTTP从IIS获取文件,然后我将其替换为将文件放入IIS缓存的目的,希望这将改善这种情况
  • 忽略这个潜在的问题,这是最好的希望
我不能是唯一一个面对这种情况的开发者。解决这个问题的好方法是什么?(或者这根本不是问题,我只是想得太多了?)


提前感谢您的帮助。

通常的做法是1)使用负载平衡,这样您就可以拥有多个web服务器。2) 从群集中删除服务器,并更新其中的文件。3) 把服务器放回去。4) 剩下的就这么做吧。@LexLi,谢谢。这可能是“正确”的方法。我想我们可以使用负载平衡器,但我无法访问任何LB API。但是,如果我可以安全地停止静态站点(或IIS服务),完成挂起的请求,那么LB可能会恢复错误并在其他服务器上重试。我会向网络基础设施团队寻求帮助,但这要么是一个艰难的拒绝,要么是6个月后。我应该能够找到它们如何监控后端服务器的运行状况,并使用它来让LB删除服务器。另一种不太常见的方法是将所有文件都放在一个目录层次结构中,然后在部署时创建一个全新的层次结构,然后移动根目录。这在linux上运行得很好,在windows上可能运行得不太好。@arnt,在某种程度上验证了我的计划,但我正在逐文件移动(少于10个文件)。如果做得好,我认为这大部分可以在Windows上工作,但如果没有原子文件操作,则有一点可能出现竞争情况,因此不是100%。这些小文件有助于最小化(或消除)故障窗口。谢谢你的评论。