开始之前可以先读:http://www.cnblogs.com/tiantianle/p/5419445.html

原文:http://www.cnblogs.com/arbin98/archive/2010/09/03/1816847.html

  1.概述

IIS6.0提供了一个全新的IIS架构。这个架构的详细情况如下图所示:

由上看出IIS 6.0的内核体系主要由三个组件构成:HTTP.SYS,W3SVC以及W3Core。作为一个全新的架构,IIS6.0有如下让人值得关注的新特点:

Ø      HTTP.SYS。全新的内核监听模式。

Ø      Web管理服务(W3SVC)。

Ø      应用程序池。

Ø      工作进程。

Ø      IIS6.0新的应用程序隔离模式-工作进程隔离模式。

核心变化:

1.在IIS6.0中将WWW服务从Inetinfo.exe进程中独立了出来,作为一个单独的组件(W3SVC)来处理

2.将接收用户http请求的功能从W3SVC中分离了出来。接收用户http请求的功能现在由W3Core来实现

IIS7.0架构和6.0没有根本性变化,但是有不少优化。

IIS启动

web服务器进程(Inetinfo.exe)

2.   HTTP.SYS

HTTP.SYS的主要功能是:侦听用户的http请求(请求来自于TCPIP.sys驱动程序)并将请求转发给相关的web应用程序(http请求中包含了IIS上运行的web站点所使用的IP地址和端口)处理,最后HTTP.SYS将处理结果返回给用户(返回到TCPIP.sys驱动程序)。具体操作流程如下图所示:

用户通过浏览器对IIS中的web应用程序发出http请求。(用户发出请求)

经过各种处理http请求最终会到达TCPIP.SYS驱动程序,TCPIP.SYS将请求转发给HTTP.SYS网络驱动程序。(TCP.sys转发请求到http.sys)

在HTTP.SYS中,它的监听模块始终在监听着网络上是否有对它的http请求,当一个http请求到达以后,监听模块会对这个http请求进行分析并根据请求的类型的不同,将这些请求进行排队,等候应用程序池中的web应用程序对队列中的请求进行处理。(http.sys对请求分类排队)

在HTTP.SYS中维护着一张数据配置表,在这个表中记录着URL与应用程序池之间的对应关系(操作系统启动时IIS首先在HTTP.SYS中注册自己的虚拟路径即可访问的url),请求到达时根据请求的URL将其转发给相应的应用程序池,运行于应用程序池中的工作者进程来响应此HTTP请求

如果在一个http数据请求包到达之后,相关的应用程序池还没有启动,那么HTTP.SYS负责将这个应用程序池启动。这种处理方式也叫做请求式启动。

当一个http请求被处理完毕之后,处理的结果会返回到HTTP.SYS中,由HTTP.SYS中的响应发送模块将这个处理结果返回到TCPIP.SYS中,并最终返回给用户。

关于内核模式与用户模式:

在Windows Server操作系统中,一个进程既可以运行于内核模式,也可以运行于用户模式。如果一个进程运行于内核模式,那么这个进程就可以访问所有硬件和系统数据;如果一个进 程运行于用户模式,那么这个进程不能直接访问硬件,而且访问系统数据时也会受到限制。在Intel处理器架构中一共有0~3四个特权级,内核模式运行于0级之内,而用户模式运行于3级。通过在内核模式运行Http.SYS,侦听器可以直接访问TCP/IP协议栈,但是又能够位于www服务之外,这样就不会受到应用程序中代码缺陷的影响,也不会因为应用程序崩溃而出现问题。

用户模式和内核模式之间转换是一项开销很大的操作,服务器首先从内核模式的TCP/IP栈将传入的HTTP请求传递给用户模式的Winsock,由Winsock将请求传递给IIS。从内核模式到用户模式的切换很快发生,但不可避免地给处理过程带来瞬间的延迟。当负载较大时延迟不断累加,由于这种转换是必不可少的,所以管理员根本没有办法优化处理过程。

IIS 6.0的https.sys内核模式驱动程序极大地减少了用户模式和内核模式之间的切换次数。http.sys监听着HTTP请求,决定由哪一个用户模式的进程来处理该请求,或者是否由驱动程序本身返回用户请求的内容。 http://www.webshu.net/jiaocheng/programme/asp/200804/5936.html

3.   W3SVC(3w服务)

与IIS 5.0不同,W3SVC已经从Inetinfo.exe进程中分离了出来作为一个独立的进程运行。根据配置数据的设置,W3SVC负责创建工作进程(W3Core)。在工作进程的运行过程中,W3SVC还负责监视它的运行状态。何时创建工作者进程??当应用程序池启动完成后。

4.   W3Core

W3Core又称为工作进程(Worker Process)或W3WP.exe。默认情况下IIS 6.0是在工作进程隔离模式下运行的。对于每一个web应用程序,IIS6.0都有一个或多个工作进程实例来运行和管理它。每一个工作者进程也可以管理多个web程序。功能是在一个名为W3Core.dll的动态联接库中实现的。在IIS5.0隔离模式下,这个DLL可以被加载到Inetinfo.exe进程中;在应用程序隔离模式下,这个DLL可以被加载到W3WP.exe进程中。

web应用程序与工作进程与 应用程序池的关系

ü      在IIS6.0中,每一个用户web应用程序都会运行在一个应用程序池中。这个应用程序池可以是IIS默认的应用程序池,也可以是用户自定义的应用程序池。

ü      作为一个宿主程序,每个应用程序池中都会运行着一个或者多个用户web应用程序。

ü      在应用程序池中,存在着一个或者多个工作进程。每个工作进程只能属于一个特定的应用程序池,由这些工作进程来负责管理应用程序池中的用户web应用程序。

他们的结构关系如下图所示:
      
           (图 16)应用程序池

如果我们将应用程序池比喻成为一座公寓,那么在公寓里面的那些住户就是一个个web应用程序,而公寓的物业的管理人员就是工作进程。如果公寓比较大,住户比较多,那么就可能需要有多个物业管理人员。也就是说,每个应用程序池里面可以有多个工作进程在工作。

在处理用户的http请求的时候,内核模式下的HTTP.SYS直接监听用户的http请求,并将用户的http请求直接转发给W3Core。并由W3Core所管理的web应用程序来处理用户的http请求。这一操作过程如下图所示:

      
                   (图 19)用户请求的处理过程

通过这种方式,IIS6.0中处于内核模式下的HTTP.SYS直接与用户应用程序通信。这就缩短了数据的请求、转发过程,提高了IIS的性能。

5.   应用程序池

是Windows Server为提升Web服务的性能和可靠性而引入的一个Web程序隔离机制。

一个或多个工作者进程为应用程序池提供服务(管理应用程序)

应用程序池中可运行多个Web应用程序,DefaultAppPool应用程序池运行了5个Web应用程序。

每个应用程序池都可以加载特定版本的.NET Framework对ASP.NET应用程序提供支持。

在IIS 7中,应用程序池有两种运行模式——经典模式和集成模式

经典模式下,IIS7应用程序池运行方式同IIS 6

集成模式下,IIS 7直接预装载.NET Framework,从而为ASP.NET应用程序提供了更好的性能。

Windows Server上运行应用程序池的系统帐号是“NetworkService”。

在后面可以看到在部署ASP.NET网站时往往需要给此帐号设置特定的权限(比如允许ASP.NET应用程序向某文件夹中添加文件)。

应用程序池的回收功能

在工作进程隔离模式中,通过配置,IIS可以定期重新启动应用程序池中的工作进程。通过这种机制IIS可以更好地管理那些有错误的工作进程。在默认情况下,当IIS回收一个应用程序池的时候,它会使用一种称为overlapped recycle的回收技术。

在这种回收模式下,失败的工作进程将不会接收新的http请求,当它处理完存储在请求队列中的所有剩余的http请求后,这个进程则正常关闭;或者如果在达到了配置的时间限制、请求数、设置的时间计划,或当达到指定的内存用量限制后仍没有关闭,则明确地终止进程。默认情况下,应用程序池每隔1740分钟(29小时)回收一次。

为了防止服务中断,在失败的工作进程继续处理存储在请求队列中的剩余的请求的时候,IIS启动了新的工作进程,所有新的http请求都会由给这个新的工作进程处理。在此期间,TCP/IP连接不会丢失。

6.   Web园

在一个应用程序池中存在着一个或者多个web应用程序,并且由这个应用程序池中一个或者多个工作进程来管理这些web应用程序。如果在一个应用程序池中存在着多个工作进程的话,那么就形成了一个web园(Web Gardens)。

关于Web园的配置,如下图所示,只需要将“最大工作进程数”的值设置为大于1的值就可以了。


                  (图 23)配置Web园

这样做的好处是:提高了处理用户http请求的效率;当一个工作进程坏掉之后,其他的工作进程仍然能够处理用户的请求,保证了系统的稳定性和可靠性。

WEB服务器2--IIS架构(转)的更多相关文章

  1. 01、NetCore2.0优化之Web服务器 与 IIS解耦

    01.NetCore2.0优化之Web服务器 与 IIS解耦 在Asp.Net Core 2.0中,是如何实现跨平台的?不使用IIS了,在linux上的WebServer是什么? ---------- ...

  2. IISExpress.无法启动IIS Express Web 服务器.Starting IIS Express... IIS Express is running

    x 提示: 无法启动IIS Express Web 服务器. 来自IIS Express的输出: Starting IIS Express... IIS Express is running 总结: ...

  3. 使用 C# 编写简易 ASP.NET Web 服务器 ---- 模拟IIS的处理过程

    如果你想获得更好的阅读体验,可以前往我在 github 上的博客进行阅读,http://lcomplete.github.io/blog/2013/07/16/use-csharp-write-asp ...

  4. WEB服务器搭建–IIS

    功能作用 IIS是一个World Wide Web server.Gopher server和FTP server全部包容在里面. IIS意味着你能发布网页,并且有ASP(Active Server ...

  5. Apache web服务器(LAMP架构)

    1.apache介绍 1).世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2).http 超文本协议 HTML 超文本标记语言 3).URL 统一资源定位符 http ...

  6. 云服务器Windows Server2012 配置http服务器(又称Web服务器,IIS)

    出错:无法打开运行空间池.服务器管理器WinRM插件可能已损坏或丢失. 解决方法: http://shiyousan.com/post/636308065767125916 第一步是开启WinRM服务 ...

  7. 错误:为 Web 项目“XXX”配置的 URL“http://localhost/”的网站同时存在于本地 IIS Web 服务器和 IIS Express Web 服务器上。您需要使用 IIS 管理器在 IIS 中更改此网站的绑定。

    解决方法: 用记事本打开MVC网站的项目文件(*.csproj),滚动条拉到最下,找到这两个节点: <UseIIS>True</UseIIS> <AutoAssignPo ...

  8. IIS Web服务器日志、日志服务器分析

    IIS Web服务器日志.日志服务器分析 EventLog Analyzer是一款全面的工具,用于审计.管理和跟踪您的Microsoft Internet Information Services(I ...

  9. WEB服务器(IIS)的配置与管理

    安装Web服务器(IIS) 在"服务器管理器"-"角色"-"添加角色"-选择"Web服务器(IIS)"进行安装 这里,我 ...

  10. JSP之WEB服务器:Apache与Tomcat的区别 ,几种常见的web/应用服务器

    注意:此为2009年的blog,注意时效性(针对常见服务器)     APACHE是一个web服务器环境程序 启用他可以作为web服务器使用 不过只支持静态网页 如(asp,php,cgi,jsp)等 ...

随机推荐

  1. .NET 4.0 兼容 .NET 2.0 的方法

    使用.net开发桌面应用,广大亲门最头疼的莫过于客户端部署的问题.基于.net 2.0 的winfrom程序因为 Framework 的分发包大小为20M左右还好解决,不幸的是如果项目中使用了Wcf, ...

  2. 单例模式(Singleton)详解——转载

    单例模式(Singleton) 首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了, 比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个, 这里就可以通过 ...

  3. Android Studio tips and tricks 翻译学习

    Android Studio tips and tricks 翻译 这里是原文的链接. 正文: 如果你对Android Studio和IntelliJ不熟悉,本页提供了一些建议,让你可以从最常见的任务 ...

  4. idea导入项目出错

    在idea导如项目后,总是会报错,每个类都会报错.解决的办法是: 1. 2.添加本地jdk 3.添加项目中的lib包

  5. oracle 随Linux系统启动自启动设置

    本文转自http://www.jb51.net/article/19823.htm 首先,要在RHEL中设置允许ORACLE系统自动启动,因为默认情况下是设置为不允许的.操作如下: 在root账户下修 ...

  6. 删除作业计划出错(DELETE语句与 REFERENCE约束"FK_subplan_job_id"冲突。)

    删除作业计划出错(DELETE语句与 REFERENCE约束"FK_subplan_job_id"冲突.) use msdb select * from sysmaintplan_plans --查看 ...

  7. Qt中gb2312/GBK的URL编解码函数

    编码函数: QByteArray encodeURI(QString str) { QByteArray array; QTextCodec *codec=QTextCodec::codecForNa ...

  8. Go学习笔记(二):编写 HelloWorld 程序

    //Hello.go代码 package main import "fmt" func main(){ fmt.Printf("Hello, world!This is ...

  9. sql 数据库备份还原脚本

    /**功能:数据库备份*dbname:数据库名称*bakname:备份名称,包含完整路径*/use master BACKUP DATABASE dbname TO disk='c:\bakName' ...

  10. 2014-06-13 jq chart

    昨天接到上级说要在检测服务器上增加一个可以根据时间来查看服务器信息的线形图,那我首先就在原有的发送监控信息的功能上增加了把信息存入数据库中,然后再数据库中取得数据显示. 至于线形图的插件是jqx 的c ...