J2EE叢集原理

banq發表於2005-08-24
這篇文章被放置於TSS右邊重要欄目第二個,說明很多人對J2EE叢集原理認識嚴重不足,而且在進行架構選擇時,極其容易被忽視。

http://www.theserverside.com/articles/article.tss?l=J2EEClustering

TSS上這篇來自Wang yu的文章,文章闡述了負載平衡和failover的意思,比較了Web層Tomcat的動態負載平衡和HttpSession Failover原理,由於Tomcat 5採取的是多伺服器記憶體複製策略實現的HttpSession Failover,當一個伺服器中的session改變,Tomcat要通知所有的伺服器,Tomcat作為Web伺服器主要負責客戶端連線,當訪問量增加時,Tomcat的這種Session複製策略無疑是雪上加霜,因此沒有太大的實用價值。

因為Tomcat是隻支援Web應用系統,所以採取struts+hibernate或tapestry+hibernate(或者中間加上Spring/Jdon)都屬於Web應用系統,他們都是單機Stand-alone系統,利用上述Tomcat的負載平衡只能勉強支撐兩三臺伺服器,而且隨著訪問量增加,Tomcat等Web伺服器將趨於緩慢,從這篇文章觀點來看,Web應用程式在效能的伸縮性不太高。

下面討論的都是因為使用EJB後而使得你的應用程式自動獲得的能力:

以Weblogic JBoss為主的採取的paired servers 對伺服器複製策略則要提高效能很多,但是對load balancer演算法要求高,有些普通的load balancer不一定符合要求。

IBM採取的是中央狀態伺服器策略;而SUN則採取的是特殊資料庫複製HADB策略。

該文最後分析了JNDI EJB和JMS的叢集原理,實際也是闡述了從效能叢集原理上說,為什麼會誕生EJB等複雜技術以及對於一些大型應用為什麼需要使用EJB的原因所在。

文章還否定了這樣的觀點:單機系統幾乎可以透明的遷移到叢集結構。
在遷移時,需要考慮很多問題,如狀態/快取 httpsession以及特殊的服務等。

另外觀點:分散式結構一定比配置定製結構可靠嗎?不一定。
在使用EJB時有人喜歡什麼都實現分散式,其實這是不必的,一般可讓Web應用程式首先選擇同臺伺服器中的EJB服務,這叫配置結構。

作者的結論是:
Clustering is different from the stand-alone environment
叢集架構是完全不同於單機結構的。在建立一個大型的可伸縮系統之前,我們必須對不同的J2EE伺服器產品實現叢集有不同的瞭解和掌握,選擇合適的第三方框架保證確認他們也是支援叢集環境的(如Jdon框架),合適的架構設計將從叢集中得益,而不是將苦難留給你的企業及其其他後來的同事(國人經常是在架構設計時,喜歡方便自己,害了系統和他人)。

一直以來,所謂輕量的架構系統受到狂熱分子的鼓吹和極端追從,甚至提出否定EJB的觀點(如Spring作者提出的without EJB),這些禍患人心的觀點不能說是完全錯誤的,但是至少是極端,屬於一葉遮目,看待EJB不能只從OO設計角度,還要從實際應用效能上考慮,就象看到SOA結構一樣,設計和效能是實際架構選擇的兩個基本點,善於平衡才是我們實際架構選擇的主要宗旨。


相關文章