J2EE Java Pet Store 與 .NET PetShop


相信大家常常會看到很多統計數字,來自各家廠商、各種傳播媒體、各個政治團體,但是數字雖然會說話,卻常常各說各話。前陣子出現一篇比較微軟.NET和Java J2EE架構執行效率的報告,常常被微軟陣營拿來當成打擊J2EE的證據。例如以下這段話﹕

"而據微軟宣稱,Visual Studio.Net能支持25種語言,和Java相比具有節省2/3程序代碼、效能快28倍,承載六倍的使用者的功能"
- 摘自臺灣CNet 2002年四月二日新聞專區

這樣超能力的.NET效能報告到底來自何方?其真實性爲合?本週我就來
從頭開始講講這個精采故事的始末。

J2EE (Java 2 Enterprise Edition)是Java技術在企業運算上的應用,之中包含多種運算標準,EJB組件架構、JDBC數據庫運算、JMS訊息傳遞、Java Servlets/JSP等Web組件程序等等,功能強大但是內容博大精深,爲了讓使用者可以有一個設計J2EE架構應用程序的模板,Sun做出一套系統名爲 "Java Pet Store"。這個線上寵物店的範例是針對已經熟悉Java程序設計和J2EE觀念的人,提供一個用正規方式設計出來的系統,讓要用J2EE架構的人有一個參考的依據。

這個範例一出來,很快就被用來當成比較各家J2EE兼容產品的依據。最先是在去年的JavaOne大會上,受邀參加主題演講的Oracle大老闆Larry Ellision重炮轟擊在他之前剛講完下臺的BEA,公開宣稱Oracle的J2EE Application Server (Oracle9iAS) 的執行效能是BEA WebLogic的三倍,同時也是IBM WebSphere
的兩倍。接下來IBM和BEA都站出來反擊,例如BEA在去年七月也公佈一項效能數據,數據上顯示WebLogic Server 6.1的執行效率是IBM WebSphere的四倍,並且比Oracle的產品快上54%等等。這種情況其實是正常的,Java標準的精神原本就是各家廠商合作制定技術標準,然後再來根據這個標準來比賽誰的產品做得好。但是正當各家J2EE廠商比較得正熱鬧的時候,卻半路殺出一個程咬金,微軟有個網站叫做GotDotNET公佈一份報告,宣稱他們用同樣的架構運用.NET技術做出同一套系統,結果就是本文一開頭的那一段︰"和Java相比具有節省2/3程序代碼、效能快28倍,承載六倍的使用者的功能"。這個數字一公佈,就常常被微軟以及微軟的經銷商們拿來當成.NET遠遠超越J2EE的證據。

這種驚人的數據當然引起J2EE陣營的質疑,於是大家仔細去看到底這些數字是
怎麼產生的,很快地就被發現其中大有文章。這個.NET版本的寵物店系統已經被從頭到尾改裝過,整個架構都跟原先Java Pet Store不一樣。根據網絡上來自各方的整理,主要的不同點有以下幾個﹕

1. Java Pet Store用的架構設計是所謂的MVC design pattern。MVC是Model-View-Controller的簡寫,是design pattern的一種,源自Smalltalk。以往開發這種大型應用程序常常把不同用途的各部分程序都混在一起,造成項目成員分工不清,系統也很難維護。MVC design pattern則是將對象分成三類,Model對象專門用來包裝應用程序的狀態,View用來負責屏幕上的展現,Controller則負責定義應用程序的各種動作和反應。Java寵物店系統利用MVC Pattern設計整個系統架構,將各層的對象清楚地分開。.NET的寵物店則是完全採用自己定義的架構,所以在一開始就和原來的範例完全不一樣。

2. 在資料存取方面,.NET寵物店大量使用數據庫中的store procedure。但是在原來的Java寵物店中,這些商業邏輯的工作是放在中間層組件中的。把這些工作放到store procedure裏也許可以增加一些執行效率,但是卻犧牲了程序的彈性和把各種工作都放進store procedure裏, 帶來的缺點是維護不易。而且對於某些陽春型的數據庫系統 (例如MySQL),它根本就沒有store procedure的功能。

3. 在數據庫方面,.NET寵物店採用ADO.NET的Sql DataReaders來存取微軟SQL  Server的資料。但是如果數據庫換成其它廠牌的產品,比如說 Oracle、
   Sybase或是DB/2,雖然還是可以用 ADO.NET透過 OLE DB以及ODBC等方式來存取,但是在效率上就不可能跟在Microsoft SQL Server上一樣了。所以Java寵物店是一個不管使用各家產品皆可行的展示,.NET寵物店則是在各方面都採用自家產品/技術的產物。

4. 另外.NET寵物店還有一個最快速提升效率數字的方法,就是去更改SQL的
   query statement,讓傳回來的資料筆數少一些。這招果然有立竿見影的效果 :)

簡單來說,這個.NET版本寵物店和Java寵物店的最大差別在架構設計。Java寵物店的目的是展示一個具擴充性的企業運算架構,就是採用三層(3-Tiers)式設計,資料展現層在最外面,中間是執行企業運算邏輯的中間層組件,後端就單純是存放資料的關係型數據庫。如此一來工作分得很清楚乾淨,各司其職。而微軟的.NET寵物店其實就類似傳統的兩層式(2-Tiers)設計,

另外Java寵物店當初的用意也只是當成一個J2EE架構設計的模板,並沒有特別針對加速執行效能作額外的設計。但是.NET寵物店完全以執行效能出發,爲此不惜重新量身訂作,雖然系統跑起來外觀和功能一樣,但是裏頭完全不是那麼回事。如果用它來展示.NET也可以做出一套相同的寵物店系統那倒無妨,但是如果用執行效率來作文章,那就有些不公平了。

近來最新的發展是Sun的Java/XML部門總裁Rich Green在JavaOne大會上宣佈,Oracle和IBM又針對Java寵物店在不更動架構下做了效能提升,結果比.NET寵物店快上18到22倍。比如說在中間層的EJB組件之中,它們使用 isModified() 方式來避免不需要的數據庫更新動作,這個小更動就大幅提升了整體的執行效率。而且爲了系統的架構彈性和程序可移植性,在這個新版的系統中仍然沒有像.NET版本一樣使用store procedure。Oracle的這篇最新報告和原始碼可以在下列網站下載﹕

http://otn.oracle.com/tech/java/oc4j/content.html

另外在TheServerSide網站上也有一位先生髮起在不犧牲原來架構和彈性的前提下,來做一套也在執行效能上作最佳化的無敵終極版Java寵物店。也有人乾脆仿效.NET寵物店的方式,乾脆弄一套兩層式(2-Tiers)的Java版寵物店,和用微軟的範例系統 "北風數據庫" 同時擺在網站上讓人做線上比較。它們的網址分別是︰

http://www.javelinsoft.com/petstore
http://www.javelinsoft.com/northwind

相信這個寵物店大戰還沒完,J2EE各家廠商、網絡上Java陣營的支持者、加上.NET陣營,都會繼續改進自己做的系統,並公佈更加夢幻的數據。一般使用者要注意的就是不要被簡單的數字所矇騙,不要跟着瞎起鬨。要看看到底它做了哪些修改纔得到這樣的效能提升,而且效能不是一切,系統的穩定度、架構的彈性和程序可移植性、程序維護上面的難易度,都是要一併考量的因素。而且既然要比賽,立足點就得公平,不然好比奧運游泳比賽,大家都照規矩在水中劃手踢腿遊,但是偏偏有一個人爲了速度,在屁股上裝個推進器往前射,然後再來自己宣稱打破世界紀錄,還有一幫人在旁邊跟着鼓掌叫好,這樣子就不太對了。

下面是本文中提到的文章網址,有興趣進一步研究的朋友可以自行參考﹕

Java寵物店的原始網址 (包含所有文件和範例程序代碼)﹕
http://java.sun.com/blueprints/code/index.html#java_pet_store_demo

Sun有關這個Java寵物店系統的FAQ︰
http://java.sun.com/blueprints/qanda/faq.html

解說 MVC Pattern的文件︰
http://java.sun.com/blueprints/patterns/j2ee_patterns/model_view_controller/index.html

.NET版本寵物店的網址︰
http://www.gotdotnet.com/team/compare/petshop.aspx

Oracle版本Java寵物店的網址﹕
http://otn.oracle.com/tech/java/oc4j/content.html

BEA版本Java寵物店的網址﹕
http://www.bea.com/press/releases/2001/0709_benchmark_bea-ibm-oracle.shtml

IBM對.NET提出的響應︰
http://www-3.ibm.com/software/webservers/studio/msnetreview.html
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章