我不确定这是否是提出这个问题的正确方法,但这基本上是我想做的:
1.) 将变更集推送到 IIS 中的站点。
2.) 不要打断用户。
3.) 能够毫不费力地回滚。
所以,我知道有几件事必须发生:
1.) 超出 Proc 会话 - 已处理
2.) 超出 Proc 缓存 - 已处理
所以剩下的问题是:
1.)我如何避免打扰用户?如果我只是将文件上传到 bin,应用程序会回收并需要 10 多秒才能恢复在线
2.) 我如何轻松回滚?
我在想一个可能的解决方案是在 IIS 中设置两个站点,一个是公共的,一个是私有的。上传到私人和热身。预热后,交换站点。回滚只需要在不上传的情况下切换到私有。
这在理论上似乎是合理的,但我不确定机制。有任何想法吗?
以下是我将如何解决这个问题 - 请记住,我以前没有这样做过,这只是我在开发环境中测试的一些概念。您应该能够使用这个和您选择的语言中的一些脚本来设置一个非常强大的框架。基本上,我们将设置一个 ghetto 负载平衡环境,并使用它在新站点和旧站点之间切换。
要进行设置,您将需要:
首先安装 ARR。
在 IIS 中设置 3 个网站:
http://192.168.1.1/
。这也是 ARR 网站。只需为此设置一个空目录以指向它,然后将其放入自己的应用程序池中。根据这些说明将应用程序池设置为不超时。http://192.168.1.2:8080
和http://192.168.1.3:8080
. 它们也应该在自己的应用程序池中,并指向文件系统上的不同目录(但两个目录通常具有相同的内容)安装 ARR 后,IIS 管理器中将有一个名为“服务器场”的新类别 - 右键单击该类别并创建一个新场。
{SERVER_PORT}
为不匹配 8080添加新条件至此,您已经了解了我们完成您的请求所需的基础知识。如果你去,
http://192.168.1.1/
你会从网站 1 或网站 2 获得你的网站,但如果有其他网站,那将是完全无缝的。现在,当您想要部署应用程序的新版本时,您可以执行以下操作:
当您谈论想要编写所有这些脚本时,Web 部署工具就会发挥作用。它使为您的应用程序创建一个包并从命令行部署它变得非常容易。如果出现问题,您还可以轻松回滚该包。ARR 也可以使用
Microsoft.Web.Administration
dll 编写脚本。另一件事-如果您实际上使用的是Windows 2008 R2(即IIS 7.5),请查看Application Warmup模块-它也应该使您的预热部分更容易。
MattB 将其从水中击中。+1我会回复更多细节,但我不想接受他的观点。我会补充他所说的。
我有与他描述的类似的设置,并且效果很好。ARR 是要走的路,即使在单个服务器上也是如此。
但是,我要补充几件事。
按照 Matt 的建议创建 2 个站点。称它们为 yoursite.com01 和 yoursite.com02。
创建 2 个 URL 重写规则。一个用于 www.yourdomain.com,另一个用于 staging.yourdomain.com。对于生产,请使用 {HTTP_HOST},其值为 (^www.yourdomain.com$)|(yourIP)。(或您喜欢的任何绑定)对于暂存,使用 {HTTP_HOST} 和 (^staging.yourdomain.com$) 的值。调用规则 yoursite.com 和 staging.yoursite.com。
将 Rule=yoursite.com 绑定到 site=yoursite.com01,将 rule=staging.yoursite.com 绑定到 site=yoursite.com02。
在 staging.yoursite.com 上设置 FTP。
生产流量现在流向 Rule=staging.yoursite.com 和 Site=yoursite.com01。踉踉跄跄到对面。
您可以随时部署到登台、测试、预启动、让其他人测试等。白天做,没关系。每次部署到同一个 FTP 帐户。非常适合构建服务器。
然后,当您准备好上线时,只需进行 3 项更改: - 将 FTP 绑定从 yoursite.com02 移动到 yoursite.com01 - 将 URL 重写规则 yoursite.com 更改为指向 yoursite.com02 - 更改 URL 重写规则暂存。 yoursite.com 指向 yoursite.com01
现在您拥有零停机时间、即时切换和即时回滚功能!
您唯一需要考虑的是您的进程外会话状态。确保您的状态服务器接受这两个站点 ID,这样您就不会在交换期间丢失会话状态。
另请注意,这只是网络而不是数据库。
对于脚本,使用配置编辑器。进行所需的更改,然后单击“生成脚本”。它将为您提供 C#、appcmd 或 AHAdmin 代码。
我已经使用网页前端来交换实例几个月了,而且我从不回头。与传统部署相比,它使部署如此令人耳目一新。