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