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

         IIS 中,Http监听者(http.sys)和请求处理者由两个系统服务在控制着。一个是WWW 服务,另外一个就是Windows Process Activation

  对于WWW服务,它主要是监控IIS的配置文件,将新的配置信息用到HTTP.sysWAS上。同时它也维持一些性能计数器,把一些数据反应到计数器中,所以,很多的时候,我们可以查看性能计数器来获取一些与IIS性能相关的信息。

  对于Windows ProcessActivation,这个服务的作用就是激活和唤起进程来处理请求,同时它也对正在运行的处理进程进行管理,例如资源的回收,以及控制着性能相关的一些限制。

         IIS6中,上面的讲述的功能都是包含在WWW服务中的,在IIS 7中,就将上面的功能分开了。到了这里,我感觉再讲下去,大家可能要犯糊涂了,为了使得后文的讲述更加的方便和大家的理解更加的深入,这里很有必要把IIS 的架构讲讲,也非常有必要把IIS 6IIS 7进行比较。

         首先,我们就来看看IIS6的请求的处理模型,如下图所示:

   

         在上图中,我们可以看到:

1.      IIS6的请求处理模型中包含了两个管道:一个是IIS6的处理管道,一个是ASP.NET的处理管道。

2.      每一个请求的处理都要经过两个管道。当请求经过IIS的管道的时候,IIS6就是根据它的metabase里面的配置信息来决定把请求给那个来处理。如果是请求与ASP.NET相关的内容的,那么请求就会被交个aspnet_isapi.dll来处理,然后aspnet_isapi.dll就加载CLR运行时,并且开启ASP.NET的处理管道。

3.      在两个管道中,有一些相同的处理流程,例如身份验证。

 

另外,ASP.NET允许我们在处理管道中注册自己的module或者handler,这一点朋友们都应该很清楚了。我们一般在ASP.NET的应用程序级别的事件中注册我们自己的逻辑,当ASP.NET触发这些事件的时候,我们的代码就运行了。

IIS6中引入了两个不同的处理管道,引发了下面的问题:

1.      导致了一定程度的重复处理。例如,两个管道中都有身份验证的组件,那么一个请求就要被验证两次。

2.      因为ASP.NET的管道在IIS的管道之后,所以对于每个请求的处理决定完全是由aspnet_isapi.dll这个组件来控制的,也就是说ASP.NET的处理管道无法在早期对请求如何进行处理下决定。

3.      一旦把请求交给了ASP.NET的处理管道之后,IIS 的处理管道要等到ASP.NET处理完毕之后才能接着处理,而且,一旦ASP.NET管道处理完之后,ASP.NET的处理管道无法影响后续的IIS6的处理管道。

4.      只有把请求交给了aspnet_isapi.dll之后,ASP.NET处理管道才开始启动,并且请求的内容只能是与ASP.NET相关的,例如aspx页面等。ASP.NET处理管道无法处理对非ASP.NET内容的请求,例如图片,脚本等。也就是说:程序在一定的程度上无法对非ASP.NET的资源进行验证与授权的保护。

既然IIS6有上面的一些问题,IIS7的出现就解决了上述的问题。IIS 7移除了对aspnet_isapi,并且将IISASP.NET的进行了集成,成为一个管道,如下:


一个请求的处理流程变的简单了,效率应该会提高。事实也确实如何,并且一个请求的线程切换次数也变少了,这极大的提升了性能(不用把请求从IIS的线程切换到ASP.NET的处理线程)。

通过改进,IIS 7解决了上述我们提到的几个问题:

1.      集成管道中不会包含重复的组件。

2.      ASP.NETmodulehandler可以在管道的如何地方发挥作用,从而使得我们可以对请求的处理流程进行完全的控制。

3.      可以处理对非ASP.NET内容的请求。

相关内容

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


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



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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle入门(十四F)之PL/SQL定义变量

一、变量介绍 (1)变量的使用可以使用变量: 临时存储数据存储值的操作可重用性(2)PL/SQL中的变量处理变量是: 在声明部分中声明和初始化在可执行部分中使用和分配新值变量可以是:作为…

小米手环nfc门卡摸拟成功后不能开门_如何使用小米手环5 NFC版进行门卡模拟(如公司门禁卡、小区门禁卡、学校门禁卡等)?...

由于本人最近购入了小米手环5 NFC版,所以对小米手环模拟门禁卡比较清楚一点。说一下用该手环模拟门禁的方法吧,我本人模拟的是学校公寓的门禁卡,不过学校的门禁卡是加密卡,可能操作起来稍微比不加密的门禁卡麻烦一点,因…

5.NIO零拷贝与传统IO的文件传输性能比较

【README】 1.本文总结自B站《netty-尚硅谷》,很不错; 2.本文部分内容参考自 NIO效率高的原理之零拷贝与直接内存映射 - 腾讯云开发者社区-腾讯云 【1】零拷贝原理 【1.1】传统IO的文件拷贝 【图解】 step1)调用 sys_read系统调用&#…

二进制漏洞利用与挖掘_二进制各种漏洞原理实战分析总结

本部分将对常见的二进制漏洞做系统分析,方便在漏洞挖掘过程中定位识别是什么类型漏洞,工欲善其事,必先利其器。0x01栈溢出漏洞原理栈溢出漏洞属于缓冲区漏洞的一种,实例如下:编译后使用windbg运行直接运行到了地址0x41…

Oracle入门(十四H)之良好的编程实践

一、为什么要学习它 好的编程实践是技巧,可以按照创建最好的代码可能。 编程实践涵盖了一切从代码更多可以用更快的速度创建代码性能。 软件工程团队通常会遵循风格指导让团队中的每个人使用相同的技术。 这使它更容易阅读和修改编写的代码其他。二、编程实践已经学…

微软.NET 正式劈腿成功,横跨所有平台

.NET官方博客宣布了《Announcing .NET Core RC2 and .NET Core SDK Preview 1》,正式如期发布了.NET Core RC2, 现在可以放心的基于.NET Core 构建 ASP.NET Core, console apps 和 class libraries for Windows, OS X and Linux。这里贴张图表达下他们之间的关系: …

2.BIO与NIO区别

【README】 1.本文总结自B站《netty-尚硅谷》,很不错;2.本文介绍 BIO, NIO的知识;【1】BIO(传统java IO模型) 1)BIO-Blocking IO:同步阻塞,服务器实现模式为一个连接一…

k8s往secret里导入证书_K8S之Secret

简介secret顾名思义,用于存储一些敏感的需要加密的数据。这些数据可能是要保存在pod的定义文件或者docker的镜像中。把这些数据通过加密的方式存放到secrets对象中,可以降低信息泄露的风险。在secret中存储的数据都需要通过base64进行转换加密后存放。创…

Oracle入门(十四G)之PL / SQL中检索数据

一、PL / SQL中检索数据 (1)PL / SQL中的SQL语句可以在PL / SQL中使用以下几种SQL语句:•SELECT从数据库检索数据。•DML语句,例如INSERT,UPDATE和DELETE,以更改数据库中的行。•事务控制语句,例…

.NET Core 1.0 CentOS7 尝试

昨天宣布 ASP.NET Core RC2,据说差不多稳定了,以后不会有大改了。 参考:https://blogs.msdn.microsoft.com/webdev/2016/05/16/announcing-asp-net-core-rc2/ 一、环境装备 等待很久了,高兴之余昨晚安装一个CentOS系统,版本如下&a…

6.netty线程模型-Reactor

【README】 1..本文部分内容翻译自: [Netty] Nettys thread model and simple usage 2.netty模型是以 Reactor模式为基础的,具体的,netty使用的是 主从Reactor多线程模型; 3.先介绍了 Reactor线程模型;后介绍了 Ne…

python mac读取 文件属性_从Python获取和设置mac文件和文件夹查找器标签

macfile模块是^{}模块的一部分,在"2006-11-20 0.2.0"中被重命名为mactypes使用此模块,以下两个函数可用于获取和设置appscript 1.0版的查找器标签:from appscript import appfrom mactypes import File as MacFile# Note these lab…

Oracle入门(十四.1)之PL / SQL简介

一、PL / SQL描述程序语言扩展到SQL: •允许将基本程序逻辑和控制流与SQL语句组合在一起。 •是Oracle专有编程语言。- 它只能用于Oracle数据库或工具。二、程序语言扩展到SQL•是一种程序语言。 - 当遵循一系列指令时会产生结果。 •是3GL(第三代编程语…

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

今天的文章的比较的容易,主要讲述IIS中三个比较重要的组件:协议监听者(Protocol Listeners),WWW服务(World Wide Web Publishing Service)和WAS(Windows Process Activation Service),理解这三个组件的功能,是理解IIS…

7.netty服务器中提交任务到NioEventLoop(Nio事件循环执行线程)

【README】 1.本文总结自 B站 《尚硅谷-netty》; 2.NioEventLoop实际上是一个提交到线程池的Runnable任务,在while无限循环中运行 taskQueue中的任务(串行); 【1】提交任务到NioEventLoop 1)NioEventLoop&#xff1…

Oracle入门(十四.2)之PL / SQL的好处

一、PL / SQL的好处在Oracle数据库中使用PL / SQL编程语言有很多好处。 1.将过程构造与SQL集成 2.模块化程序开发 3.改进的性能 4.与Oracle工具集成 5.便携性6.异常处理二、优点 优点1:使用SQL集成程序化结构PL / SQL的首要优势是程序结构与SQL的集成。 SQL是一种非…

炒菜机器人的弊端_机器人炒菜真不是你想的那样!

7月8日下午,爱餐全产业链模式发布会在张家口进行,会上,张家口文旅投集团与上海爱餐机器人有限公司签订了3000台智能机器人设备合作协议,这些机器人可是身手不凡,清一色的都是会厨艺的炒菜机器人,未来他们还…

构建高性能.NET应用之配置高可用IIS服务器-第四篇 IIS常见问题之:工作进程回收机制(上)

通过三篇文章的普及,相信大家对IIS应该有了一个基本的了解。那么从本篇文章开始,我们就开始进入IIS一些比较实际的话题:如何配置IIS,使得其性能尽可能的高。 我们在本篇中主要讲述的就是“工作进程回收机制”,下面我们…

8.基于netty实现群聊,心跳检测

【README】 1.本文总结自B站《netty-尚硅谷》,很不错; 2.本文po出了 Unpooled创建缓冲区的 代码示例; 3.本文示例代码基于netty实现以下功能: 群聊客户端及服务器;心跳检测;【1】Unpooled创建缓冲区 U…

Oracle入门(十四.3)之创建PL / SQL块

一、PL / SQL块结构 一个PL / SQL块由三部分组成。PL / SQL块结构部分二、PL / SQL编译器用高级编程语言(C,Java,PL / SQL等)编写的每个程序都必须经过检查并转换为二进制代码(1和0),然后才能执…