您的位置:首页 > 运维架构 > 网站架构

构建高性能.NET应用之配置高可用IIS服务器-第三篇 IIS中三个核心组件的讲解(上)

2016-05-18 06:57 627 查看
     今天的文章的比较的容易,主要讲述IIS中三个比较重要的组件:协议监听者(Protocol Listeners),WWW服务(World Wide Web Publishing Service)和WAS(Windows  Process Activation Service),理解这三个组件的功能,是理解IIS的必须的知识。

        下面,我们首先来看第一个。

协议监听者(ProtocolListeners)

        我们知道,很多不同类型的应用程序都需要它们的客户端以不同的协议与它们进行通信,我们稍微简单的来举几个例子让大家明白:

1.      Web应用程序采用Http来通信。Web应用程序通过接受Http请求和发送Http响应给客户端的方式来进行通信。
2.      WCF应用程序可以采用很多的协议来进行通信,包括:HTTP, NET.TCP, NET.PIPE, 和 NET.MSMQ
在这里各种不同类型的应用中,协议监听者就是一个负责监听特定协议的请求,然后把请求传递给IIS的组件。每一个协议都有它自己的监听者。IIS7中包括了四个协议的监听者:HTTP.SYS,NET.TCP,NET.PIPE和NET.MSMQ。如果要对其他的协议进行监听,那么可以采用PlugIn的方式写新协议的监听者组件,然后插入到IIS7中(就是采用所谓的“插件式”方式)。
IIS 7中采用了HTTP.SYS来对HTTP请求进行监听,同时在安全性方面也有了改进,因为它也可以对SSL的请求进行监听。另外,对于HTTP.SYS,在IIS6和IIS7中都支持一下功能:
1.       HTTP.SYS被实现成为内核模式中的一个组件
2.       HTTP.SYS直接将接受到的HTTP请求传递给请求的处理工作进程,并且在中途不会出现任何的进程间通信的开销。在IIS6的之前的版本中,HTTP请求首先被用户模式中的进程inetinfo.exe接受,这个进程再把请求转发给IIS中的工作进程,这个过程就涉及到了工作进程与IIS之前跨进程通信了。
3.       每一个应用程序池都有自己的基于内核模式的请求队列。当没有足够的工作进程来处理HTTP请求的时候,HTTP.SYS就把新来的请求放在队列中。之后,工作进程会直接从队列中拿出请求进行处理,在过程中不会涉及到进程间通信的开销。
4.       HTTP.SYS会把请求的输出的响应缓存在内核缓存中,方便对后续的请求进行快速的响应。
下面,我们来看第二个组件。
WAS(Windows  Process Activation Service)

 WAS的主要的职责就是去读取applicationHost.config配置文件中的配置项。有些配置项是用来配置协议监听者的。在之前我们讨论过,每一个协议都有一个监听者(在IIS6中,可以支持的协议只有HTTP协议,在IIS7中因为引入了插件式的协议监听者的方式,所以可以处理很多的协议,如果大家还记得话,要把WCF部署在IIS6中,那么就只能通过HTTP协议)。
如果WAS直接与每个特定的协议监听者交互,那么WAS就与这些协议的监听者仅仅的耦合在了一起,不能与其他的协议监听者交互(因为我们无法修改WAS的代码,除非微软发布新的版本)。所以在IIS7中,在这里就引入了协议监听适配器,其实就是采用了adapter模式了。让WAS依赖抽象,而不是依赖具体的实现。
协议监听适配器将WAS与具体的协议的监听者隔离。那么每一个协议都有一个协议的适配者。例如HTTP协议的适配者知道如何去适配HTTP.SYS,如果对设计模式比较熟悉的朋友,应该非常清楚这一点了。
WAS读取applicationHost.config配置文件中的配置信息,然后把这些信息用在协议监听适配者上。协议监听适配者采用这些配置的信息来监听特定通道的请求。
WAS除了读取配置信息以外,它还负责其他一些比较重要的职责:
1.      使用applicationHost.config配置文件的配置信息来配置和启动应用程序池,来处理请求。
2.      根据applicationHost.config配置文件的配置信息来监控,重启,关闭和管理应用程序池以及相关的工作进程。
理解了上面的内容之后,那么现在应该就非常清楚IIS中请求的处理流程了:
1.      当请求达到的时候,协议监听程序开始运行。
2.      特定的协议监听适配者被创建,并且通知特定的应用程序池请求到达。
3.      WAS检查是否已经有一个工作进程在应用程序池中运行,如果没有,WAS就在应用程序池中创建一个新的工作进程,然后把请求交给这个工作进程来处理,并且这个进程也随后去处理应用程序池的请求队列中的请求。
 

 

WWW服务(World Wide WebPublishing Service)

    WWW服务的功能从IIS6到IIS7发生了很大的变化。一个最主要的变化就是WWW服务可以支持多个协议监听者,而不是仅仅只是支持一个HTTP.SYS。这个重大的改变使得我们在IIS中宿主WCF,并且支持多个协议成为可能。

        在IIS6中,WWW服务的职能如下:

1.      配置与启动HTTP.SYS这个http协议的监听者
2.      监视性能并且为相关的性能计数器提供数据
3.      配置和启动应用程序池和相关的工作进程
4.      启动,监控,关闭和管理工作进程
我们可以很快的发现:在上述列出的WWW服务的职能中,最后两个职能其实与HTTP协议没有多大的关系。换句话说,如果应用程序池和工作进程可以接受如何类型协议的请求,那么,WWW服务最后的那两个功能其实与协议无关。这里就有点功能的杂糅了。
在IIS7中,最后的两个智能就从WWW服务中剥离出去,就成为了我们之前谈的WAS。也就是说,在IIS6中,是没有WAS这个明确的组件的,因为这个组件的功能被包含在了WWW服务中。
把IIS6中WWW服务的最后两个功能分离之后,就可以让WAS去为所有的协议服务,而不仅仅只是为HTTP协议。
OK,IIS的基础知识算是普及完毕了,我们下一篇就可以进入正题了。、

相关内容
构建高性能.NET应用之配置高可用IIS服务器-第一篇:IIS必须掌握的知识

构建高性能.NET应用之配置高可用IIS服务器-第二篇 IIS请求处理模型


作者介绍:汪洋,哪合伙CEO,曾大汉电子商务有限公司首席技术官,副总裁,负责公司产品、技术、运营,参与商业模式设计。华康移动医疗前CTO,副总裁,首席架构师。微软MVP

.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注



赞赏

人赞赏
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: