我不知道这是否是正确的方式来问这个问题,但这里基本上是我想要做的:
1.)将更改集推送到IIS中的站点。
2.)不要打断用户。
3.)能够毫不费力地回滚。
所以,我知道有几件事情必须发生:
1.)超出Proc会话 – 处理
2.)超出Proccaching – 处理
所以问题依然存在:
1.)我如何防止中断用户? 如果我只是上传文件到垃圾箱,应用程序回收,并需要10多秒才能回来上网
2.)我如何毫不费力地回滚?
我在想一个可能的解决scheme是在IIS中build立两个站点,一个是公共的,一个是私人的。 上传到私人并得到预热。 热身后,网站被交换。 回滚只需要交换到私人没有上传。
这在理论上听起来很合理,但我不确定这个机制。 有任何想法吗?
下面是我将如何处理这个问题 – 请记住,我以前没有这样做,这只是我在开发环境中testing一些概念。 你应该能够使用你的语言select一个脚本来设置一个非常健壮的框架。 基本上我们要设置一个贫民窟负载平衡环境,并使用它在新网站和旧网站之间切换。
要build立它,你将需要:
安装ARR开始。
在IIS中设置3个网站:
http://192.168.1.1/
。 这也是ARR网站。 只需设置一个空目录来指向它,然后将其放置在自己的应用程序池中。 根据这些说明将应用程序池设置为不超时。 http://192.168.1.2:8080
和http://192.168.1.3:8080
。 他们也应该在自己的应用程序池中,并指向文件系统上的不同目录(但是这两个目录通常具有相同的内容) 安装ARR之后,在IISpipe理器中会出现一个名为“Server Farms”的新类别 – 右键单击它并创build一个新的服务器场。
{SERVER_PORT}
添加一个新的条件不匹配8080 在这一点上,你有我们需要完成你的要求的基础知识。 如果你去http://192.168.1.1/
你会从网站1或网站2得到你的网站,但它将是完全无缝的,有其他网站。
现在,当您要部署新版本的应用程序时,您可以执行的操作是:
Web部署工具在您想要编写所有脚本时发挥作用。 这使得为应用程序创build一个包并从命令行部署它变得非常容易。 如果有问题,您也可以轻松地回滚该软件包。 ARR也可以使用Microsoft.Web.Administration
DLL 编写脚本 。
另一件事 – 如果你实际上是在Windows 2008 R2(这是IIS 7.5),看看应用程序预热模块 – 它应该使你的这个预热部分更容易。
MattB把它从水里打了出来。 +1我会回复更多的细节,但我不想看看他的观点。 我会补充他所说的。
我有一个类似的设置,他所描述的,它很好。 即使在一台服务器上,ARR也是如此。
不过,我会补充一些东西。
创build2个网站,如马特推荐。 叫他们像yoursite.com01和yoursite.com02。
创build2个URL重写规则。 一个用于www.yourdomain.com,另外一个用于staging.yourdomain.com。 对于生产,请使用{HTTP_HOST},值为(^ http://www.yourdomain.com $)|(yourIP)。 (或任何你喜欢的绑定)对于分段,请使用{HTTP_HOST},值为(^ staging.yourdomain.com $)。 调用yoursite.com和staging.yoursite.com的规则。
绑定规则= yoursite.com到网站= yoursite.com01和规则= staging.yoursite.com到网站= yoursite.com02。
在staging.yoursite.com上设置FTP。
生产stream量现在将规则= staging.yoursite.com和Site = yoursite.com01。 St to到相反。
你可以在任何时候部署到升级,testing,预先spinup,有其他人testing等。在白天做,没关系。 每次部署到相同的FTP帐户。 与构build服务器很好地协作。
然后,当您准备上线时,只需进行3个更改: – 将FTP绑定从yoursite.com02移动到yoursite.com01 – 更改URL重写规则yoursite.com指向yoursite.com02 – 更改URL重写规则分段。 yoursite.com指向yoursite.com01
现在,您有零宕机时间,即时切换,即时回滚function!
你唯一需要考虑的是你的进程会话状态。 确保您的状态服务器接受两个站点ID,以便在交换过程中不会丢失会话状态。
另请注意,这只是networking而不是数据库。
对于脚本,使用configuration编辑器。 进行所需的更改,然后单击“生成脚本”。 它会给你C#,appcmd或AHAdmin的代码。
我已经有了一个网页前端几个月的地方交换实例,我永远不会回头看。 与传统部署相比,它使部署更加清爽。