目前在构建/部署我们的应用程序(58个项目,大型asp.net MVC 3前端)需要〜15-20秒的负载,因为它通过整个“回收应用程序池”(发布配置)。
我们有一个网络农场,如果改变人们的答案,但问题是真的是:
什么是人们在大规模应用程序中维护窗口不可行(我们是一个24/7活跃的网站),以最小化应用程序池初始“第一次命中”部署后回收?
我们已经使用了一些工具来分析启动时间,并没有真的似乎没有任何办法把它下来,所以我正在寻找的是什么技术,人们使用,以减少大型应用程序部署影响用户。
解决方法
默认情况下 – 如果您立即在ASP.NET应用程序中更改15个文件(即使通过FTP),则应用程序池会自动回收。您可以更改文件的数量,但一旦web.config和bin文件更改,那么它需要回收。所以在我看来,像你的环境的理想解决方案如下:
4个Web服务器(这是一个任意数字)
每个服务器都有一个负载平衡器所关注的status.aspx – 使用TeamCity使这些服务器中的两个“离线”(离开负载平衡器),并等待20秒以使流量过滤。分布式缓存有助于保持用户体验问题
使用TeamCity来部署到这两个服务器 – 运行自动化测试等,一旦你快乐把这些回到农场,并采取其他2离线和部署到那些
这可以是脚本/自动的。唯一的问题是任何不向后兼容的模式更改可能不允许与旧版本的站点并行运行新版本站点20秒以使负载平衡器反弹
这是很好的老式金丝雀发布 – 这里有一些模式http://continuousdelivery.com/patterns/,以帮助考虑。 Id还建议一个连续交付书的副本 – 它像一个连续的交付圣经,并让我出了几种情况:)