最佳实践问题:IIS 7.5中的应用程序池

我有几个asp.net的web应用程序一些运行asp.net 1.1一些运行在2.0和一些3.5在过去这一切运行在Windows 2003与iis6和我为每个网站的应用程序池。 过了一段时间,我在网上读了一个地方,最好在每个版本的.net框架中使用一个应用程序池,这样所有的2.0应用程序都可以在一个应用程序池上运行,并且所有的3.5应用程序都可以自己运行,等等。

现在我正在使用iis7.5迁移到windows 2008 r2,没有1.1或3.5,因此应用程序池只有2.0选项。 框架版本仍然是最好的分离web应用程序? 还是不是每个应用程序池都有自己的框架实例?

实际上.net 2.0和.net 3.5实际上运行并使用了相同版本的ASP.NET(以及CLR),所以无论何时你想运行.net 3.0或3.5,你都应该select2.0版本。

现在就应用程序隔离而言,第一件事情就是你需要为每个版本的CLR / asp.net分别设置应用程序,这意味着4.0和2.0必须分开,然而2.0,3.0和3.5可以愉快地生活在同一个AppPool中。

就最佳实践而言,这取决于您所承载的应用程序的负载和types以及其他许多标准,但我真的会使用AppPool隔离,尤其是:

  1. 尽量保持应用程序之间的隔离
    a)独立测量和监视它们,以便您可以轻松查看每个CPU正在消耗的CPU,内存和其他资源。
    b) 能够卸载(回收)行为不当的应用程序/站点。
    c)隔离具有不同服务期望水平的应用程序,例如,您可能知道某个应用程序比较不重要。 记住有一个bug的单个应用程序如果在完全信任中运行影响同一个应用程序池中运行的所有其他应用程序,则可能会导致工作进程。
    d)隔离具有不同安全需求的应用程序,例如,您可能需要以某些特权运行其中的某些应用程序(例如使用Kerberos访问SQL Server,或将文件写入磁盘,或其他您不希望其他应用程序的事物访问,这样你可以用不同的凭证运行每个AppPool,提供操作系统级别的隔离和保护。

您可以决定在同一个应用程序池中托pipe多个应用程序的一个原因是,如果所有这些应用程序共享重要的代码块,例如,如果您托pipe的是一个大的CMS应用程序,并且将运行20个不同的实例,则使用相同的进程系统可以做更好的工作来共享内存和其他资源,这将使他们更有效率。

不过我认为,除非你承载了大量的站点(我的意思是> = 500),那么我会build议隔离他们自己的应用程序池中的每个站点,特别是如果他们不会在中等信任或其他框架如PHP, ASP,ISAPI等,因为这些提供了太多的权力,可能做不应该被允许的事情(如阅读其他网站configuration,或内存)。