设为首页 收藏本站
查看: 957|回复: 0

[经验分享] IIS 架构(一) 李风

[复制链接]

尚未签到

发表于 2015-8-12 14:08:20 | 显示全部楼层 |阅读模式
1.   概述
  为了提高IIS的可靠性,安全性以及可用性,与IIS5.0和以前更早的版本不同,IIS6.0提供了一个全新的IIS架构。这个架构的详细情况如下图所示:

  
DSC0000.jpg
                                       (图 1) IIS 6.0整体架构   由上可以看出,IIS 6.0的内核体系主要由如下三个组件构成:HTTP.SYS,W3SVC以及W3Core。作为一个全新的架构,IIS6.0有如下让人值得关注的新特点:
  
  Ø      HTTP.SYS。全新的内核监听模式。
  Ø      IIS6.0新的应用程序隔离模式-工作进程隔离模式。
  Ø      应用程序池。
  Ø      工作进程。
  Ø      Web管理服务(W3SVC)。
  作为一个平台,IIS上面运行着很多web应用程序,并且提供了一系列的相关服务。在系统启动阶段,IIS以及IIS所包含的服务的启动过程如下图所示:

DSC0001.jpg

           (图 2) IIS的启动过程
  2.   HTTP.SYS
2.1. 概述
  HTTP.SYS 运行在windows 的内核模式下,作为驱动程序而存在。它是Windows 2003的TCP/IP网络子系统的一部分,从结构上说,它是TCP之上的一个网络驱动程序,因此,HTTP.SYS不再属于IIS,它已经从IIS中独立了出来。在TCP/IP的基础之上,HTTP.SYS的主要功能是:侦听用户的http请求(这个请求来自于TCPIP.sys驱动程序),并将请求转发给相关的web应用程序处理,最后,HTTP.SYS将处理结果返回给用户(返回到TCPIP.sys驱动程序)。
  在HTTP.SYS的内部,它由如下的功能模块组成:
  ü    侦听模块。
  ü    应答缓存模块。
  ü    请求队列。
  ü    响应发送模块。
  HTTP.SYS的内部组成结构图如下图:
    DSC0002.jpg

              (图 3)HTTP.SYS的内部结构
  2.2. HTTP.SYS的可靠性
  作为在内核模式下运行的操作系统的驱动程序,HTTP.SYS拥有高度的可靠性和稳定性。它始终处于运行状态,能够对用户的http请求作出快速的响应。
     在内核模式下,HTTP.SYS不执行任何用户代码,它只是监听用户的http请求。这些http请求中包含了IIS上运行的web站点所使用的IP地址和端口。因为在HTTP.SYS中不运行任何的用户代码,所以即使用户的web应用程序发生了故障,也不会影响到HTTP.SYS本身,它仍然能够对用户的http请求进行监听,并及时作出反应。
  在IIS 5.0或以前更早的版本中,对用户的http请求进行监听的功能是集成在Inetinfo.exe进程之中的。同时,有一部分用户代码也是运行在Inetinfo.exe进程之中的。在这种情况下,如果用户代码不稳定,或者由于其他原因导致了用户代码的崩溃,那么Inetinfo.exe也会崩溃,这就导致了IIS的不稳定性。
      在IIS 6.0 中,引入了HTTP.SYS模块,它运行在内核模式下,与Inetinfo.exe进程隔离开来,作为操作系统的驱动程序运行。因此,HTTP.SYS不会受到用户代码的影响,它始终处于稳定运行状态,对用户的http请求进行监听,并及时作出反应。IIS 6.0就是通过这种方式保证了它的稳定性和可靠性。
2.3. HTTP.SYS对请求的响应过程
HTTP.SYS监听并接收用户的http请求,之后对用户的http请求做出回应。它的具体操作流程如下图所示:
      DSC0003.jpg
                      (图 4)数据请求
    首先,用户通过浏览器对部署在IIS中的web应用程序发出http请求。经过各种处理,这个http请求最终会到达TCPIP.SYS驱动程序,TCPIP.SYS将这个请求转发给HTTP.SYS网络驱动程序。在HTTP.SYS中,它的监听模块始终在监听着网络上是否有对它的http请求,当一个http请求到达以后,监听模块会对这个http请求进行分析,并根据请求的类型的不同,将这些请求进行排队,等候应用程序池中的web应用程序对队列中的请求进行处理。
  在HTTP.SYS中,它维护着一张数据配置表,在这个表中记录着URL与应用程序池之间的对应关系,HTTP.SYS会对http请求中的URL进行跟踪。也就是说,HTTP.SYS注册了所有IIS 6.0应用,并给每个工作进程赋予一个句柄,IIS内部利用这些句柄来标识、注册应用程序要用到的一个或多个名称空间。因此,当HTTP.SYS接收到一个 HTTP请求的时候,它能够很快地将请求数据包从内核模式下的HTTP.SYS传递到正确的用户模式下的Web应用。
  如果在一个http数据请求包到达之后,相关的应用程序池还没有启动,那么HTTP.SYS负责将这个应用程序池启动。这种处理方式也叫做请求式启动。
当一个http请求被处理完毕之后,处理的结果会返回到HTTP.SYS中,由HTTP.SYS中的响应发送模块将这个处理结果返回到TCPIP.SYS中,并最终返回给用户。
  2.4.HTTP.SYS对数据的缓存
  如果用户对web网站上的某部分资源进行频繁的http请求的话,HTTP.SYS会把对这个请求的响应结果进行缓存。当用户下次对这部分资源进行请求的时候,HTTP.SYS会直接把在缓存中保存的响应结果直接发送给用户。从用户发送http请求到系统返回响应结果的这一过程都是HTTP.SYS在内核模式下完成的。不需要在内核模式和用户模式下进行切换,这样就极大地节省了系统资源,提高了请求的响应速度。有关HTTP.SYS数据缓存的过程如下图所示:
      DSC0004.jpg
                (图 5)HTTP.SYS的缓存处理
  
2.5.HTTP.SYS的配置信息
  HTTP.SYS作为网络驱动程序,它已经从IIS中分离了出来,它不再属于IIS的一部分,因此HTTP.SYS的配置数据是存储在注册表中的,而不是IIS的配置数据库中。在注册表中,HTTP.SYS的注册信息位于如下路径下面:
  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/HTTP
  
2.26.HTTP.SYS的其他功能
  管理TCP的连接
  验证HTTP请求
  记录IIS中的Web网站的日志信息
  实施带宽限制策略以及支持TCP/IP级的管理
      实现客户证书请求服务
3.   W3SVC
  
3.1.概述
     与IIS 5.0不同,W3SVC已经从Inetinfo.exe进程中分离了出来,在IIS中,它将作为一个独立的进程运行。根据配置数据的设置,W3SVC负责创建工作进程(W3Core)。在工作进程的运行过程中,W3SVC还负责监视它的运行状态。
     作为一个独立运行的进程,W3SVC不包含任何第三方用户代码。所以,它不会受到web网站故障的影响,始终处于稳定的运行状态。在此前提下,W3SVC能够稳定地对web网站的运行情况进行监视,并在必要的时候采取行动。基于这一策略,服务器能够根据用户指定的参数监视和重新启动应用程序。
3.2.IIS 5.0简介
  在IIS 5.0中,web服务器进程(Inetinfo.exe)负责管理如下四个服务:
  Ø      WWW服务
  Ø      SMTP服务
  Ø      FTP服务
  Ø      NNTP服务
     其中,WWW服务负责创建,管理web应用程序的进程。同时,它还负责调度工作,即将用户的http请求转发给web应用程序,当web应用程序对用户的 http请求处理完毕后,WWW服务还负责将处理结果返回给用户。
     在web服务器进程(Inetinfo.exe)中,除了运行上面所说的四个服务外,它还可以运行第三方代码,也就是web应用程序。
     IIS 5.0中,它的架构以及各个进程之间的关系如下图所示:
DSC0005.jpg
  (图6)IIS 5.0简单架构图
  
  在IIS 5.0中,它提供了三个不同级别的应用程序保护,他们分别是:
  Ø      低级别。IIS进程内,与IIS 1.0、IIS 2.0、IIS 3.0的单一结构一样,web应用程序作为web服务器进程(Intetinfo.exe)的一部分,它在web服务器进程内部运行。这样做的好处是:提高了web应用程序的性能,能够快速的对用户的请求作出响应。但是,同时也降低了IIS的稳定性,一旦web应用程序崩溃,IIS也就同时崩溃了。
  Ø      中级别。实现一个单独的缓冲池进程(名为DLLHost.exe的COM+宿主进程),这个缓冲池进程运行在Inetinfo.exe进程之外,多个web应用程序运行在缓冲池进程中。这样就实现了web应用程序与Inetinfo.exe进程的隔离。Web应用程序出现故障也不会影响到Inetinfo.exe进程。在一定程度上保证了IIS的稳定性。但是,在缓冲池进程中,一旦有一个web应用程序崩溃,那么整个缓冲池也就崩溃了,所有运行在缓冲池中的web应用程序都将停止工作。
  Ø      高级别。实现一个单独的缓冲池进程(名为DLLHost.exe的COM+宿主进程),这个缓冲池进程运行在Inetinfo.exe进程之外,并且,有且仅有一个web应用程序运行在缓冲池中。这种高级别的保护,在IIS的稳定性方面,要比前两种好的多。一个web应用程序的崩溃不会影响到其他web应用程序和IIS的运行。
     在IIS信息服务管理器中,通过如下方式设置应用程序的保护级别,如下图:
    DSC0006.jpg
              (图 9)性能配置
  
  路径:开始菜单->管理工具->Internet信息服务管理器->应用程序池->属性。
  
  在这里IIS提供了四种性能监控功能:
  ü       对空闲超时的监控。如果工作进程一直处于空闲状态,那么当空闲时间达到设定的值后,W3SVC会关闭工作进程。
  ü       请求队列限制。如果用户对工作进程的请求达到设定的上限后,W3SVC将会对用户的请求进行限制。
  ü       CPU监视。如果工作进程对CPU的占用率超过设定的上限后,W3SVC会根据IIS的配置信息采取相应的措施。
  ü       Web园。关于web园将会在后面的章节详细介绍。
  
  3.4.1.2应用程序运行状况监控
  在Internet信息服务管理器中,关于应用程序运行状况监控的配置如下图:

DSC0007.jpg
           (图 10)运行状况配置
     
  
  路径:开始菜单->管理工具->Internet信息服务管理器->应用程序池->属性。
  
  在这里,IIS对应用程序池运行状况的监控提供了四种功能:
  ü       Ping。W3SVC会在设定的时间间隔内对工作线程执行Ping操作,以获取工作线程的状态信息。
  ü       快速失败保护。如果在指定的时间段内,一定数目的工作进程发生失败,则W3SVC会禁用应用程序池。
  ü       启动时间限制。工作进程必须在设定的时间内开始。
  ü      关闭时间限制。工作进程必须在设定的时间内关闭。
3.4.2.    应用程序池回收
  在Internet信息服务管理器中,关于应用程序池回收的配置如下图:
DSC0008.jpg
         (图 11)回收
  
  路径:开始菜单->管理工具->Internet信息服务管理器->应用程序池->属性。
  在这里,IIS提供了四种回收的方式:
  ü       可以设定回收工作进程的时间间隔。
  ü       可以根据对工作进程的请求数量进行回收,一但对工作进程的用户请求数量超过设定值,系统就会执行对应用程序池的回收工作。
  ü       定时回收。
  ü       根据内存消耗进行回收。
  W3SVC对应用程序池执行回收的操作流程的描述如下:

DSC0009.jpg
           (图12)
  应用程序发生故障,它通知W3SVC执行进程回收工作。
DSC00010.jpg
                (图 13)
  W3SVC启动一个新的工作进程。旧的工作进程继续执行未完成的用户请求,但不接收新的用户请求。
       DSC00011.jpg
                    (图 14)
  新、旧工作进程之间通信,同步应用程序的状态信息。当新工作进程完全获得了旧工作进程中的应用程序状态信息后,它通知W3SVC,表示它已经准备好了,可以接收用户的http请求。
   
               (图 15)
  旧的进程完成其未决的请求,然后正常关闭,或者如果在达到了配置的时间限制、请求数、设置的时间计划,或当达到指定的内存用量限制后仍没有关闭,则明确地终止进程。新工作进程开始正式工作,接收用户的http请求。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-98016-1-1.html 上篇帖子: IIS 证书安装配置访问 下篇帖子: FluorineFx Flex asp.net IIS部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表