构建高性能.NET应用之配置高可用IIS服务器-第三篇 IIS中三个核心组件的讲解(上)
? ? ?今天的文章的比較的容易,主要講述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跨平臺或掃描二維碼關注
贊賞
人贊賞
總結
以上是生活随笔為你收集整理的构建高性能.NET应用之配置高可用IIS服务器-第三篇 IIS中三个核心组件的讲解(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core 1.0 CentOS
- 下一篇: 构建高性能.NET应用之配置高可用IIS