J2EE下的集群負(fù)載均衡解析
集群和負(fù)載均衡在很多軟件和平臺中都有所應(yīng)用,根據(jù)不同的需求,我們所用的開發(fā)語言也不同?,F(xiàn)在,就來說一下J2EE下的集群負(fù)載均衡的問題。首先我們還是來談一下這個平臺下的基本概念,看看有什么不同。
◆實(shí)現(xiàn)一個J2EE集群需要考慮的因素
設(shè)計J2EE集群需要考慮很多因素。下面這些問題都是在一個大型的J2EE系統(tǒng)需要考慮的(這個列表取自EJB基本訓(xùn)練文檔-“用J2EE創(chuàng)建高可用性和可擴(kuò)展的應(yīng)用)。
◆集群
那種類型的集群適用:垂直還是水平擴(kuò)展?
在那個層次實(shí)現(xiàn)集群:web服務(wù)器或者,servlet,JSP容器還是HTTPsession對象;或者EJB,應(yīng)用服務(wù)JMS和JNDI對象還是數(shù)據(jù)庫集群?
◆負(fù)載均衡
選中一個服務(wù)器的時間(也就是affinity,姻親關(guān)系):每次請求,每個事務(wù)或者每次會話?
如何選擇服務(wù)器(也就是負(fù)載均衡策略):randomly,round-robin,weight-baesd,least loade dserver,或者由應(yīng)用決定?
負(fù)載均衡在哪個位置上實(shí)現(xiàn),客戶端還是服務(wù)器?
◆容錯
服務(wù)器如何進(jìn)行失敗重啟檢測?
什么時候適合失效重啟和嘗試使用其他的服務(wù)器?
失敗節(jié)點(diǎn)上的系統(tǒng)和應(yīng)用的狀態(tài)?
◆session狀態(tài)持久化
狀態(tài)如何傳播?
傳播的頻率?
對象狀態(tài)如何持久化?
狀態(tài)持久化機(jī)制的效率如何?
復(fù)制的狀態(tài)是否粘性?
網(wǎng)絡(luò)環(huán)境對session狀態(tài)的復(fù)制有限制嗎?
◆建議的集群設(shè)置
下面列出在推薦的集群環(huán)境中,我要達(dá)到的目標(biāo):
可升級能力高
◆容錯
動態(tài)配置,易于管理
自動發(fā)現(xiàn)新成員
失敗重啟和負(fù)載均衡,session數(shù)據(jù)內(nèi)存復(fù)制
可插拔/配置的負(fù)載均衡策略
當(dāng)一個成員加入或離開時,能通知組成員
通過多播的方式,無掉包的信息傳輸
集群對web應(yīng)用和服務(wù)器來說都是無縫的。對客戶端和服務(wù)端都是透明的。客戶透明是指客戶端無須知道集群服務(wù)或者集群的設(shè)置。集群的識別和訪問和單機(jī)一樣,而不是各自獨(dú)立的服務(wù)。服務(wù)器透明是指服務(wù)器上的應(yīng)用程序代碼不需要知道是在一個集群之內(nèi)。應(yīng)用程序代碼不能和其他的集群成員通信。
◆總結(jié)
我們看看如何部署一個集群(運(yùn)行多個Tomcat服務(wù)實(shí)例)來達(dá)到上面提交的目標(biāo)。我們將討論在Tomcat5中實(shí)現(xiàn)session復(fù)制的集群架構(gòu)和配置細(xì)節(jié)。