繁体   English   中英

IIS 应用程序池、工作进程、应用程序域

[英]IIS app pools, worker processes, app domains

谁能解释 IIS 中应用程序池、工作进程和应用程序域之间的差异? 另外,它们是如何协同工作的? 我已经阅读了几篇文章,但它仍然有点令人困惑。

  1. 在 IIS 中创建的每个网站是否都成为一个应用程序?
  2. 每个应用程序是否与一个工作进程相关联?
  3. 应用域在哪里出现?

我试着用其他词来表达它们。

在一个服务器中,您可以有许多一起运行的 asp.net 站点。 每个站点都是一个应用程序域

您必须为他们每个人分配一个应用程序池 许多应用程序域(站点)可以具有相同的应用程序池,并且由于它们具有相同的应用程序池,因此它们在相同的进程和相同的帐户下运行 - 并且它们具有相同的池设置。 如果此池重新启动,则该池下的所有站点都将重新启动。

现在每个池可以有一个或多个工作进程 每个工作进程都是运行您站点的不同程序,有它们单独的静态变量,它们不同的启动停止调用等。不同的工作进程不能一起通信,交换数据的唯一方法是来自公共文件或公共数据库。 如果您有多个工作进程并且其中一个进行长时间计算,那么另一个可以处理互联网呼叫并显示内容。

当您将许多工作进程分配给一个池时,您就创建了所谓的网络花园,如果一台计算机是一台处理机器,那么您的站点就像是从多台计算机上运行。

应用程序域,带有池和进程

每个工作进程可以有多个线程。

更多工作进程如何影响您:
当您有一个工作进程时,一切都会变得更简单,在您的应用程序中,所有静态变量都是相同的,您可以使用lock来同步它们。
当您分配多个工作进程时,您仍然继续使用静态变量的lock ,静态变量在您站点的多次运行中没有什么不同,并且如果您有一些公共资源(例如在磁盘上创建缩略图) 那么您需要将您的工作进程与Mutex同步。

再一记。 听起来,当您创建更多工作进程时,异步页面加载可能会更顺畅。 asp.net 的会话处理程序存在一个小问题,即锁定页面加载的整个过程——这是好的还是不好的取决于你是否知道并处理它——或者更改它。

因此,让我们只讨论一个站点,其中包含多个工作进程。 在这里,您面临需要将公共资源更改与Mutex同步的问题。 但是使用会话的页面/处理程序不是异步的,因为会话锁定了它们。 这是一个很好的开始,因为你避免让你自己同步很多点。

关于这个话题的一些问题:
在共享同一会话时处理另一个 Web 应用程序时 Web 应用程序被阻止
对 Web 服务的 jQuery Ajax 调用似乎是同步的
ASP.NET 服务器不会异步处理页面
完全替换 ASP.Net 的会话

现在这个会话锁不会影响不同的站点。

在不同的站点之间,工作量更大的进程可以帮助一个站点通过长时间运行的进程阻止另一个站点。
同样在不同的站点中,更多的池也有帮助,因为每个池至少有一个工作进程,但是使用进程浏览器自己记住和查看,每个工作进程占用更多的计算机内存,以及一台具有 16G 内存的大服务器并且一台 SQL 服务器不能有太多不同的工作进程 - 例如,在具有 100 个共享站点的服务器上,您不能有 100 个不同的池。

  • 一台 IIS 服务器可能有多个应用程序池。
  • 一个 Web 应用程序绑定到一个应用程序池。
  • 一个应用程序池可能有多个工作进程(启用 Web Garden 时)。
  • 一个工作进程可以有多个应用程序域。 一个应用程序域只存在于一个工作进程中。
  • 一个应用域可能有多个线程。 一个线程可以在不同的时间被不同的应用程序域共享。

对 ASP.NET 开发人员的意义:为了使您的网站具有可扩展性,不要使用进程内会话,也不要使用静态类变量锁进行同步。

  1. 是的,虽然不是每个应用程序都是一个网站。 您可以拥有一个嵌套网站的应用程序。

  2. 是的,每个应用程序都必须有一个工作进程(应用程序池),尽管一个应用程序池可以服务多个应用程序。 单个 Web 应用程序可以分布式(Web 花园/农场),这意味着它将在多个进程中运行。

  3. 每个进程都将在自己的应用程序域中运行(每个应用程序池都是一个单独的应用程序域)。


来自 MSDN。

创建一个 Web 应用程序

应用程序是网站根目录下的一组内容或网站根目录下单独文件夹中的一组内容。

应用程序池

应用程序池定义了一组一个或多个工作进程,配置了通用设置,这些设置为分配给该应用程序池的一个或多个应用程序提供请求。 因为应用程序池允许一组 Web 应用程序共享一个或多个类似配置的工作进程,所以它们提供了一种方便的方法来将一组 Web 应用程序与服务器计算机上的其他 Web 应用程序隔离。 进程边界将每个工作进程分开; 因此,一个应用程序池中的应用程序问题不会影响其他应用程序池中的网站或应用程序。 应用程序池显着提高了 Web 基础架构的可靠性和可管理性。

来自源链接:-http://weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx

应用程序是一个 IIS 术语,但它是 ASP.NET 使用的术语。 本质上,它创建了一个沙箱或一组边界来将不同的站点或站点的一部分与其他站点分开。

AppDomain 是一个 .NET 术语。 (在 IIS7 中,AppDomains 在 IIS 中发挥着更大的作用,但在大多数情况下,它是一个 ASP.NET 术语)

工作进程用于处理 Web 应用程序的请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM