長期以來,Apache和Microsoft的IIS一直統(tǒng)治著Web服務(wù)器市場最大的份額。雖然在Netcraft和Security Space每月的調(diào)查中,Apache是不容置疑的獲勝者,但I(xiàn)IS卻在財(cái)富1000企業(yè)中占據(jù)著支配性的優(yōu)勢。顯然,兩者都是不錯的選擇,但每一種服務(wù)器都有各自的優(yōu)點(diǎn)和缺點(diǎn)。
鑒于Apache 2.0正式版已經(jīng)于2002年中期發(fā)布,IIS 6.0也在今年上半年正式發(fā)行,現(xiàn)在應(yīng)該是比較這兩種服務(wù)器、了解它們各自特點(diǎn)和適用對象的時候了。
一、基本面
從Windows NT 4.0時代開始,IIS就是Windows服務(wù)器操作系統(tǒng)的一個可選組件。當(dāng)時,IIS還只是一個僅有基本功能的Web服務(wù)器,版本是3.0。隨后,就在Windows NT 4.0正式發(fā)行后不久,一個可選的升級補(bǔ)丁包帶來了IIS 4.0,IIS 4.0是第一個真正被當(dāng)作Web服務(wù)器平臺廣泛使用的IIS。
Windows 2000的服務(wù)器版、桌面版都帶有IIS 5.0,IIS 5.0的升級版即IIS 5.1則集成到了Windows XP中。但是,IIS 4和IIS 5之間的變化其實(shí)并不大。
Windows Server 2003引入了最新的IIS 6.0。和以前的版本相比,IIS 6.0幾乎已經(jīng)徹底改寫,它支持新型的執(zhí)行模式,具有更好的可管理性,而且性能也有了顯著的提高。
相比之下,Apache的歷史更豐富。Apache最初建立在httpd代碼的基礎(chǔ)上,一些人相信正是它啟動了最初的Web革命。直到2002年,Apache最主要的生產(chǎn)版本仍是1.3.x,它基本上是一個面向Unix的產(chǎn)品,但加入了許多開發(fā)技巧,使它能夠在許多其他操作系統(tǒng)上運(yùn)行,包括Windows系統(tǒng)。
Apache 2.0的正式版(即生產(chǎn)版)于2002年面市,新的版本引入了一個全新的執(zhí)行環(huán)境,它成功地分離了Apache系統(tǒng)的核心功能和支持、處理請求的系統(tǒng)。Apache 2.0廣泛支持各類操作系統(tǒng),包括所有版本的Windows、Linux、Unix以及Mac OS X,還有其他一些非主流的操作系統(tǒng),諸如BeOS和VMS。
二、執(zhí)行環(huán)境
IIS和Apache的運(yùn)行方式存在很大的差異,兩者各有許多優(yōu)點(diǎn)和缺點(diǎn)。IIS顯然只為Windows平臺設(shè)計(jì),只能用于Windows平臺,特別地,目前IIS 6.0唯一的運(yùn)行平臺只有Windows Server 2003。雖然IIS的這一特點(diǎn)限制了基于IIS的Web服務(wù)可能部署的平臺范圍,但同時也帶來一些優(yōu)勢,包括與宿主操作系統(tǒng)更深入地集成,便于通過大量標(biāo)準(zhǔn)的操作系統(tǒng)工具管理和控制Web服務(wù)器。
在IIS 6.0中,操作系統(tǒng)與Web服務(wù)器之間的集成比以往更深入了,原來接受和處理客戶請求的組件現(xiàn)在分離成了兩個組件,內(nèi)核模式的請求監(jiān)聽器http.sys監(jiān)聽并接受來自客戶端的請求,把請求放入一個或者多個請求隊(duì)列;隨后,IIS處理隊(duì)列中的請求,利用一個或多個工作進(jìn)程來控制各個請求和應(yīng)用程序的運(yùn)行。
由于分離了接收請求和處理請求的組件,即使工作進(jìn)程由于某種故障而不再運(yùn)行,Web服務(wù)器仍能接收請求;同時,這種分離也方便了對處理請求的工作進(jìn)程的控制。因此,出現(xiàn)應(yīng)用程序故障或外部故障時,管理員(或者服務(wù)器,自動執(zhí)行)能夠回收請求并予以恢復(fù)――如果這種情況發(fā)生在以前,那就需要關(guān)閉/重新啟動IIS、Web服務(wù),甚至某些極端情況下,需要重新啟動整個服務(wù)器。
與Apache以前的版本相比,Apache 2.0已經(jīng)作了重大的修改。其中最重要的更動之一是,這個Web服務(wù)器現(xiàn)在已經(jīng)可以直接在許多平臺(包括Windows)上運(yùn)行了。重新設(shè)計(jì)之后,Apache 2.0對范圍廣泛的操作系統(tǒng)提供了更高效的支持,例如包含了專門面向Unix和Windows的執(zhí)行模塊,使得Web服務(wù)器能夠更充分地利用底層操作系統(tǒng)。
Apache 2.0系統(tǒng)的核心是一個APR(Apache Portable Runtime,即Apache可移植運(yùn)行環(huán)境),它使得Apache內(nèi)核能夠在幾乎所有帶有C編譯器的系統(tǒng)上運(yùn)行。一系列多處理器模塊(multi-processor module,簡稱MPM)擔(dān)負(fù)著實(shí)際接收和處理請求的任務(wù)。在Unix下,它可以是傳統(tǒng)的fork模式,也可以是新型的多線程模式――利用當(dāng)前大多數(shù)操作系統(tǒng)內(nèi)置的線程支持。例如在Windows下,它也可以使用多線程模式,從某些方面來看,類似IIS 6.0之中工作進(jìn)程使用的多線程模式。
| 特性 | IIS | Apache |
| 獨(dú)立的請求處理機(jī)制 | 是 | 是(有限) |
| MPM | 是 | 是 |
| 線程支持 | 是 | 是(在適當(dāng)?shù)牟僮飨到y(tǒng)上) |
三、動態(tài)組件
在IIS中,開發(fā)動態(tài)應(yīng)用的主要工具是ASP,ASP實(shí)際上是一種允許將代碼嵌入到HTML頁面的解決方案的統(tǒng)稱。服務(wù)器根據(jù)客戶端的請求解析ASP頁面,將ASP頁面生成的HTML結(jié)果發(fā)回到客戶端。ASP系統(tǒng)允許開發(fā)者使用各種編程語言,包括Visual Basic、VBScript、javascript、Java和C/C++,還有各種源代碼開放的編程語言,諸如Perl和Python。另外,IIS繼續(xù)支持傳統(tǒng)的CGI應(yīng)用開發(fā)方式,還有以ISAPI篩選器為特征的IIS特有的篩選、執(zhí)行系統(tǒng)。
Apache的設(shè)計(jì)目標(biāo)也是支持多種編程語言,或者通過CGI模式執(zhí)行,或者直接將語言解釋器嵌入到Apache環(huán)境然后以動態(tài)模塊調(diào)用的形式執(zhí)行,對于用PHP、Perl和Python之類語言編寫的動態(tài)組件,這種處理方式顯著地提到了性能。
這兩種系統(tǒng)都支持JSP模型,而且大多數(shù)JSP應(yīng)用程序只要很少的修改就可以在兩種平臺之間遷移。其他一些語言也相似,但效果各不相同,例如只要安裝了ChilliSoft ASP組件(www.chillisoft.com),Unix平臺也同樣能夠支持ASP。
當(dāng)前,Unix還不能支持的一項(xiàng)特性是Microsoft.NET環(huán)境。IIS 6.0和Windows Server 2003不僅大量地應(yīng)用了.NET框架技術(shù),而且已經(jīng)與.NET框架緊密結(jié)合。
| 特性 | IIS | Apache |
| ASP | 是 | 使用ChilliSoft ASP |
| CGI | 是 | 是 |
| Perl | 是 | 是 |
| Python | 是 | 是 |
| PHP | 是 | 是 |
| JSP | 是 | 是 |
| 集成.NET支持 | 是 | 否 |
四、安全和驗(yàn)證
IIS因其與操作系統(tǒng)的緊密結(jié)合而獲益良多,Windows中配置、管理和驗(yàn)證用戶的系統(tǒng)同時也為IIS服務(wù)器提供了安全和驗(yàn)證服務(wù),由于只需要管理一個安全系統(tǒng),管理負(fù)擔(dān)大大減輕。同時,在適當(dāng)?shù)呐渲孟?,用戶只要登錄到Windows,就可以同時通過Intranet自動登錄到IIS服務(wù)器上的應(yīng)用。
由于整個操作系統(tǒng)以及IIS服務(wù)器都使用同一個身份驗(yàn)證系統(tǒng),所以分配Web網(wǎng)站所在文件系統(tǒng)的訪問權(quán)限也很方便。例如,當(dāng)用戶登錄到Web應(yīng)用,他訪問網(wǎng)站各個目錄的權(quán)限也已經(jīng)由用戶和組的授權(quán)情況決定。
相比之下,Apache的安全和管理系統(tǒng)不象IIS那樣與操作系統(tǒng)緊密結(jié)合在一起。雖然有一些模塊和適配器能夠支持各種不同的驗(yàn)證和安全資源,包括活動目錄(Active Directory)、Unix密碼文件、LDAP服務(wù)器,但從整體上看,Apache服務(wù)器與它所支持的操作系統(tǒng)的分離程度比較大。例如,當(dāng)用戶身份用Unix密碼文件驗(yàn)證時,Apache仍會忽略底層文件系統(tǒng)上設(shè)置的文件權(quán)限。
從通信安全的角度來看,兩種Web服務(wù)器都支持SSL加密技術(shù),允許使用IPSec技術(shù)。
| 特性 | IIS | Apache |
| 安全登錄 | 是 | 是 |
| SSL | 是 | 是 |
| 基本驗(yàn)證 | 是 | 是 |
| 摘要驗(yàn)證 | 是 | 是 |
| LDAP驗(yàn)證 | 是 | 是,需要第三方模塊的支持 |
| 活動目錄驗(yàn)證 | 是 | 是,需要第三方模塊的支持 |
| Passport驗(yàn)證 | 是 | 否 |
五、性能
性能評測向來很困難,因?yàn)椴还艽u測的系統(tǒng)是多么相似,配置方面稍作改動,性能就可能發(fā)生極大地變化。雖然在同樣的硬件上一律采用默認(rèn)設(shè)置也能評出一個“優(yōu)勝者”,但這不能反映出被評測系統(tǒng)真正的性能。同樣地,我們還可以配置出這樣的一個IIS服務(wù)器和一個Apache服務(wù)器,或者使其具有優(yōu)異的性能,或者使其具有低劣的性能,但仍不能獲得真正有價值的性能評比結(jié)果。
因此,一種更好的辦法也許是分析各個系統(tǒng)的性能潛力。IIS集成了大量改善性能的特性,在多處理器系統(tǒng)上工作進(jìn)程模式顯著地提高了性能,ASP和ISAPI擴(kuò)展使得應(yīng)用程序能夠從處理請求的進(jìn)程直接運(yùn)行。另外,以內(nèi)核模式運(yùn)行的http.sys也能夠從緩沖區(qū)或磁盤將靜態(tài)內(nèi)容或簡單的動態(tài)內(nèi)容直接提供給客戶端,避免了將請求轉(zhuǎn)發(fā)給工作進(jìn)程的開銷。
Apache同樣也有類似的功能。Apache能夠緩沖許多信息,mod_perl和mod_php之類的工具使得動態(tài)頁面和模板頁面的執(zhí)行速度幾乎達(dá)到了靜態(tài)頁面的水平。這些模塊類似于IIS環(huán)境中的ASP和ISAPI篩選器,直接把解釋器嵌入到了Apache執(zhí)行環(huán)境之中,避免了調(diào)用外部應(yīng)用程序的開銷,極大地提高了性能。
| 特性 | IIS | Apache |
| 內(nèi)存緩沖 | 是 | 是 |
| 磁盤緩沖 | 是 | 否 |
| 內(nèi)建的執(zhí)行支持 | 是,需要合適的ISAPI篩選器 | 是,需要合適的模塊 |
| 帶緩沖的執(zhí)行支持 | 是,需要ASP/ASP.NET | 是,需要mod_perl等模塊 |
六、管理
兩種Web服務(wù)器系統(tǒng)在管理方面的差別很大。管理Apache的主要途徑是編輯文本格式的配置文件,雖然有許多命令行工具、Web工具和GUI界面的工具可供選用,但它們實(shí)際上都依賴于文本配置文件來更新配置信息。例如,Comanche就為Apache系統(tǒng)提供了一個完善的管理界面。gui.apache.org提供了各種工具的清單。
用文本文件提供配置信息有其優(yōu)點(diǎn),例如很容易在多臺機(jī)器之間實(shí)現(xiàn)配置信息共享,可以方便地將配置信息從一個文件復(fù)制到另一個配置文件。當(dāng)然缺點(diǎn)也有,例如配置文件比較容易損壞。如果不進(jìn)行“軟”重啟,Apache不能使用修改后的配置信息,所以在重新啟動Apache之前,管理員必須確保配置信息確實(shí)有效,這可以借助內(nèi)建的測試機(jī)制來完成。
相比之下,IIS提供的系統(tǒng)配置工具就要豐富多了。雖然底層的配置信息主要保存在XML格式的文本文件之中,但I(xiàn)IS允許管理員在系統(tǒng)運(yùn)行的時候修改配置和底層的文件。由于配置文件是XML格式,結(jié)構(gòu)要比普通文本文件嚴(yán)格得多,同時又有足夠的靈活性支持各種不同的配置需要。為便于遠(yuǎn)程支持,Windows Server 2003還集成了一個telnet服務(wù)器,使得管理員能夠利用各種命令行工具遠(yuǎn)程管理服務(wù)器。
在IIS眾多的配置編輯工具中,比較常用的包括一個微軟管理控制臺的管理單元,一個Web方式的管理系統(tǒng),還有添加、更新和配置各種組件的一組命令行工具。管理員可以隨時手工編輯XML文件,IIS服務(wù)器將立即自動反映出修改后的配置,不需要重新啟動。另外,XML配置文件也很容易移植,方便了多臺機(jī)器之間的配置信息共享。
IIS的MMC管理單元為網(wǎng)絡(luò)上的多臺服務(wù)器提供了一個一致的、分布式的管理界面,不過,在Apache這邊,Webmin之類基于Web的管理工具,或者Comanche之類的專用GUI工具,也具有同樣的功能。
| 特性 | IIS | Apache |
| 文本格式的配置文件 | 是,XML文件 | 是 |
| 命令行管理 | 是 | 有限 |
| 遠(yuǎn)程命令行管理接口 | 是 | 是 |
| 基于Web的管理 | 是 | 是,通過Webmin等工具 |
| 圖形用戶界面的管理工具 | 是 | 是,通過Comanche等工具。 |
七、可靠性
在比較IIS和Apache的過程中,可靠性也許是爭議最大的一個項(xiàng)目了。根據(jù)資料,兩種服務(wù)器最新版本之間的差異很小,在實(shí)驗(yàn)室里,一個Windows Server 2003系統(tǒng)從2003年1月開始運(yùn)行一個Web網(wǎng)站――到現(xiàn)在已經(jīng)有8個多月了,期間安裝了各種必要的更新軟件,但沒有重新啟動服務(wù)器;作為對比,旁邊的一個Apache/Solaris系統(tǒng)已經(jīng)運(yùn)行了335天,也沒有出現(xiàn)問題。
在IIS 6.0中,大部分的請求通常由工作進(jìn)程處理,IIS 6.0為工作進(jìn)程提供了大量的管理和控制機(jī)制。為了提高可靠性,IIS可以隔離各個應(yīng)用程序,讓應(yīng)用程序運(yùn)行在各自獨(dú)立的內(nèi)存和執(zhí)行空間之中,或者與其他應(yīng)用程序共享執(zhí)行空間。這意味著,如果一個應(yīng)用程序出了問題,最多只影響到當(dāng)前的工作進(jìn)程,但不會影響到其他工作進(jìn)程及其運(yùn)行的應(yīng)用程序,也不會影響到處理請求的內(nèi)核。
在進(jìn)程和線程管理方面,Apache的許多操作都是自動的,但內(nèi)存和應(yīng)用程序的隔離問題仍舊存在,尚未提出有效的解決辦法。Apache通過自動回收組件機(jī)制解決了一部分問題,即使某個組件出現(xiàn)了嚴(yán)重問題時內(nèi)核仍會繼續(xù)運(yùn)行。不過,有時仍不免出現(xiàn)必須重新啟動整個Apache服務(wù)器的情況。其中一個例子就是對Apache服務(wù)器本身進(jìn)行配置之時,一般都需要重新啟動。但是,對于IIS服務(wù)器上運(yùn)行的Web網(wǎng)站,絕大多數(shù)對服務(wù)器本身的更新和改進(jìn)不會影響用戶訪問,因?yàn)榕渲眯薷目梢栽诜?wù)器運(yùn)行的同時進(jìn)行。
| 特性 | IIS | Apache |
| 進(jìn)程/線程管理 | 是 | 是 |
| 隔離應(yīng)用程序 | 是 | 有限 |
| 運(yùn)行時修改配置 | 是 | 否 |
八、結(jié)束語
雖然這兩種服務(wù)器之間有著許多不同之處,但真正的選擇往往要根據(jù)企業(yè)的需要而定,有時甚至由個人的愛好和需要決定。例如,許多開發(fā)者偏愛使用Unix和Apache環(huán)境下的Perl,盡管Perl和Apache同樣可以在Windows上運(yùn)行,IIS也支持Perl,但這些因素仍舊不能影響這類開發(fā)者的選擇。
如果服務(wù)器管理問題是首要的考慮因素,IIS豐富的管理工具應(yīng)當(dāng)是最佳選擇,同時IIS在安全機(jī)制、活動目錄集成及其帶來的安全管理方面的優(yōu)勢也很重要。
當(dāng)然,部署費(fèi)用也是一個不可忽視的重要因素。Apache是完全免費(fèi)的,而且可以安裝到Linux之類的免費(fèi)操作系統(tǒng)上。IIS 6.0現(xiàn)在只能在Windows Server 2003上運(yùn)行。雖然Windows Server 2003的Web版要比標(biāo)準(zhǔn)版便宜許多,但與Apache相比就顯得很昂貴了――至少從表面上看是這樣的。
新聞熱點(diǎn)
疑難解答
圖片精選