首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IIS Web-Garden强制进程初始化是否可行?

IIS Web-Garden强制进程初始化是否可行?
EN

Stack Overflow用户
提问于 2009-06-15 22:08:58
回答 3查看 2.2K关注 0票数 3

我们有一个IIS应用程序正在IIS Garden中运行--它被配置为分配最多四个进程。在我们的Web应用程序中,第一个访问站点的用户会加载所有缓存的项。由于我们在IIS Web-Garden中运行,因此最终需要多达四个首次用户为四个Web-Garden进程中的每一个进程构建缓存。这个缓存构建需要30-40秒,我们已经尝试过让它更快,但这不太可能有更多的改进。

这是不可接受的,我们的任务是让网站对每个人都是快速的(不需要等待缓存初始化)。我想采用一个解决方案,爬行的网站,以预热缓存。问题是Web-Garden功能似乎是一个黑盒--您无法控制IIS在命中下一个HTTP请求时是否/何时决定加载第二个、第三个或第四个进程。

对我来说,这似乎是一个常见的问题,但寻找解决方案收效甚微。我的问题是,有没有办法通过HTTP头或其他一些构造来给IIS一个提示,你希望它加载或至少路由到进程2,3,4等?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-17 17:26:33

根据微软工程师的说法,这在IIS6中是不可能的。然而,他们在IIS7.5和ASP.Net 4.0中添加了一个新功能,它提供了一个很好的条款来满足我在这里寻找的东西。它被称为"preloadProvider“。下面是一个示例代码片段(非常酷!)。

http://forums.iis.net/p/1158476/1907392.aspx

由于单个应用程序池可以包含多个应用程序,因此您可以使用theapplicationHost.config文件中的以下配置指定要自动启动的各个应用程序:

代码语言:javascript
复制
<sites>

  <site name="MySite" id="1">

    <application path="/"

         preloadEnabled="true"

         preloadProvider="PrewarmMyCache" >

        <!--  Additional content -->

    </application>

  </site>

</sites>



<!-- Additional content -->



<preloadProviders>

     <add name="PrewarmMyCache"

         type="MyNamespace.CustomInitialization, MyLibrary" />

</preloadProviders>

当IIS7.5服务器冷启动或回收单个应用程序池时,IIS7.5使用applicationHost.config文件中的信息来确定需要自动启动哪些Web应用程序。对于每个标记为自动启动的应用程序,IIS7.5都会向HTTP4.0发送一个请求,以便在应用程序暂时不接受ASP.NET请求的状态下启动应用程序。处于此状态时,ASP.NET实例化由preloadProvider属性定义的类型(如上一个示例所示),并调用其公共入口点。通过实现IProcessHostPreloadClient接口,可以创建具有必要入口点的托管自动启动类型,如下面的示例所示:

代码语言:javascript
复制
public class CustomInitialization :  System.Web.Hosting.IProcessHostPreloadClient

{

    public void Preload(string[]  parameters)

    {

        // Perform initialization.

    }

}

初始化代码在预加载方法中运行并且该方法返回后,ASP.NET应用程序就可以处理请求了。在IIS7.5和HTTP4.0中添加了自动启动功能后,您现在就有了一种定义明确的方法,可以在处理第一个ASP.NET请求之前执行昂贵的应用程序初始化。例如,您可以使用新的自动启动功能来初始化应用程序,然后向负载均衡器发出应用程序已初始化并准备接受HTTP流量的信号。

票数 6
EN

Stack Overflow用户

发布于 2009-06-16 01:53:29

也许可以使用web监控工具定期访问您的web应用程序。除了能够在你的网站宕机或行为不符合预期时向你发送一封电子邮件/页面,这些工具还可以根据该工具配置为访问网站的页面和频率来保持你的web应用程序的“热”。

从理论上讲,一旦所有传入请求都被初始化,IIS将以循环方式跨多个花园分配传入的请求。最有效的方法可能是在应用程序中使用不同的URL配置监控工具,这些URL不等于花园中进程数的直接倍数--否则,假设没有其他站点活动,相同的花园将总是被相同的URL子集击中。无论如何,如果配置正确,在几轮之后,你的花园应该都很热。

票数 2
EN

Stack Overflow用户

发布于 2012-09-21 04:56:32

微软已经发布了一个模块,它完全可以做你所要求的事情。Application Initialization Module for IIS 7.5将通过确保花园中的每台服务器都有热缓存并在它们收到来自真实用户的第一个页面命中时做出响应来解决您的问题。

我认为最引人注目的特性是,这个模块还支持重叠的进程回收。这意味着您可以回收、部署应用程序的新版本并重新启动单独的服务器,而不会有任何用户被困在具有冷缓存的缓慢服务器上。following tutorial from IIS 8.0包括一种关于如何启用重叠进程回收的分步方法。

有关更多详细信息,您可以在How to warm up an ASP.NET MVC application on IIS 7.5?上阅读我对类似问题的回答

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/998672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档