Tin's Blog

          You are coming a long way, baby~Thinking, feeling, memory...

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            128 隨筆 :: 0 文章 :: 221 評論 :: 0 Trackbacks
          本文已經(jīng)發(fā)表于InfoQ中文站點(diǎn)(http://www.infoq.com/cn/news/2007/07/light-web-servers)

          IBM developerWorks網(wǎng)站上最近發(fā)布了一則Cameron Laird的關(guān)于輕量級Web服務(wù)器的文章, 里面列舉了很多的輕型的Web服務(wù)器實(shí)現(xiàn)和它們的特點(diǎn),Cameron還從自己的經(jīng)驗(yàn)出發(fā)總結(jié)了評價Web服務(wù)器的一些指標(biāo)。這篇文章目的在于擴(kuò)展我們在 Web應(yīng)用部署時的思路,讓我們重新思考Web應(yīng)用的架構(gòu)和部署方案。眾多的輕量級Web服務(wù)器其實(shí)見證了動態(tài)腳本語言實(shí)現(xiàn)Web應(yīng)用的火爆,給實(shí)現(xiàn) Web應(yīng)用提供了更多解決方案。

          輕量Web服務(wù)器這個概念關(guān)注“輕巧性”,這意味著簡單、易于安裝、流線化、要求低和健壯。這種“輕巧”主要是相對于目前市場占有率占優(yōu)的 Apache和IIS而言的,輕量Web服務(wù)器應(yīng)該更小更簡單,并且它們至少要有一些性能/特性超過這兩個產(chǎn)品(這樣它們才可能分得市場份額)。 Cameron這樣對比了“輕量”相比“重量”的一些優(yōu)勢

          輕量級Web服務(wù)器可以適用于市場領(lǐng)頭產(chǎn)品和其他“重量級”服務(wù)器無法勝任的情況。例如,整個服務(wù)器可以打包在一個文件中。這意 味著開發(fā)人員可以方便地?cái)y帶生產(chǎn)環(huán)境所需的所有工具。即使在生產(chǎn)服務(wù)器上運(yùn)行的是 Apache,也仍然可以在賓館的房間里,借助只需數(shù)秒鐘就可以安裝完畢的輕量級Web服務(wù)器以嘗試新想法。而且,由于輕量級Web服務(wù)器要求很低,因此 可以在那些無法負(fù)擔(dān)IIS的主機(jī)上順暢地運(yùn)行。

          我們關(guān)注一下目前的Web服務(wù)器占有率情況,Netcraft在它2007年7月的Web服務(wù)器調(diào)查中的服務(wù)器占有率數(shù)據(jù)如下:

          開發(fā)者 2007年6月 百分比 2007年7月 百分比 變更率
          Apache 65588298 53.76 66144734 52.65 -1.11
          Microsoft 38836030 31.83 41257913 32.84 1.01
          Google 4872765 3.99 5465538 4.35 0.36
          Sun 2273173 1.86 2245493 1.79 -0.07
          lighttpd 1470930 1.21 1471779 1.17 -0.04
          Zeus 480698 0.39 463449 0.37 -0.02

          其中Apache占有率最高,它是公認(rèn)的穩(wěn)定、性能優(yōu)良、開發(fā)者活躍的開源軟件產(chǎn)品。而Microsoft則受益于Windows平臺內(nèi)置的PWS 和IIS的優(yōu)勢及.NET平臺的市場占優(yōu)率,占有第二的位置。Sun則是由于歷史問題,它的iPlanet、SunONE和一并計(jì)算的Netscape- Communications產(chǎn)品還能躋身前4。后面的lighttpd則是輕量型Web容器的代表,已經(jīng)超過了老牌的商業(yè)Web服務(wù)器Zeus (ServerWatch給出了一個lighttpd市場占有率上升的分析),主要因?yàn)橐恍〢JAX項(xiàng)目和Ruby on Rails(以下簡稱RoR)的流行對它的廣泛部署起了推波助瀾的作用。

          輕量Web服務(wù)器除了lighttpd還有mongrel也經(jīng)常被提及,主要因?yàn)樗鼈兪荝oR項(xiàng)目的兩種主要部署方案。JavaEye的創(chuàng)始人Robbin Fan曾經(jīng)在它的blog中對比過RoR的這兩種部署方案

          (RoR項(xiàng)目)用fcgi方式還是http方式,我個人覺得區(qū)別不大,關(guān)鍵還是看應(yīng)用的場合,一般而言,推薦的搭配是lighttpd+fcgi 或者nginx+mongrel,而Apache因?yàn)樾阅懿罹啵槐煌扑]。

          lighttpd+fcgi是大量使用腳本語言編寫的網(wǎng)站的首選部署方案,Robbin Fan在同一篇文章中闡述了他選擇lighttp部署JavaEye的理由:

          JavaEye為什么用lighttpd+fcgi呢?原因如下:

          1) lighttpd發(fā)展了好幾年了,市場占有率也相當(dāng)高,是一個經(jīng)過實(shí)踐檢驗(yàn)的server,它的文檔也很全;

          2) JavaEye的Ruby進(jìn)程和Web Server在一臺機(jī)器上面跑,通過unix socket使用fcgi協(xié)議通訊可以避免tcp的網(wǎng)絡(luò)開銷,其通訊速度比使用tcp socket使用http協(xié)議通訊要快一些。

          Robbin選擇lighttpd的主要原因是性能好于Apache。并且Apache目前的fastcgi模塊有些bug,而對于像RoR這樣的項(xiàng)目fastcgi是一種很好的部署方式,所以Apache就因此失去了這塊份額。最近InfoQ報道過的RubyWorks提 供的RoR工作棧中選擇了Haproxy+mongrel的方式,這也是前面引用的Robbin所說的另外一種部署方案。mongrel本身可以跑 Ruby進(jìn)程,同時也是一個http服務(wù)器,它可以兼顧動態(tài)和靜態(tài)Web服務(wù),配合Haproxy做負(fù)載均衡就可以支持大并發(fā)量的Web應(yīng)用,所以它越來 越流行了。

          可見輕量級Web服務(wù)器由于性能/特性上的一些優(yōu)勢,開始逐漸瓜分Apache、IIS所沒有照顧到的一些新興的市場分額。那么如何去評價一個Web服務(wù)器呢?Cameron給出了如下的一些重要指標(biāo)
        1. 性能:對請求作出響應(yīng)的速度有多快?
        2. 可伸縮性:當(dāng)很多用戶同時訪問它時,服務(wù)器還能繼續(xù)可靠地運(yùn)行嗎?
        3. 安全性:服務(wù)器是否只執(zhí)行它應(yīng)該執(zhí)行的操作。它在認(rèn)證用戶和加密傳輸方面提供了怎樣的支持?它的使用是否使附近的應(yīng)用程序或主機(jī)變得更易受攻擊?
        4. 可靠性:服務(wù)器的失效模式和故障發(fā)生率如何?
        5. 標(biāo)準(zhǔn)遵從性:服務(wù)器遵從相關(guān)的 RFC 嗎?
        6. 靈活性:是否可以對服務(wù)器進(jìn)行調(diào)優(yōu),以支持較重的請求負(fù)載、需要計(jì)算的動態(tài)頁面或者代價不菲的認(rèn)證等等?
        7. 平臺需求:該服務(wù)器可用于哪些平臺?它是否有特定的硬件需求?
        8. 易管理性:服務(wù)器是否易于設(shè)置和維護(hù)?它是否與日志記錄、審計(jì)、成本計(jì)算等組織標(biāo)準(zhǔn)兼容?
        9. 目前越來越多的輕型Web服務(wù)器開始在上面的一個或著多個方面向Apache和IIS提出了挑戰(zhàn),因?yàn)楹茈y有一個Web服務(wù)器可以做到面面俱到。我們可以從Cameron提供的一份列表里面看到一些選用輕量級Web服務(wù)器的成功案例
        10. YouTube依靠lighttpd快速交付歸檔的內(nèi)容,例如視頻;
        11. cdServe運(yùn)行 “German Woodworking Machinery and Tools” CD;
        12. LiteSpeed宣揚(yáng)它在 twitter、www.funnyoride.com、www.airliners.com、WordPress.com、 fanfiction.com、SlashGear、www.forumactif.com 和其他著名Web 站點(diǎn)上擔(dān)任的角色;
        13. OpenSUSE、RubyOnRails、MarkaBoo和其他一些著名站點(diǎn)依賴于Mongrel;
        14. demon.net、bluelight.com、mtv.com、The Drudge Report、garfield.com等站點(diǎn)則使用thttpd;
        15. 上面的例子中有一些使用RoR的網(wǎng)站的例子,Cameron指出不僅是網(wǎng)站可以使用常規(guī)以外的其他編程語言。“不常見”語言還可以被用來實(shí)現(xiàn)輕量 Web服務(wù)器,例如Erlang、Java、Lisp、Lua、Perl、Python和Tcl。用這些語言實(shí)現(xiàn)的輕量級Web服務(wù)器不一定只是在性能/ 特性上超過Apache和IIS,它們可以提供例如容易嵌入、體積輕小這樣的特性來吸引開發(fā)者的使用。Cameron給出了使用“不常見”語言編寫輕量級 Web服務(wù)器的原因:

        16. 教學(xué):使用輕量級Web服務(wù)器來制定一個重要、但是并不太大的目標(biāo)。這是獲得使用某種語言的經(jīng)驗(yàn)的好方法。
        17. 雖然用C編寫的輕量級Web服務(wù)器大小為10-50KB,更高級的語言有100KB到數(shù)MB的運(yùn)行時,但整個 Web 服務(wù)器的源文件可能只占幾千個字節(jié)。這種Web服務(wù)器占用的空間很小,因此比Apache更易于與技術(shù)伙伴共享。
        18. 更高級的語言可以使實(shí)驗(yàn)更吸引人 —— 例如,添加一個新的HTTP/1.1特性可能只需幾行源代碼。這些輕量級服務(wù)器是非常方便的實(shí)驗(yàn)材料。
        19. 將HTTP服務(wù)器添加到已有的、用高級語言編寫的應(yīng)用程序中只需增加幾行源代碼。
        20. 如前所述,不同的輕量級Web服務(wù)器有著不同的優(yōu)點(diǎn),它們或多或少獨(dú)立于編程語言。所有輕量級Web服務(wù)器都比Apache更小、更易于配置。與 Apache相比,有些輕量級 Web 服務(wù)器更快,有些則快得多。有些則強(qiáng)調(diào)安全性、重負(fù)載下的從容性、可擴(kuò)展性或者內(nèi)存占有量。在任何情況下,都可以以一種不適用于 Apache 的方式徹底地理解這些服務(wù)器。

          這些理由從另外一個方面說明了輕量級Web服務(wù)器的優(yōu)勢,Cameron還提供了一長串的輕量級Web服務(wù)器的列表和簡介,感興趣的讀者可以認(rèn)真閱讀,從中尋找到您感興趣的實(shí)現(xiàn)。輕量級Web服務(wù)器不只是Apache、IIS的競爭者,也是很好的合作者(例如我們經(jīng)常可以見到關(guān)于mongrel與Apache配合使用的文章),現(xiàn)在我們還可以看到很多服務(wù)器協(xié)作部署的例子,各取所長應(yīng)該是最佳的選擇,所以我們更應(yīng)該從現(xiàn)在就開始拓寬眼界,尋找我們所需要的。

          最后,推薦對Web服務(wù)器感興趣的讀者可以使用Netcraft提供的Webserver Search的服務(wù)器查詢功能來探索你感興趣的網(wǎng)站的服務(wù)器,Webserver Search可以報告搜索的url對應(yīng)的服務(wù)器的操作系統(tǒng)和Web服務(wù)器類型,是設(shè)計(jì)部署方案的一個很好參考。



          posted on 2007-08-02 10:10 Tin 閱讀(2115) 評論(0)  編輯  收藏 所屬分類: 開源
          主站蜘蛛池模板: 许昌市| 九台市| 耒阳市| 微博| 长岭县| 砚山县| 公安县| 思南县| 天长市| 大渡口区| 石景山区| 安宁市| 体育| 游戏| 木兰县| 炉霍县| 桑植县| 四会市| 南漳县| 砀山县| 辽阳县| 安义县| 阿鲁科尔沁旗| 江永县| 奉贤区| 牙克石市| 辽阳县| 武功县| 遂溪县| 神池县| 湛江市| 沁源县| 襄樊市| 磴口县| 海阳市| 多伦县| 佳木斯市| 南江县| 额敏县| 桐城市| 潮州市|