霍尊刘雨潼:IIS6.0和ASP.NET最佳实践

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 03:26:01
本课程主要内容包括:IIS6.0新的架构体系;IIS6.0的应用程序隔离模式;IIS6.0强化的新功能,以及IIS6.0与ASP.NET之间的整合能力。

     首先回顾一下IIS5.0的架构体系,如下图所示:

      IIS5.0中,外部DLL的调用,工作进程的启动和关闭都通过inetinfo进程实现,这样如果inetinfo出现故障,就会使整个服务瘫痪。IIS6.0的架构体系比IIS5.0有了很大的改进,实现了inetinfo进程与工作进程的分离,从而提高了整个应该程序的稳定性。
     上图为IIS6.0的架构体系,可以看出与IIS5.0有很大不同。其底层为HTTP.SYS,工作进程管理的任务从inetinfo中分离出来,由WAS负责工作进程的管理和监控,WAS为每个应用程序创建一个应用程序缓冲池,inetinfo进程则只负责管理元数据以及ftp、SMTP、NNTP等辅助协议。下面分别介绍IIS几个主要部件的功能特性,并解释这样的体系结构如何大幅度提高ASP.NET应用程序的性能。     1. HTTP.SYS     HTTP.SYS位于内核层,是对.NET的httpruntime类库进行的重新封装,构架了IIS6的核心驱动程序。其体系结构如下图所示:      http.sys永远保持在运行状态,HTTP Parser负责对Request进行http解析,namespace mapper中存储WAS提供的工作进程的名称空间的映射,使其可以根据命名空间直接将Request路由到工作进程,大量的缩短了路由的路径,从而提供了更好的性能。当请求满负荷时,可以将请求放在“请求队列”中。更为重要的是,IIS6.0在http.sys中提供了响应缓存,该缓存与ASP.NET的三大缓存技术(页面缓存、局部缓存和数据缓存)密切相关,能够大大提高应用程序性能。此外,开发人员对该核心组件不能进行任何操作,从而保证了核心能更安全的操作,这也是windows下一代操作系统提供的一个特性(Longhorn操作系统内核是基于.NET的重新封装)。   

        2. Web Admin Service(WAS)

        WAS主要承担从inetinfo中分离出来工作进程管理的工作,其主要功能是对工作进程和应用程序缓冲池进行管理(Application Pool),包括:

      (1)工作进程的创建;

      (2)管理设置:可以向http.sys中注册命名空间,使得http.sys可以直接将Request路由到工作进程;

      (3)定期进行资源回收:可以由开发人员自定义设置,如按固定的时间间隔、按处理过的Request数或强制回收;

      (4)使用ping机制监视工组进程的执行状态,如果某个工作进程发生错误,则由WAS重启工作进程。ping机制可以由开发人员自定义设置,如ping同一工作进程的间隔时长。并提供有效的失败保护;

      (5)提供了最佳的调试支持。

        WAS提供的这种管理机制可以保证应用程序更可靠的工作。

        3. Application Pool

       应用程序缓冲池的概念在IIS5.0中已经出现,但IIS5.0中只提供了一个应用程序缓冲池,而IIS6.0中则可以动态的创建多个应用程序缓冲池。IIS6.0通过将不同的站点或虚拟目录分割到不同的应用程序缓冲池中,应用程序缓冲池为工作进程指定了边界,即同一个应用程序的多个工作进程放在一个应用程序缓冲池中,从而实现了工作进程的有效隔离,保证了不同的应用程序之间不会互相影响。这就是IIS6.0提供的应用程序隔离模式的关键。

      与Application Pool相关的另一个重要概念是“Web园”(Web Garden)。其内涵是一个应用程序缓冲池中指定了多个工作进程,当某个工作进程负载过重时,能用其它的工作进程继续处理当前的工作请求。适用于多CPU的环境,可以将同一个应用程序缓冲池中的工作进程放在不同的CPU上运行,且各个工作进程之间是相互独立的。之所以说这些进程之间是相互独立的是因为:每个进程之间都有自己的会话状态、应用程序状态和缓存状态。这样,各进程能够进行有关应用程序的状态的保存。其中会话状态可以放在进程之外,并跨处理器共享(IIS6.0新增功能),但应用程序状态和缓存状态则是独立的。有关进程间会话状态共享的内容将在后面做更多探讨。

        “Web园”的概念要与“Web场”(Web Farm)区分清楚,“Web园”是处理对同一应用程序请求的工作进程运行在同一台服务器上的多个CPU上,而“Web场”则是运行在多个服务器上,因此“Web园”比“Web场”小。与“Web园”相关的还有一个“CPU亲合(affinity)”的概念,是指应用程序进程的联合,如ASP.NET进程ASPNET_WP.exe可以在一个或多个CPU上运行,可以通过修改注册表中的CPU Mask码值来指定能运行ASP.NET进程的CPU,具体请参考相关书目。

        4.元数据(metabase)

        IIS6.0做出的另一个改进是将IIS5.0之前的元数据由二进制文件的格式改变为XML文档格式。从而使开发人员能够很方便的对metabase进行维护和管理。

       

       下面再讨论一下IIS6.0对ASP.NET的会话状态维护的支持。在ASP中工作进程的会话状态是保存在进程内的,当客户端再次向服务器发出时,若此次完成响应的服务器与上一次的服务器不同,则不能访问上次访问结束时的会话状态,使应用程序的性能有所影响。而ASP.NET采取的策略则是把工作进程个会话状态存储在进程外,即存储在一个状态服务器上(ASP.NET State Server),各工作进程与此状态服务器交互,从而实现了工作进程间会话状态的共享,使应用程序的性能有较大提高。下图表现了工作进程与ASP.NET State Server之间的交互。          ASP.NET支持用SQL Server数据库作为其状态服务器,从而使开发人员能够对会话状态进行方便的管理。     现在我们对IIS6.0的体系结构的改进和涉及到的关键问题,以及其对ASP.NET的支持有了一个较为全面的讨论,可见IIS6.0为我们提供了一个构建可靠、稳定和高性能的ASP.NET应用程序提供了一个很好的平台,使得ASP.NET能够满足大型应用的需求。但到目前为止,只有IIS服务器支持ASP.NET开发。