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