开始之前可以先读: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. mysql 主从复制配置步骤

    1.准备两台数据库环境,或者单台多实例环境,能否正常启动和登录. 2.配置my.cnf文件,主库配置log-bin和server-id参数,从库配置server-id,不能和主库及其他从库一样,一般不 ...

  2. css布局详解(一)——盒模型

    一.网页布局的几种情况 今天让我们总结一下在css布局的各种情况做一个总结,为我们以后布局网页时做一个参考. 先看一张图,这是去年cssConf大会时阿里的 @寒冬winter 老师放出来的: 如图所 ...

  3. (转)C#之玩转反射

    前言 之所以要写这篇关于C#反射的随笔,起因有两个:   第一个是自己开发的网站需要用到   其次就是没看到这方面比较好的文章. 所以下定决心自己写一篇,废话不多说开始进入正题. 前期准备 在VS20 ...

  4. Git远程使用技巧

    git作为强大的版本管理软件,已经得到了广泛的应用,很多人对于本地的git操作已经非常熟悉了.然而有的时候,我们也需要一个远程的,类似云的仓库来存储我们的一些代码.github给予了我们不限量的空间来 ...

  5. SQL获取选中时间的交集

    如上图:t1,t2代表要选择的时间段,t3,t4代表系统时间. 那么如果要获取选中时间段所有的交集为: 条件1 and ((t3>t1 and t1>t2) or (t3<t2 an ...

  6. iOS9适配+warning消除

    最近做了iOS 9的适配,程序出现大量警告也做了些处理,写出来分先给大家. 一.iOS 9适配 问题一: <Error>: CGContextSaveGState: invalid con ...

  7. 使用python发邮件

    使用python发邮件 网上有很多发邮件的例子,本人在网上找了一份,稍加修改后使用 上源码 # encoding=utf-8 from email.mime.image import MIMEImag ...

  8. mysql索引之普通索引

    1,普通索引的创建 普通索引可以在建表的时候创建 sql : create table temp2(id int(10) not null auto_increment ,title varchar( ...

  9. C# 数据实现设计模式

    一个人没事,写了一个底层数据实现读取设计模式,个人觉得还是蛮好扩展,里面有不足的地方希望大家给予指导.话不多说先看个图吧!图可能不正规,伤害了你的眼睛见谅.有图有真相 其实这个设计模式,就是一个简单的 ...

  10. CMS设计-组件化

    原来CMS使用的专题类的页面是 : 事先由前端写好完整页面,再交付给运营使用,这样使用的比较灵活,可以根据市场的不同需求由前端切出不同的页面,有时候一旦需求过多,就耽误切图的时间. 现在M和H5采用组 ...