PHP教父炮轟Java:已經輸掉Web之戰

日期:2008-04-23  作者:喜騰小二  來源:PHPChina


       PHP 3之後的主要語言開發者之一、Zend公司的創始人之一Andi Gutmans最近在blog中直言不諱地批評了Java語言。他指出,目前Java廠商試圖在JVM上提供動態語言實現的路子根本不對,應該全麵擁抱標準的動態語言。 

       由於Gutmans的特殊地位,他的這篇長文已經在技術界引發了強烈爭議。參見其blog上和TSS上的討論12。 

       下麵是對全文的一個編譯版本,基本反映了原貌。其中對多核環境中多執行緒(JVM)與多處理序(LAMP)的比較,C語言生態係統以及開源語言與Java等廠商語言和技術的比較,感覺都是非常有價值的。 

       Gutmans回憶自己幾 年前參與的一個基於IBM Websphere的大型企業級項目。項目團隊中無論開發還是架構人員都非常出色,但其中最優秀的人與Andi談起PHP和動態語言時,還是將之視為玩俱 語言。這在當時正是Java界對動態語言的典型心態。但是,他們恰恰忽視了Web,因此Java EE設計時並沒有以Web為中心,而且關注在企業整合、事務管理和其他後端處理上。雖然Java EE透過servlet和JSP支援Web開發也有不短的歷史,但是掌握標準發展的大公司們忽視了Web的RESTful本質,仍然在嚮通用平臺的方嚮上 走。 

       而與此同時,建於C語言庫和工俱的生態係統之上的LAMP架構,則成了Web程式最流行的開發平臺。其中最常用的語言是PHP。由於PHP專注於 Web開發,而且為此不斷演變,它簡直就是為Web範型(paradigm)量身打造的,能夠快速和容易地解決常見的Web問題,因此獲得了最大的市場份 額。根據Ajaxian.com的調查,大約50%的RIA開發人員都使用PHP。由於各種PHP程式如Wordpress, Drupal, mediaWiki, osCommerce, SugarCRM的流行,這種趨勢更加明顯。 

       隨着大多數業務應用套裝程式括CRM、ERP、報表、文檔管理等等也都轉嚮了Web,那些大的Java廠商都意識到,Java對Web範型的形成和 發展影響甚微,因此他們開始支援各種標準和非標準的Java Web框架(JSF、Struts、Spring MVC等等),要使Java適應Web。這些框架雖然有些也取得了一定成功,但是它們都無法解決Java在Web上的主要問題:由於嚴格的類型化和架構過 度復雜,開發時間和開發人員的技能要求都更高,也就是說,總成本無法令人滿意。 

       而且,大的Java廠商還什麼都想占着。一方麵想融入Web,一方麵又不肯放鍥自己已經在Java上建立起來的數十億計的生意。甚至動態語言的廣泛流行都未能顯着改變他們的行為模式。但是隨着微軟雄心勃勃的多語言執行環境.NET的出現,大勢又變了。 

       成功的動態語言包括PHP, Perl, Python和Ruby都是用C寫的,充分利用了C語言庫生態係統的廣泛性和深入性。而且它們都是社區驅動的,沒有什麼正二八經的語言規範,發展不會被公 司政治所阻礙。這些語言都是由使用者自己開發的,他們隻有一個目的:快速搞定工作。因此語言可能在小的版本更新時就加入重要的改進。這種敏捷本質正是適應 Web應用快速變化必需的。

       而且,LAMP的部署方式有顯着的優勢。在多處理序架構中,Web伺服器和動態語言軟體中的故障一般不會使網站垮掉。雖然會有某個處理序崩潰,但其他 服務Web請求的處理序仍然可以繼續執行。這與JVM這種多執行緒的環境中軟體故障包括崩潰和死鎖通常都會使係統垮掉,形成了鮮明對比。 而且在特定時間後回收處理序的能力能夠防止記憶體泄漏和記憶體碎片化這兩種常見的記憶體問題使軟體隨着時間推移效能降低。LAMP上軟體更新時,可以輕鬆和漸增地 推到伺服器,無需冗長的建置和打包。雖然有時這會帶來不規範、不嚴格的問題,但是只要正確實施,開發人員和運營人員的日子都會好過得多。 

       相比之下,Java廠商受困於與Java繫結太緊對多種語言的支援很少的JVM。他們並沒有轉嚮能夠使其客戶兩全其美的LAMP和Java技術鬆 耦合的模型,而是患得患失,怕失去對客戶的控制,競相在JVM上提供動態語言。無論是微軟這個強敵,還是Java中互相競爭的廠商,都在實施自己的動態語 言策略。 

       現在,Sun正在其Java EE解決方案上支援JRuby和Jython而投入;IBM Websphere集團則認識到Java EE平臺執行現代Web應用的無效,在Project Zero上大力投入,該項目的目的是使IBM在Web 2.0世界中也能有一席之地,目前支援Groovy和PHP;BEA也有一些孵化項目,但是被Oracle併購後,這些項目是否能有結果目前不明。Project Zero的 首席架構師是IBM公司裡最先公開承認Java現在可以認為隻是一種係統語言而不適合建置RESTful Web應用的幾個人之一。而建置RESTful Web應用正是Project Zero的目的。Java堡壘花了10年多時間才承認Java在Web上投資回報不佳,而目前的趨勢,將有更多的客戶做出更明智的選擇。動態語言將有大的 提昇。與大型機一樣,Java已經在企業級IT和關鍵業務應用中根深葉茂,因此不會很快消失。但是在Web應用上,Java語言很可能會在市場份額上急劇 下降。 

       問題在於,非微軟的Web市場是會采用動態語言的JVM實現,還是容納這些語言事實標準實現的LAMP架構。雖然我認為會有客戶被前者吸引,但是市場主流還是會選擇LAMP。原因在於: 

1. 標準實現更新速度很快,而JVM版本總是滯後,會帶來相容性問題。這與Mono跟不上.NET的問題類似。 

2. JVM最初設計時並沒有考慮支援動態語言,因此在可見的將來,要滿足實際需求,挑戰非常大。像閉包、間接方法調用和類型juggling等動態特性就不容易解決,這從目前JRuby與Ruby的C版本的比較中可以看出。而且,硬體廠商是否有興趣跟上也是有待觀察的。而開源技術就沒有這種問題。 

3. 現代Web的可伸縮需求對Web層的處理強度的要求越來越大。基於C的架構更可能與操作係統底層(原文為primitives)最有效地互操作,提供高 效、記憶體占用小的架構,滿足這種強度。高效能的Web伺服器比如lighttpd, Zeus, IIS 7,高效能的快取係統比如Facebook等最大的網站使用的memcached,還有其他效能關鍵的子係統比如記憶體管理,都是例子。 

4. 多核係統非常適合LAMP架構的多處理序方式。隨着晶元業現在把主要精力都放在了多核而不是超執行緒技術上,JVM這樣的多執行緒環境的優點在今天的硬體上將無法充分發揮。而多處理序方式將提供更多穩定性和可靠性。 

5. 由於LAMP的簡單性,它對於開發人員而言進入門檻非常低,而又能夠提供很好的伸縮性,包括Yahoo和Facebook這樣的大規模產品係統。 

       總而言之,越來越清楚的是,動態語言將逐漸成為Web開發的標準。微軟和Java廠商都認識到這個趨勢,現在正在各自的軟體平臺之大力投入,給出 解決方案。但是,因為主要動態語言社區都是在.NET CLR和Java JVM軟體平臺之外發展起來的,這些廠商如果隻是想依靠將成功的動態語言複製到自己的平臺上而反敗為勝,他們將處於困難的境地。有些廠商已經意識到這一情 況,采用了一些混合策略,同時為客戶提供動態語言的標準實現,雖然還沒有完全與其解決方案組合配合起來。微軟在PHP上的投入就是如此,Sun也開始為客 戶提供原生的Ruby和PHP實現。我相信雖然JVM嚮動態語言抛出的橄欖枝可能會吸引一些Java客戶,但是這無法跟上開源社區開發原生動態語言實現的 步伐。JVM的動態語言實現對於Java廠商與時俱進是不夠的,它們需要全麵地擁抱原生的事實標準的社區驅動的動態語言。

<<<返回技術中心

技術文章

站內新聞

我要啦免费统计