IIS6架构图
在IIS6中,Web服务组件由以下三个组件构成:
1、运行在内核模式的HTTP.sys(HTTP协议栈)
2、运行在用户模式的WAS(Web Admin Service,包含于W3SVC服务中)
3、运行在用户模式的工作进程(WP,Worker Process)
HTTP.sys(HTTP协议栈)
HTTP.sys是工作在内核模式的HTTP请求侦听器,它的架构如下图所示:
HTTP.sys不会执行外部代码,它具有以下作用:
- 侦听和分析HTTP请求,支持IPv4和IPv6;
- 根据URL命名空间将接收到的HTTP请求路由到不同的工作进程;如果请求的URL并不位于本地的URL命名空间范围中,则返回400错误;
- 将HTTP请求进行队列缓存;
- 在内核模式中缓存静态的和无需身份验证的内容响应;这极大的提高了Web服务的响应速度,增强了Web服务器的性能。
- 支持PAE内存寻址方式,在x86上支持的内存容量为64GB;
WAS(W3SVC)
WAS包含于W3SVC服务中,负责管理IIS6的配置、应用程序池和工作进程,工作在用户模式,但不会执行外部代码,主要的作用有:
- 配置HTTP.sys;
- 管理应用程序池;
- 创建工作进程;
- 工作进程回收;
- 工作进程状态监视;
- 工作进程快速失败保护;
- 支持孤立工作进程以进行调试等;
应用程序池
应用程序池定义了可以共享工作进程的Web应用程序(Web站点)的集合,你可以认为它是一组URL命名空间,属于此URL命名空间范围中的Web站点将共享此应用程序池中的工作进程,而HTTP.sys是根据应用程序池所定义的URL命名空间将接收到的HTTP请求路由到此应用程序池对应的工作进程。
和IIS 5 中只能使用一个应用程序池不同,在IIS 6 中你可以创建多个应用程序池,并将不同的Web站点(Web应用程序)分配到不同的应用程序池中,一个应用程序池可以具有一个或多个Web应用程序。不同应用程序池之间是完全隔离的,某个应用程序池出现故障时不会影响其他应用程序池;这样当属于某个应用程序池的Web站点因为代码编写问题而导致停止服务时,不会影响到使用其他应用程序池的Web站点,这最大的实现了Web服务器的高可用性。
工作进程 (Worker Process)
工作进程则是真正用于处理客户发送的HTTP请求的组件,你可以认为它是一个全功能的Web服务器,就像一个微型的IIS 5 服务器一样。当HTTP.sys决定将接收到的HTTP请求路由到某个应用程序池时,它是将HTTP请求路由到此应用程序池对应的工作进程进行处理;工作进程处理HTTP请求,如果需要则加载其他组件(ISAPI扩展或过滤器等等)进行处理,并将处理结果返回给HTTP.sys。
当客户发起HTTP连接请求时,IIS 6完整的处理过程如下:
- 在W3SVC服务启动时,WAS即启动,并且根据metabase.xml中的设置来配置HTTP.sys;
- 当HTTP.sys接收到HTTP请求时,分析其URL命名空间,如果在自己的响应缓存中具有匹配值则直接从缓存中获取响应并返回给客户;如果没有匹配值则根据WAS提供的URL命名空间 范围来决定由哪个应用程序池处理此HTTP请求;
- 如果此应用程序池当前没有工作进程,那么HTTP.sys通知WAS为其创建一个新的工作进程;
- HTTP.sys将接收到的HTTP请求路由到对应的工作进程中,工作进程处理此HTTP请求然后将结果返回给TTP.sys,并且根据缓存活动算法来告知HTTP.sys是否缓存此结果;
- HTTP.sys将请求的处理结果返回给原始客户,并根据工作进程的提示来决定是否保存此处理结果到自己的缓存中。