W3SVC也許是IIS 6.0體系中最不令人注意的組件,不過(guò)這并不說(shuō)明它不重要。W3SVC的任務(wù)是根據(jù)配置數(shù)據(jù)的設(shè)置創(chuàng)建和監(jiān)視工作線程,由工作線程運(yùn)行Web網(wǎng)站應(yīng)用。在IIS 5.0中,與IIS 6.0 W3SVC組件最接近的是IIS管理服務(wù),IIS管理服務(wù)是Inetinfo的一部分;因此,如果Inetinfo出現(xiàn)問(wèn)題,IIS管理服務(wù)也會(huì)出現(xiàn)問(wèn)題,而且此時(shí)的IIS管理服務(wù)不能再重新啟動(dòng)Inetinfo或其他故障的應(yīng)用程序。在IIS 6.0中,W3SVC作為一個(gè)獨(dú)立的進(jìn)程運(yùn)行,Web應(yīng)用的故障不可能波及W3SVC,因?yàn)閃3SVC之內(nèi)根本沒(méi)有第三方的代碼運(yùn)行。W3SVC總是處于運(yùn)行狀態(tài),因此它能夠監(jiān)視Web應(yīng)用的健康狀況,并在必要時(shí)采取行動(dòng)。由于這一策略,服務(wù)器能夠根據(jù)用戶指定的參數(shù)監(jiān)視和重新啟動(dòng)應(yīng)用程序。
■ http.sys
IIS 6.0體系設(shè)計(jì)中最重大的變化是加入了http.sys驅(qū)動(dòng)程序,http.sys驅(qū)動(dòng)程序的任務(wù)是處理HTTP請(qǐng)求,而且它在內(nèi)核模式下執(zhí)行操作。不要小看這一改變,將處理HTTP請(qǐng)求的任務(wù)從IIS 5.0、IIS 4.0的用戶模式改變到IIS 6.0的內(nèi)核模式標(biāo)志著新一代IIS服務(wù)器的誕生。
在Win 2K和NT 4.0中,IIS在用戶模式下運(yùn)行。運(yùn)行在用戶模式下的應(yīng)用程序不直接與硬件通信,它們直接調(diào)用的是一些標(biāo)準(zhǔn)過(guò)程,這些標(biāo)準(zhǔn)過(guò)程或者將數(shù)據(jù)傳入內(nèi)核模式的組件(例如網(wǎng)卡驅(qū)動(dòng)程序,圖形子系統(tǒng)),或者調(diào)用內(nèi)核模式組件的函數(shù),以此完成保存文件、設(shè)置IP地址、將HTML文件發(fā)送到網(wǎng)絡(luò)之類的任務(wù)。
用戶模式和內(nèi)核模式之間的轉(zhuǎn)換是一項(xiàng)開(kāi)銷很大的操作,服務(wù)器首先從內(nèi)核模式的TCP/IP棧將傳入的HTTP請(qǐng)求傳遞給用戶模式的Winsock,由Winsock將請(qǐng)求傳遞給IIS。從內(nèi)核模式到用戶模式的切換很快發(fā)生,但不可避免地給處理過(guò)程帶來(lái)瞬間的延遲。當(dāng)負(fù)載較大時(shí),這種延遲不斷累加,同時(shí)由于這種轉(zhuǎn)換是必不可少的,所以管理員根本沒(méi)有辦法優(yōu)化處理過(guò)程。
IIS 6.0的https.sys內(nèi)核模式驅(qū)動(dòng)程序極大地減少了用戶模式和內(nèi)核模式之間的切換次數(shù)。http.sys監(jiān)聽(tīng)著HTTP請(qǐng)求,決定由哪一個(gè)用戶模式的進(jìn)程來(lái)處理該請(qǐng)求,或者是否由驅(qū)動(dòng)程序本身返回用戶請(qǐng)求的內(nèi)容。
IIS 6.0在用戶模式下運(yùn)行,完全依賴內(nèi)核模式的http.sys作為接收用戶請(qǐng)求的服務(wù)器引擎。因此,http.sys必須能夠在任何時(shí)候作出相應(yīng),必須具有極高的可靠性。用戶代碼可能導(dǎo)致進(jìn)程出錯(cuò),所以微軟把http.sys設(shè)計(jì)成不執(zhí)行任何用戶代碼,這樣,即使應(yīng)用程序出現(xiàn)了故障,也不會(huì)影響到IIS 6.0本身,IIS 6.0仍能夠照常監(jiān)聽(tīng)HTTP請(qǐng)求。
如果要從內(nèi)核模式的緩沖區(qū)返回靜態(tài)的應(yīng)答,一個(gè)高速的、內(nèi)核模式的、不允許運(yùn)行應(yīng)用程序代碼的HTTP處理器是十分理想的,它減少了切換到用戶模式的昂貴開(kāi)銷,能夠從內(nèi)核模式的緩沖區(qū)快速返回應(yīng)答。IIS 6.0的http.sys就管理著這樣一個(gè)緩沖區(qū),而且使用了高度優(yōu)化的啟發(fā)式緩沖區(qū)算法來(lái)確定哪些內(nèi)容要放入緩沖區(qū),例如,http.sys可能只緩沖那些出現(xiàn)了一次以上請(qǐng)求的內(nèi)容。
由于http.sys直接從應(yīng)答緩沖區(qū)提取靜態(tài)內(nèi)容,不必再切換到用戶模式,所以與IIS 5.0的性能相比,IIS 6.0的整體性能有了顯著提升。根據(jù)微軟的資料顯示,WebBench基準(zhǔn)測(cè)試表明IIS 6.0返回靜態(tài)內(nèi)容的速度要比IIS 5.0快150%。即使以IIS 5.0的隔離模式運(yùn)行IIS 6.0服務(wù)器(這時(shí),IIS 6.0的體系結(jié)構(gòu)與IIS 5.0的相似),同樣也能從http.sys驅(qū)動(dòng)程序的應(yīng)答緩沖區(qū)和其他改進(jìn)之處獲益。
另外,微軟在http.sys驅(qū)動(dòng)程序中采用了許多優(yōu)化的算法,使其能夠?qū)⒄?qǐng)求直接轉(zhuǎn)發(fā)到適當(dāng)?shù)墓ぷ鬟M(jìn)程。在IIS 4.0和IIS 5.0中,必須通過(guò)多個(gè)步驟才能確定進(jìn)程的哪一個(gè)實(shí)例擁有了應(yīng)當(dāng)接收當(dāng)前請(qǐng)求的Web應(yīng)用,但在IIS 6.0中,http.sys注冊(cè)了所有IIS 6.0應(yīng)用,賦予每一個(gè)進(jìn)程一個(gè)句柄,IIS內(nèi)部利用這些句柄來(lái)標(biāo)識(shí)注冊(cè)的應(yīng)用程序要用到的一個(gè)或多個(gè)名稱空間。因此,當(dāng)http.sys接收到一個(gè)HTTP請(qǐng)求,它能夠很快地將請(qǐng)求從內(nèi)核模式的http.sys傳遞到正確的用戶模式的Web應(yīng)用。
http.sys驅(qū)動(dòng)程序還要執(zhí)行其他一些任務(wù),其中包括:
⑴ 將傳入的URL與各種長(zhǎng)度、格式方面的規(guī)則進(jìn)行比較。
⑵ 管理傳入請(qǐng)求的隊(duì)列。
⑶ 擔(dān)負(fù)著記錄IIS Web網(wǎng)站日志信息的任務(wù)(從而提高了記錄日志的性能)。
⑷ 實(shí)施帶寬限制策略以及支持TCP/IP級(jí)的管理。
⑸ 實(shí)現(xiàn)客戶證書(shū)請(qǐng)求服務(wù)(但不支持安全套接字層――SSL)。
新聞熱點(diǎn)
疑難解答
圖片精選