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