前些日,忽然想到要找一個比Apache性能更好的Web伺服器,曾記得在一個很大的BBS(現已被有關部門強制關閉)上看到說他們在AMD64的伺服器上運作一個64位的開源WebServer,速度比Apache快三倍,于是上Google去找,可惜,我一點都不記得那個WebServer的名字了。
意外收獲是看到這麼一篇文章,讓我對以前不知道的一些Web伺服器有了一個大緻的了解!
摘要
有時候Apache給人的感覺是無處不在,每個人都在運作Apache,甚至包括它們的狗也運作有自己的Apache :)。但是即使如此,仍然有很多種其他的Web伺服器可供選擇。本文就對目前市場上主流Web伺服器進行全面的比較。
WEB伺服器
Apache 無處不在,可以運作在包括Linux、Soloris等多種系統平台之上。Apache在網絡市場是無可争議的領頭羊。幾乎在任何一本關于網絡管理的教程中關于Web伺服器内容讨論的都是Apache。當然選擇Apache是由很多非常充足的原因的,畢竟一千六百萬使用者(根據Netcraft調查報告的統計資料)的選擇不大可能是錯誤的。但是也沒有必要一定去跟随潮流。Web服務也許要多樣性,GNU/Linux的哲學就是更據自己的需要和實際情況選擇适合自己的工具。
也許你的選擇更多的注重于速度和可靠性,而不是嘩衆取寵。也許你僅僅是希望尋找一個幹淨、易于配置的web伺服器。不管你的選擇是什麼,總是有很多的軟體可以滿足需求。在本文中,我們将對多種web伺服器進行分析比較,提供給使用者選擇最适合自己的Web伺服器的依據。
編寫一個基本的web伺服器是非常簡單的,僅僅需要監聽合适的端口,建立連接配接,發送資料。編寫這樣的伺服器一般和用戶端的開發一般總是相輔相成地發展的,兩者的誕生标志着WWW的開始。在九十年代浏覽器、web伺服器、HTML和HTTP協定都得到了快速的發展。随後伺服器變為由NCSA開發,相應的也變為 NCSA Web伺服器。浏覽器由Mosaic變為Netscape Navigator。NCSA目前仍然可以得到,雖然它不再被維護和繼續開發,但是仍然可以免費下載下傳其源代碼。其就是著名的web伺服器Apache的前身。
但是要進行這樣的聯系也需要一個用戶端、一個協定和一個網絡環境。但是當Internet不斷發展,web伺服器需要更多的功能以滿足用戶端對更多動态内容的需求。Apache已經發展出擴充子產品方式來滿足這種需求。但是當web服務成為很多商務應用都必須面對和采用的技術時,就出現了很多不同web伺服器以滿足這些不同的需求。可伸縮性,可靠性,速合和進階動态功能都是web伺服器應該具有的關鍵因素,特别是在電子商務應用環境中。易于配置和管理對于新手來說也同樣重要。
對于這些所有的特性來說并沒有任何一個特定伺服器能完全滿足需求,但是如果你對自己的web服務的需求有明确的認識,那麼在所有的web伺服器中必然有一個能滿足你的需求。
Apache 1.3.19
Apache 仍然是最偉大的全能選手,也許它有些過于龐大、曆史悠久,但是其優秀的性能和大量使用者群,它應該會有更好的發展。就它靈活性和豐富的特性功能而言, Apache相對于這裡測試的其他web伺服器來說可以說是web伺服器的标準。除非你的在過去的四年裡與這個世界相隔離,否則一定會看到大量的新聞文章歡呼Apache的成功,并将其作為開放源碼成功的典範。Apache并不是采用GPL版權聲明,而是采用自己的Apache Server版權聲明,其強調自由地使用源代碼。Apache同樣以"更新檔伺服器"而聞名,主要是因為早期Apache的開發是通過對NCSA的 httpd代碼添加更新檔程式來進行的。Apache被看做是"更新檔伺服器"還因為它具有子產品化特性,該特性實作了Apache的靈活性和可擴充性,而且開發者可以利用該特性很容易地添加第三方功能子產品,通過子產品開發人員可以添加任何功能,子產品是很多内容管理系統的功能基礎,如Midgard,Zope等。
幾乎所有的Linux釋出都安裝Apache作為預設配置。SuSE 7.1甚至預安裝有包括各種進階子產品選項的Apache,如PHP3,mod_perl和LDAP等等。使用者會驚奇地發現系統安裝成功就會有一個功能強大的web伺服器可供選擇。雖然安裝Apache并不是非常簡單,但是如果有具有新的特性或安全更新檔的Apache釋出,則下載下傳源代碼包并編譯新的 Apache是值得的。Apache不但具有龐大的使用者群基礎,并且有豐富的配置使用文檔。
Apache的主配置檔案為純文字格式的 httpd.conf,随着Apache版本的發展,其他一些配置檔案則逐漸消亡,趨向于使用單一的配置檔案httpd.conf來存放所有的配置指令,如客戶通路資訊、記錄認證資訊和虛拟伺服器等等。Apache配置選項采用的是指令模式,配置指令設定各種參數的值,例如:DocumentRoot設定伺服器web頁面的根目錄。你也可以靈活地設定多個基于IP或基于域名的虛拟Web伺服器,這些web虛拟伺服器可以各自定義獨立的 DocumentRoot配置指令。而LoadModule指令則用來指定加載不同的子產品來實作對Apache伺服器功能的擴充。這些新功能大多是提供伺服器端對腳本技術的支援,比如Perl、PHP等。Apache結合使用ApacheJServ可以實作對Java servlets及JSP的支援。
Apache的很多子產品實作安全方面的防護:如mod_auth提供對對伺服器上資料進行适當的保護,而SSL子產品則用來保護伺服器和用戶端之間的通信安全。
對于大多數使用者來說,手工編輯冗長的httpd.conf檔案顯得枯燥且易出錯。幸運的是Redhat中的Linuxconf和webmin都提供了非常完善的Apache配置模版。Aapche的GUI項目同樣提供了Comanche和Mohawk來實作對Apache圖形方式配置和管理。這些工具都大大減少了管理和配置Apache的難度,但是對httpd.conf一定了解對于配置高性能伺服器來說是非常重要的。
很多地方都聲明 Apache并不是最快的web伺服器,Apache的開發者的确是沒有過多地考慮其開發一個超快的web伺服器。而功能和穩定性則是考慮更多的因素。然而Apache在很多負載很大的站點中運作非常正常,并沒有得到過多的關于性能的抱怨。在我們使用webstone進行性能測試中,發現Apache的吞吐量位居第一,并且出錯最少。在測試中雖然Apache的可擴充性不知最強,但是仍然是提供了如此多特性的伺服器中速度最快的。
Zeus Webserver3.3.8 伺服器
Zeus 是一個商業化的web伺服器産品,最近它成為很多業界媒體中的頭條新聞,因為有消息宣稱Zeus伺服器的性能在2.4核心+SMP環境下相對于2.2.x 核心環境下性能提升了85%之多。速度永遠是Zeus伺服器的賣點。常常有評論說如果希望對Linux進行其作為伺服器作業系統的性能測試,那麼就運作 Zeus進行測試。
Zeus伺服器在SMP環境下有優秀的可伸縮性,并實作了常見的特性集合,如通路控制、動态内容産生和安全等。它具有健壯、內建有叢集支援的容錯和負載平衡等特色,是高端應用的很好的選擇。
Zeus伺服器的安裝和管理相對比較簡單。軟體是以tar.gz格式的包格式,安裝軟體隻需要解壓軟體包并運作一個安裝腳本,在性能适當的機器上安裝過程隻需要幾分鐘。而且Zeus伺服器安裝以後提供web方式的遠端管理功能。
對Zeus 的管理分為兩個部分:管理配置部分包含對管理伺服器本身的配置和通路;而web配置部分則包含對web伺服器的各方面特性的設定,從虛拟伺服器設定到叢集系統的管理及監控等等方面。預設情況下即使Zeus僅僅運作一個伺服器,其也被看做是一個虛拟伺服器。和Apache一樣,多個虛拟伺服器可以運作在同一台伺服器上,同樣虛拟伺服器可以是"硬"(基于IP)或"軟"(基于域名)虛拟伺服器。
管理伺服器的GUI界面非常易于使用,可以輕易生成複雜的多虛拟伺服器的配置。使用GUI,不同虛拟伺服器的設定可以互相克隆,可以建立叢集系統,可以實作類似.htaccess的子產品化配置。監控工具非常不錯,具有對每個虛拟伺服器和獨立的叢集節點的動态監控。
其功能可以與Apache匹敵,包含易于實作的SSL安全特性和其他有用的特性,如帶寬控制等等。Zeus宣稱支援PHP和Java Servlets。雖然易于使用的管理界面在某種程度上模糊了這些進階的配置特性。PHP4可以通過Zeus支援的API方式(NSAPI)來運作,也可以通過CGI發給你是來運作。但是很多使用者報告這種API方式存在穩定性問題。
高端應用伺服器的性能總是難以精确的測試,在負載相對較小情況下進行的測試,盡管很難給出在超負荷情況下伺服器的運作情況,仍然具有一定的實用價值。在我們的測試中,Zeus在伺服器的吞吐量和響應時間上性能卓越,和Apache一樣它出錯的機率也很少。Zeus具有其它伺服器所不具有的漂亮簡潔的GUI配置界面。據報道,Zeus在四個處理器的Linux 系統下運作性能良好。要建立高性能的Zeus伺服器,相對其它伺服器Zeus顯得略為有點繁瑣。
iPlanet Enterprise Edition 4.1
Netscape 公司為不同作業系統平台開發了多種WEB伺服器,但到最近它才釋出了自己在Linux下的産品。曾經非常流行的Netscape Enterprise Server現今被運作在Linux下的同類産品iPlanet Enterprise Edition所替代。iPlanet是SUN、Netscape和AOL公司聯合生産的WEB産品,它被力圖設計成高性能、跨平台的e- commerce産品。iPlanet和其它Netscape産品一樣具有很高的性能,而且iPlanet具有SUN公司Java的特性。
iPlanet 可以自由下載下傳評估版使用,也可以購買正式版本。因為在壓縮包中包含Java的運作環境JRE,是以iPlanet的壓縮包相對較大。壓縮包被解壓後,一個基于shell的簡單安裝工具可以幫助使用者完成Administration伺服器和Web伺服器的安裝。所有關于安裝的資訊都在這個時候輸入,當然你也可以選擇安裝的選項,如選擇安裝Java元件或者LDAP目錄,以便以後利用LDAP管理使用者群組。
就像現今流行的那樣, iPlanet也允許以浏覽器方式管理和配置。Administration伺服器提供了全面的管理和監測功能,利用它可以重新配置 Administration伺服器和Web伺服器。在叢集節點iPlanet伺服器環境中,可以在一個Administration伺服器中利用群集資料庫管理它們。
iPlanet的多層菜單結構展現了iPlanet豐富的功能,利用菜單選項可以實作WEB伺服器的所有管理。 iPlanet具有非常有用的線上幫助文檔和完整的SSL加密機制,這些特性保證使用者登陸和現場檢測的安全性。iPlanet允許配置基于IP和名字的虛拟伺服器。
現在WEB伺服器和WEB應用程式伺服器之間的界限變得越來越模糊,iPlanet象其它專業WEB伺服器一樣也支援 JAVA API,以便提高自己的性能。Enterprise Edition 4.1本身内置JRE,可以和大多數的資料庫互聯,它也支援JSP 1.1的API、Serverlets 2.2的API和Livewire。它擁有功能強大的軟體包,其功能遠遠超過了動态腳本語言。Enterprise Edition 4.1同時也支援傳統的腳本方式,如CGI、NSAPI,因而可以沒有任何問題、友善的從其它産品遷移到iPlanet。
iPlanet 具有現今高性能WEB伺服器的特性,相對其它WEB伺服器iPlanet還提供更多的JAVA功能。在WebStone環境中測試,iPlanet的性能非常良好。雖然iPlanet有時會因伺服器端未能響應用戶端的請求而在用戶端産生許多錯誤,但是它的吞吐量和響應時間性能卓越。作為一個昂貴的WEB伺服器産品,希望能看到以WebStone作為測試基準的更多的測試結果。如果你在尋找能夠運作标準Java API,并且在Java API環境下運作速度良好的WEB伺服器産品,iPlanet當是你的首選。
AOLserver 3.3.1
AOLserver 是一個多線程、可更新和擴充的WEB伺服器。AOLserver伺服器使用簡單而且功能強大的Tcl作為其内嵌式的腳本語言和伺服器端的API。就像名字所表明的那樣,AOLserver在AOL公司的線上服務中得到了廣泛應用,随着AOL公司本身的發展,AOLserver也增添了更多的特性,其速度也得到了顯著提高。和其它大公司一樣,AOL公司也公布了AOLserver的所有源代碼。該源代碼遵循AOL公司自己的AOLserver版權聲明,同時 AOL公司也從此種開放式開發模型中獲益。
AOLserver的研究始于1994年,當時它作為完整的WEB釋出系統的一部分進行開發。在該WEB釋出系統中内嵌了WEB伺服器的WYSIWYG網頁編輯器,該網頁編輯器強調内容變化的便利性和内容更新的快捷性。恰如早期的HTML和WWW 網一樣,WEB釋出系統被設計成一個完整的網頁編輯系統。随着時間的推移,AOL公司的網頁編輯器已經不複存在,但是由于Tcl腳本語言的出現和它對動态網頁的支援,AOLserver卻生存了下來。
和Apache相比,AOLserver也支援源代碼公開、性能也非常優異,它們都可以通過子產品方式添加新的功能,但是AOLserver卻支援Tcl語言,而且以不同的方式和資料庫互連。AOLserver可以連接配接和使用背景的關系型資料庫(RDBMS),例如Oracle,PostgreSQL等。AOLserver在UNIX系統中作為單個程序運作,進而使得web伺服器可以共享資料庫連接配接,進而使得運作在AOLserver中的腳本語言擁有更高的速度。AOLserver的腳本語言也可以通過一個抽象層同時通路許多資料庫管理系統。
AOLserver可以免費從AOL的官方網址或者它的開發站點Sourceforge下載下傳。隻要把AOLserver的壓縮包解壓,就可以非常簡單的使用gmake編譯和安裝AOLserver伺服器、可選子產品、Tcl庫、工具軟體及其響應文檔。使用者可以使用 config.tcl配置AOLserver的環境。使用者也可以如Apache那樣,安裝和管理權限控制、CGI、SSL和資料庫連接配接等子產品。剛開始的時候,使用者可能無法完全清楚、正确的安裝和設定"軟"(基于域名)虛拟伺服器。AOLserver的文檔非常完整詳細,但是有點略微繁瑣。它包括了安裝、配置的方方面面和Tcl API的詳細說明。但是AOLserver并不支援基于HTTP 1.1的軟虛拟伺服器。
使用者可以在遠端利用類似Tclsh的子產品管理AOLserver,該子產品運作在系統的指定端口。一旦運作該子產品,通過Telnet方式連接配接、管理AOLserver或者利用監控子產品執行Tcl指令都是很簡單的事情了。
在許多測試環境下,AOLserver的表現并不能令人滿意。在WebStone環境測試AOLserver,會出現許多錯誤,還有相當多的客戶無法連接配接到 AOLserver伺服器。雖然以上的問題會使人認為AOLserver的性能很差,但是在負載相對較小情況下進行的測試結果并不能完全令人信服。
我們不能據此就認為AOLserver不值得一用,因為利用WebStone無法測試資料庫的連接配接速度等其它參數,因而以上的測試結果僅供參考。盡管AOLserver沒有簡潔的安裝和配置工具,但是對那些需要較快資料庫響應速度的客戶,還是推薦使用該類産品。
Roxen WebServer 2.1.31
當說到适應動态網頁内容這個問題時,我們又使用了子產品k化這個名詞。Roxen伺服器使用了一個伺服器端的語言Pike,利用Pike既可以為Roxen開發全新的子產品,也可以嵌入到Roxen系統中。Pike是解釋性語言,文法和C語言非常相似。因為Pike是在以前寫MUD遊戲的語言的基礎上發展起來的,因而它在安全認證方面非常出色。Pike無論從程式設計風格還是文法特點上都和C語言很接近,是以一個标準的C語言程式在很短的時間就可以改寫成Pike 程式。作為一個解釋語言,Pike當然比編譯性語言C的速度要慢,但是它的調試相對簡單而且開發周期也很短。在Roxen伺服器環境下,使用Pike語言生成動态網頁内容,速度會有所提高。
在Roxen中可以使用RXML語言生成動态網頁内容。RXML是函數形式的伺服器端XML腳本語言,它由Roxen伺服器解析并執行。Roxen使用HTML方式的标簽生成動态網頁,标簽可以由JAVA或者Pike生成。其實在Roxen伺服器環境中,幾乎所有的工作都可以使用Pike完成。
安裝Roxen非常的簡單,隻要使用下載下傳的shell腳本就可以友善的解壓所有必需的檔案,并且設定管理接口和Roxen伺服器本身。在安裝完Java2,Orcle和Sysbase特制的腳本語言和推薦使用的内置更新系統後,Roxen 的所有特點就會漸漸顯露出來,同時Roxen也會安裝Pike的解釋器和其它工具。
就象其它的WEB伺服器一樣,Roxen也允許使用基于浏覽器方式完成伺服器配置工作。這種配置方式擁有流行的、簡單的菜單系統,使用這些菜單可以設定系統的所有選項。Roxen中也有豐富的幫助檔案,這些檔案涵括了Roxen和Pike的方方面面。通過模闆或不使用模闆生成一個新的站點都可以配置"硬"(基于IP)虛拟伺服器。模闆就是Pike子產品的基本清單,利用這些模闆就可以設定Roxen的不同功能。任何站點或者伺服器必須設定和運作特定的子產品,并使用它們管理站點的内容。一個站點必須包括檔案系統子產品和目錄子產品。利用檔案系統子產品可以設定檔案的根目錄,目錄子產品則管理索引檔案和目錄清單。在Roxen系統中,使用者可以根據需要檢查每個子產品的配置内容和安全性資訊。
在任何Roxen站點中都可以添加帶寬控制、代理、中轉服務等外來子產品及相容性、資料庫連接配接、Java、PHP4和Perl語言的支援子產品。
Roxen 管理伺服器允許同時登陸管理和WEB服務,并對其進行全面監控。Roxen還提供SSL安全機制。對于那些習慣Apache系統的使用者來說,安裝 Roxen可能得費些功夫。但是一旦習慣了使用Roxen-Pike,你就會覺得Roxen強大的功能也是頗令人喜歡的。
因為 Roxen允許使用外置子產品,是以它的性能受這些子產品的影響較大。在一個運作Roxen的高端康柏Proliant伺服器中連接配接500個用戶端,CPU的資源會全被占用,這樣其它任務的性能就會降低。雖然在WebStone環境的測試表明Roxen的大多數參數名額比Apache和Zeus的要低,但是 Roxen的總體性能還是令人滿意。那些希望把Roxen作為高負載伺服器使用的使用者,建議再進行相關的測試,或者選取其它的測試工具。雖然Roxen總體看起來很穩定,而且具有非常出色的Pike和令人心動的外置子產品功能,但是我們仍然建議使用者把Roxen看作一種有益的嘗試。
Jigsaw
你不可能再找到象Jigsaw那樣适應未來需要的WEB伺服器了。它由WWW組織(W3C)開發,W3C組織負責研究和規定網絡協定的标準(如HTTP)。 Jigsaw 剛開始被設想成HTTP 1.1的運作環境。它使用JAVA語言開發,是成功的面向對象、功能全面的伺服器。因為Jigsaw不受測試平台的限制,是以Jigsaw是一個具有活力的、擁有無限潛能的優秀WEB伺服器。
Jigsaw使用JAVA作為開發語言,因而它可以友善地在所有支援JAVA的平台上運作。通過使用子產品化的方法,Jigsaw具有更高的靈活度和可擴充性,可以動态的把子產品加入服務中。Jigsaw利用面向對象的方法設計和開發,因而所有資源包括CGI腳本和檔案都被視為對象,從此不難看出Jigsaw在未來的前景。
但是對那些具有傳統知識背景的人來說,這種新型體系結構可能會使人感到迷惑。安裝和運作基于JAVA的軟體總是需要一定的技巧,而且運作這種便攜式語言的性能仍值得懷疑。
一旦下載下傳了必需的JDK(或者SDK)和最新的Jigsaw版本,安裝Jigsaw将會非常的簡單。在Jigsaw伺服器中,幫助使用者設定Jigsaw環境、運作服務和編譯特性檔案的幫助檔案非常有限。但是以上的系統設定并不是很難,使用者可以在幾分鐘完成這項工作。本地或者遠端使用者都可以通過浏覽網頁擷取設定Jigsaw管理伺服器的詳細資訊。
JigAdmin擁有友好的圖形控制界面,利用它可以控制本地的Jigsaw管理伺服器。 JigAdmin有許多指令選項,其可控制的功能相當的複雜,使用者可以利用它管理Jigsaw管理伺服器和http伺服器。JigAdmin使用不同的樹型結構代表doc space,indexers,properties和realm等的相關内容。doc space很明顯是關于JigAdmin的目錄和檔案結構。properties指代的是servlet和loggind等的服務特性。realm和 indexers則對使用者不透明。直覺的了解這些資源的意義是很不現實的。即使你對面向對象結構不太熟悉,仍很有必要全面的閱讀JigAdmin的文檔,因為JigAdmin中的很多概念難以掌握。
JigAdmin的文檔服務強調兩個不同的處理階段:索引階段和服務階段。索引階段為所使用的文檔生成資源,以便減輕服務階段的壓力。資源是了解Jigsaw的關鍵,通過資源編輯器管理資源是展現JigAdmin強大功能的關鍵。 Jigsaw把資源作為對象和外界進行互動。這些資源可以是原始對象,例如文本或者圖形檔案,或者生成的對象如servelet、CGI腳本和過濾的資源等。一旦你熟悉了Jigsaw的這些核心概念後,你就感受到Jigsaw的強大功能。Jigsaw的這些特性使得它在動态腳本處理方面比其它同類産品更為出色,但其的學習過程也略為艱難。Jigsaw所有的特性和概念都來源于把網際網路看作一個整體環境,而這就使得Jigsaw展現了最新的技術和标準。
和Apache和NCSA HTTPd相比,在某些情況下Jigsaw具有很好的性能。但不幸的是我們無法用WebStone去測試和評估Jigsaw的性能。即使和很少的 Client機連接配接,運作Jigsaw的伺服器就會因為過載而無法再傳回測試結果。
很少有使用者會把Jigsaw作為成熟的産品使用,但是通過安裝和使用Jigsaw可以使我們了解HTTP-NG(下一代)的WEB伺服器産品。安裝Jigsaw在備用的伺服器上,體驗未來産品在協作環境中運作情況仍不失為一個好的方法。
總結
雖然本篇文章的目的不是動搖Apache在WEB伺服器市場的統治地位,但是這種改變的趨勢是無法阻擋的。不幸的是Apache仍然占據了市場的大部份額,多數Linux廠商和媒介機構都推薦使用Apache産品。Apache的GUI管理工具外觀看起來非常美觀,但是如果使用它去管理結構複雜的站點,這對眼睛和大腦來說都是項複雜的工作。使用這些工具也意味着你不得不運作那些管理伺服器中并不需要的服務。
WebStone環境的測試資料表明,在吞吐量、客戶連接配接數和出錯率方面,Apache比其它産品性能優異。Apache和Zenus在伺服器的響應時間上都非常出色,而且都為客戶提供了成熟的高端解決方案,但是不可否認Zenus在SMP方面的優勢。
選擇WEB伺服器時,伺服器對動态腳本語言、API的支援和資料庫連接配接的性能都是非常重要而且值得考慮的内容。如果你對伺服器性能要求不是很嚴格的話,選擇 AOLserver的Tcl或者RoXen的Pike和RXML也不失為一個好的辦法。對那些尋求可擴充架構WEB伺服器的使用者來說,Roxen伺服器值得一試。