与将 Web 应用程序保存在一个默认应用程序池中相比,拥有专用应用程序池的优缺点

Posted

技术标签:

【中文标题】与将 Web 应用程序保存在一个默认应用程序池中相比,拥有专用应用程序池的优缺点【英文标题】:Pros and cons of having dedicated application pools over keeping web applications in one default app pool 【发布时间】:2010-09-18 09:49:30 【问题描述】:

与将 Web 应用程序保留在一个默认应用程序池中相比,拥有专用应用程序池的优缺点是什么?

【问题讨论】:

澄清您是在谈论交互式应用程序还是提供内容的网站可能是个好主意。还有你在谈论多少个应用程序/网站。根据这些信息,答案可能会大不相同。 【参考方案1】:

如果您有单独的应用程序池,那么您会在第一个访问您网站的人的初始加载时间支付罚款,并在应用程序池回收后重新启动它。

例如,假设一夜之间没有人访问您的服务器,IIS 将停止运行(我相信默认为 20 分钟)。第一个访问服务器的人将遭受延迟,直到您的应用程序重新加载到内存中。

根据您部署站点的方式(例如发布模式等),这可能不是问题,也可能是烦人的。

这就是为什么我们正在考虑迁移到单个应用程序池/服务器而不是每个站点一个。

【讨论】:

【参考方案2】:

优点:

应用程序相互隔离,除非 IIS 配合使用,否则应用程序池锁定只会取出该池中的应用程序 能够在不同的 ASP.NET 运行时下运行应用程序,如果需要,一个池用于 1.1,另一个用于 2.0 能够为或多或少的关键应用程序提供不同的应用程序池设置。例如,ASP.NET 中的公司网站可能希望在 __ 分钟不活动后关闭,以防止卸载,因为响应至关重要。其他网站可能不需要它。 在文件访问方面可以相互保护池,非常适合第三方或不受信任的应用程序,因为它们可以在非常严格的用户帐户下运行。

缺点:

每个应用程序池都有自己的内存库和自己的进程,因此可以使用更多资源 有些人发现很难调试应用程序,因为您有多个进程

【讨论】:

小世界。很好的答案,米奇! :)【参考方案3】:

我同意杰森的观点。

此外,您可以为不同的应用程序池指定不同的用户(例如 Windows 帐户)。这样就可以在数据库中设置具有不同权限的用户。这有助于增强安全性,并能够跟踪访问数据库的网站/用户,这在跟踪数据库性能问题时很有用。

【讨论】:

事实上,使用application pool identities,您可以将数据库权限授予一个特定的应用程序池,而无需额外的Windows 帐户。这也保护了您客户的数据:如果一个 Web 应用程序被盗用,攻击者将无法访问其他数据库。【参考方案4】:

在应用程序池中组合网站的主要原因是为了节省内存。运行多个 w3wp.exe 进程会产生大量内存开销。如果您没有特别的理由将它们分开,最好将它们放在一起。

【讨论】:

请在您对答案投反对票时添加评论。问这个问题的人喜欢这个回答。答案错了吗?为什么? 为此 +1。这不是一个笼统的答案。我在演示站点旁边运行了一个多层应用程序。演示站点的服务和内容站点都在同一个应用程序池中,而生产是分开的。两者都做是有意义的,因为这是一种非常简单的资源分配方式。 对于本地开发,有一个应用程序池很好(便于调试,减少内存消耗),但对于暂存/生产,我们为每个网站使用专用池【参考方案5】:

专用应用程序池通常会防止一个站点中出现的问题影响其他站点。如果您跨站点共享应用程序池,那么当仅特定站点(或应用程序池)存在错误情况时,您可以关闭盒子上的所有站点。

此外,如果您在同一 Web 服务器上混合使用不同版本的 ASP.Net,则每个 ASP.Net 版本至少需要不同的应用程序池,或者每个网站都需要不同的应用程序池。

我想不出不分离应用程序池的充分理由,这很容易做到。

【讨论】:

以上是关于与将 Web 应用程序保存在一个默认应用程序池中相比,拥有专用应用程序池的优缺点的主要内容,如果未能解决你的问题,请参考以下文章

Azure 移动服务与将设备作为服务器的 Web 套接字

Azure 移动服务与将设备作为服务器的 Web 套接字

JS ES6:声明const并将其导出为默认值与将其直接声明为默认导出之间的区别

属性表模式与将所有属性存储在 json 列中 [重复]

Imshow 与将 matplolib.cm 应用于分段图像有很大不同

性能考虑:在多个表中分散行与将所有行集中在一个表中