有哪些輕量級web伺服器?

比如tomcat


Apache Tomcat

nginx news

「輕量級」 Web 伺服器,例如 lighthttpd、 litespeed 和 mongrel,可以為項目帶來很多的好處。本文調查這種可能性,並展示這些 Web 伺服器的適用性。

一個 Web 伺服器需要哪些東西?

第一個重要的方面是清楚地理解所調查的領域(請參閱 參考資料,以了解更詳細的信息)。終端用戶在 Internet 上的基本動作就是 「進入一個 Web 頁面」。從大處講,這牽涉到兩個應用程序之間的協作:

  • 一個 Web 瀏覽器,例如 Firefox 或 Internet Explorer,用於請求一個特定的頁面,並且以人類可讀的方式顯示從另一個應用程序那裡收到的內容。
  • 一個 Web 伺服器,通常是在遠程機器上,負責對頁面請求作出響應,返回 HTML 編碼的或類似的數據流。

所有 Web 用戶直接與瀏覽器交互,因此他們的選擇和分析相應地有些狂熱。而伺服器只對站點的技術人員可見。根據 Netcraft 最近的調查,雖然存在很多不同的 Web 伺服器,但是其中兩種 Web 伺服器就佔據了 90% 的份額,這兩種 Web 伺服器是 Apache 和 Internet Information Server (IIS)。它們都是經過高度錘鍊的產品,並且聲稱不僅具有廣泛的內在技術特性,而且有很多配套的書籍、增件、顧問、提供商等。那麼,它們是否還有值得改造的地方呢?

答案是肯定的。評價一個 Web 伺服器的重要指標有:

  • 性能:對請求作出響應的速度有多快?
  • 可伸縮性:當很多用戶同時訪問它時,伺服器還能繼續可靠地運行嗎?
  • 安全性:伺服器是否只執行它應該執行的操作。它在認證用戶和加密傳輸方面提供了怎樣的支持?它的使用是否使附近的應用程序或主機變得更易受攻擊?
  • 可靠性:伺服器的失效模式和故障發生率如何?
  • 標準遵從性:伺服器遵從相關的 RFC 嗎?
  • 靈活性:是否可以對伺服器進行調優,以支持較重的請求負載、需要計算的動態頁面或者代價不菲的認證等等?
  • 平台需求:該伺服器可用於哪些平台?它是否有特定的硬體需求?
  • 易管理性:伺服器是否易於設置和維護?它是否與日誌記錄、審計、成本計算等組織標準兼容?

Apache 和 IIS 不能同時在那麼多的標準方面做到最好。理論上講,顯然那些定向的產品至少能在以上的一至兩個方面超越市場領頭產品。

關於輕量級 Web 伺服器的一件有趣的、值得調查的事情是,它們之間的競爭遠遠不止是理論上的:仔細研究表明,它們有很多 東西可以提供,並且即使在很多常見的情況下,它們相對於 Apache 和 IIS 也堅持了自己的風格。雖然可以合理地認為市場領頭產品已經經過了小心的優化,從而能夠有效地在性能(舉個例子)方面避免被擊敗,但是很多小型的競爭對手因為只提供簡單的靜態 Web 頁面服務,速度反而更快。當使用這些 Web 伺服器運行測試時,您會感覺好像是在賽道上駕駛一輛 go-kart 小車,不知不覺竟然超過了 Porsche 和 Viper 車。這還不是全部:有時候,輕量級 Web 伺服器可作為那些大哥級伺服器的有效補充,而不只是與它們競爭。即使您知道自己將使用 Apache,有時候通過將它與一個輕量級夥伴搭檔,反而可以最大限度地利用它。最好的解決方案有時候需要兩個或更多 Web 伺服器的協作。

回頁首

Web 服務的輕巧性

本調查中重點關注的 「輕巧性」 實際上是一種主觀質量,就像 「藝術」 或 「風格」。它通常意味著簡單、易於安裝、流線化、要求低和健壯 —— 比 Apache 和 IIS 更小、更簡單,當然,在試圖滿足大量市場的過程中,它們已經變得異常複雜。出於這個目的,雖然 Java Web Server、AOLserver 和 Zeus 擁有迷人的可移植性和性能優勢,但是它們的複雜性和大小使其不得不被拒之門外。

輕量級 Web 伺服器可以適用於市場領頭產品和其他 「重量級」 伺服器無法勝任的情況。例如,整個伺服器可以打包在一個文件中。這意味著開發人員可以方便地攜帶生產環境所需的所有工具。即使在生產伺服器上運行的是 Apache,也仍然可以在賓館的房間里,藉助只需數秒鐘就可以安裝完畢的輕量級 Web 伺服器以嘗試新想法。而且,由於輕量級 Web 伺服器要求很低,因此可以在那些無法負擔 IIS 的主機上順暢地運行。

單文件打包

單文件打包

Apache 需要小心地安裝散布在多個目錄中的很多文件。與之截然不同的是,下面的 Web 伺服器卻打包在一個可執行文件中。我的一個僱主 Phaseit 的專長是部署和打包,我們能使 Apache 的安裝看上去比平常更簡單一些。但是即使我們做得最好,Apache 或 IIS 與輕量級 Web 伺服器在 「空間佔用」 方面也仍然有很大的差異:前者要佔用大量的空間。

小的、輕量級的 Web 伺服器還可以在小功率的主機上良好地運行。在我們的公司(Phaseit —— 見 側欄)中,我們在遠程的、條件欠佳或配置較低的環境中的工業計算機上運行專用的 硬體。在這些情況下,能夠通過一個對處理能力或磁碟空間要求很低的應用程序來提供 Web 頁面是一個很大的優勢。這意味著我們的機器可以避免 Apache 的開發和處理能力所帶來的開銷,構建基於 Web 的管理控制台。

從某種程度上講,幾乎所有輕量級 Web 伺服器都是開放源碼的。如果我們需要某一款 Web 伺服器所特有的行為,那麼下面概述的一些 Web 伺服器都非常小巧,易於理解,也易於增強,只有兩個例外。這些 Web 伺服器為嵌入 Web 服務的項目提供極好的原始材料,不管這些 Web 服務是在特殊的硬體中,還是在為在通用計算機上運行而設計的特定應用程序中。它們還廣泛用於具有傳統外觀的 Web 站點:

  • YouTube 依靠 lighttpd 快速交付歸檔的內容,例如視頻;
  • cdServe 運行 「German Woodworking Machinery and Tools」 CD;
  • LiteSpeed 宣揚它在 twitter、funnyoride.com、airliners.com、WordPress.com、fanfiction.com、SlashGear、Cr??er un forum gratuit 和其他著名 Web 站點上擔任的角色;
  • OpenSUSE、RubyOnRails、MarkaBoo 和其他一些著名站點依賴於 Mongrel;
  • http://demon.net、http://bluelight.com、http://mtv.com、The Drudge Report、http://garfield.com 等站點則使用 thttpd;
  • 等等。

下面的例子說明了開發人員使用輕量級伺服器的輕巧性:在我們公司,我們採用專門的硬體提供辦公室電話解決方案。它基於定製的、以傳統的 Linux? 應用程序的形式運行的軟體。只需一個附加文件和一點 init.d 配置,很容易添加一個強大的 「Web 控制台」,該 Web 控制台能提供硬體和軟體的管理界面。 終端用戶可以從任何瀏覽器中監視和配置他們的計算機,而不必安排專門的硬體連接或解決使用 「垂直」 硬體時常見的其他複雜性。

面向服務架構(SOA)被認為難以使用。在我們的經驗中,SOA 至少有一部分這方面的缺點阻礙了 Web 服務的使用。我們利用輕量級 Web 服務來設置快速的 SOA,以進行演示。

輕量級伺服器甚至可以用於生產數據中心,包括前面列出的 high-profile 站點。性能非常高的站點會將操作分開,從而最大限度地利用緩存、代理等技術。例如,一個基於 Apache 的站點可能採用一種這樣的架構:通過小型的 Web 伺服器從專用的文件系統提供緩慢變化的圖片。終端用戶看到的結果實際上是 Apache 和一個或多個輔助 Web 伺服器通過協作得到的輸出,它們各自擔任自己擅長的角色。這樣的安排可以以非常低的計算成本提供非常 快的結果。

回頁首

手段和目的

雖然輕量級 Web 伺服器有很多共同之處,但是各有各的不同。大多數輕量級 Web 伺服器是用 C 編寫的,但是實踐證明,有些其他實現語言也可以成功地用於實現伺服器,對此我已經做了實驗,這些語言包括 Erlang、Java、Lisp、Lua、Perl、Python 和 Tcl。如果其中有您喜歡的語言,那麼也許可以找到適合您的 Web 伺服器。

由於很多特定的原因,您可能會將目光投向某種 「不常見」 的語言:

  • 教學:使用輕量級 Web 伺服器來制定一個重要、但是並不太大的目標。這是獲得使用某種語言的經驗的好方法。
  • 雖然用 C 編寫的輕量級 Web 伺服器大小為 10-50 KB,更高級的語言有 100 KB 到數 MB 的運行時,但整個 Web 伺服器的源文件可能只佔幾千個位元組。這種 Web 伺服器佔用的空間很小,因此比 Apache 更易於與技術夥伴共享。
  • 更高級的語言可以使實驗更吸引人 —— 例如,添加一個新的 HTTP/1.1 特性可能只需幾行源代碼。這些輕量級伺服器是非常方便的實驗材料。
  • 將 HTTP 伺服器添加到已有的、用高級語言編寫的應用程序中只需增加幾行源代碼。

Athana 可以作為這些主題的例子。它是用 Python 編寫的 Web 伺服器。它支持 HTTP 多部分(上傳)、會話、 cookie 等。從 0.2.1 版開始,Athana 一直被編寫在一個單獨的、精心組織的源文件中。

如前所述,不同的輕量級 Web 伺服器有著不同的優點,它們或多或少獨立於編程語言。所有輕量級 Web 伺服器都比 Apache 更小、更易於配置。與 Apache 相比,有些輕量級 Web 伺服器更快,有些則快得多。有些則強調安全性、重負載下的從容性、可擴展性或者內存佔有量。在任何情況下,都可以以一種不適用於 Apache 的方式徹底地理解這些伺服器。

哪些特定的產品使這些可能性成為現實?即使只留意 「輕量級」 伺服器,面對的也是一個很大的難於管理的產品集合。不過可以將它們按子類來劃分:超輕型、關注安全型、支持特定語言型等等。

我特別喜歡其中的超輕型 Web 伺服器,它們比 Apache 小得多。如此小的應用程序可以直接記住,系統地、嚴密地加以考慮,以證明 它們的安全性或可伸縮性。小型 Web 伺服器包括:

  • Cheetah Server,用不到一千行的 C 代碼編寫而成。
  • DustMote,一個非常 小的 Web 伺服器,用一個大約 3000 位元組的 Tcl 源文件實現。
  • fnord,大小取決於平台和配置,不超過 20K。雖然很小,但是它支持虛擬主機、CGI 和 keep-alive。
  • ihttpd,使用不到 800 行的 C 代碼,包括 CGI,並通過 inetd 提供頁面。
  • im-httpd,非常小的伺服器 —— 只有大約 7 KB,鏈接到 glibc。而且它也非常快。
  • mattows,支持 CGI,只有 600 行 C 代碼。
  • Scrinchy,雖然很小,不到 30KB,但是支持多種腳本編製語言,包括一種特殊用途的、基於棧的 Sy 腳本語言。
  • ZWS 演示了一個即使是使用 500 多行帶足夠注釋的 zsh (!) 編寫的應用程序 —— 在這裡是一個 HTTP 0.9+ 伺服器 —— 也可以有多強大。

體積小並不妨礙這些伺服器被正式使用。例如,fnord 可以處理數千個同時進行的連接。

也許輕量級作為一個類別最令人印象深刻的成就是高性能伺服器:

  • cghttpd 是一個小型 Web 伺服器,它被理解為使用 2.6 系列內核中可用的非同步功能的一個試驗品。
  • darkhttpd 是一個快速的、單線程的 HTTP/1.1 伺服器。
  • Gatling 是為高性能設計的。它的特性包括 FTP、IPv6、虛擬主機、CGI 等。
  • Kernux 是一個 Linux 內核模塊,它實現了一個 HTTP 守護進程。
  • lighttpd 是使用率排名第五的 Web 伺服器(排名還在上升)。它為很多同時進行的連接進行了優化:「典型的場景是使用 lighttpd 作為一個下載(off-load)伺服器,以提供靜態內容……」
  • LiteSpeed Web Server 是一款輕量級商業 Web 伺服器,強調性能和安全性。 LiteSpeed Technologies 公司宣傳為靜態內容提速了 6 倍,在解釋頁面方面也有一定的提高。
  • Miniature JWS,也稱 tjws,它是基於 Java 的 Web 伺服器,可以處理 servlet、JSP 和數千個並發連接,而大小只有 77 KB。它的作者聲稱它 「比 Apache 2.x 快 10%」。
  • Yaws 是用 Erlang 編寫的一款高性能 HTTP/1.1 伺服器。

有些 Web 伺服器被實現為類或庫,以便嵌入 到較大的應用程序中。 在這些 Web 伺服器當中,我發現特別有趣的有:

  • EHS —— 「嵌入式 HTTP 伺服器」,被設計為一個 C++ 類,用於嵌入到較大的 C++ 應用程序;還有
  • Embedded TCL Web Server,它是一個很普通的 Web 伺服器,支持 SSL 和 Basic Authentication,速度非常快 —— 其作者使它至少與 lighthttpd 和 AOLserver 一樣快。它是用不到 100 行 Tcl 編寫的。

Python 是幾種適合不尋常環境的 Web 伺服器的實現語言,這些 Web 伺服器包括:

  • cdServer 是一個小型的、用 Python 編寫的 HTTP 伺服器,它 「被設計用來提供來自 CD-ROM 的(靜態)內容」 。它在提供動態內容方面能力有限。我們有幾個涉及不受影響的 「live CDs」 的項目,在這些項目中像 cdServer 之類的工具很關鍵。
  • edna,一款智能的用 Python 編寫的 MP3 伺服器,它是用 HTTP 實現的。

還有其他一些用 Perl 和其他不出名的語言編寫的輕量級 Web 伺服器:

  • Camlserv,用 ocaml 編寫的一個完整的 Web 伺服器,目標是 「高度互動式的 Web 頁面」。它由幾千行 ocaml 編寫而成,其中大部分代碼都與 MySQL 和 HTML 的特殊處理有關。
  • dhttpd 用和 Apache 相同的格式記錄訪問。它支持 CGI,並具有內建的 Perl 解釋器、虛擬主機、IPv6、帶寬管理和安全性等方面的特性。
  • DNHTTPD 是用 Perl 編寫的,用於 UNIX?。它支持虛擬主機、SSL 連接、CGI 等。
  • Jellybean 是用 Perl 編寫的基於 HTTP 的 Perl Object Server。
  • lns.http 是一個 Common LISP HTTP/1.1 Web 框架。
  • Mongrel 是用 Ruby 編寫的、用於 HTTP 的一個庫和伺服器。
  • Nanoweb 是用 PHP 編寫的一款快速、健壯的 Web 伺服器。它宣稱具有豐富的特性,包括完全遵從 HTTP/1.1、訪問控制、身份驗證、虛擬主機、SSL 兼容性等。
  • Naridesh 是用 Perl 編寫的 Web 伺服器。
  • OpenAngel 是用 Perl 編寫的。它強調的重點是安全性。
  • Xavante 是用 Lua 編寫的 HTTP/1.1 Web 伺服器。
  • XSP 是用 C# 編寫的,用於運行 ASP.NET。

有時候您可能需要其他一些用 C 編寫的、具有不常見的次要優勢的輕量級 Web 伺服器:

  • ABYSS 可以在 UNIX 和 Win32 之間移植,其 「目的是成為完全遵從 HTTP/1.1 的 Web 伺服器」。它佔用的內存很少。
  • Anti-Web HTTPD(也稱 「Anti-Web」、「awhttpd」 和 「AW」)是一款單進程、無線程、支持 CGI 的伺服器,它強調安全性和簡單性。
  • MHTTPD 支持從外部文件或 LDAP 伺服器進行的 MHTTPD Basic Authentication。
  • mini-httpd 可以在一個系統線程中處理多個並發請求,但是在主機上佔用的內存或 CPU 很少。
  • Naken Web 類似於很多其他的輕量級伺服器 —— 它支持 Basic Authentication、靜態內容等 —— 但是它的作者將它設計為用於 Webcam 操作,並且在 Gumstix、WRT54GL、OpenWrt 和其他新的平台上運行。
  • Null httpd 是一款多線程的、簡單的、可移植的 Web 伺服器。
  • Seminole 是一款商業 Web 伺服器,內存需求較小,功能較多。
  • thttpd throttle,支持 chroot、 Basic Authentication 等。

from :輕量級 Web 伺服器


不知道你的輕量級是什麼意思,我倒是知道一個開源的,非常輕量級,只要一個java文件,你可以非常輕鬆地把它嵌入到你的應用程序中。

項目的地址:

NanoHttpd/nanohttpd · GitHub

項目簡介:

Nanohttpd by NanoHttpd


以前一直用 python 自帶的功能調試靜態站點 (python -m http.server),但是感覺很慢,而且點鏈接點快了會報錯。最近用 Go 自己寫了一個:m3ng9i/ran · GitHub , 支持列出目錄下的文件、gzip 壓縮、digest 身份認證、自定義 404 文件。

自己用自己寫的伺服器感覺很好,而且想要什麼功能可以自己加。


Tornado


nginx

lighthttp

apache


推薦閱讀:

長期開機的機器是怎麼會那麼耐用的?
浪潮公司為什麼是從濟南發展起來的?
使用Erlang實現http server是否更有優勢?
為何 Boost 的 Asio 要使用 Proactor 模式實現?

TAG:伺服器 | 計算機網路 | 輕量級 |