解讀Tomcat和負(fù)載均衡的意思
關(guān)于Tomact我們都知道它是一種嵌入的腳本軟件,基本上我們在Linux下來來完成負(fù)載均衡。那么針對負(fù)載均衡和Tomact我們來進(jìn)行一個(gè)具體的說明吧。之后再對他們的設(shè)定過程給出具體的內(nèi)容。
◆Tomcat的集群
在Tomcat先前的版本中(4.1)可以通過第三方的jar文件來實(shí)現(xiàn)集群。在一個(gè)集群內(nèi)安裝和配置多個(gè)Tomcat實(shí)例不是一件容易的事情。將集群的能力增加到開放源的servlet容器(Tomcat)和應(yīng)用服務(wù)(JBoss)中,JavaGroups是一個(gè)不錯(cuò)的選擇。在最新版本的Tomcat,集群已經(jīng)成為主要安裝包的一部分。將第三方的集群實(shí)現(xiàn)對Tomcat服務(wù)器的影響減少到最低。
在典型的集群環(huán)境中,為了讓成員之間相互協(xié)作和復(fù)制狀態(tài),它們之間需要互相通信。
組的通信可以使用point-to-pointRMI(TCP-IP)或者IP多播兩種方式。
大部分的J2EE應(yīng)用服務(wù)器(如JBoss、Oracle、WebLogic和Borland)都是使用IP多播讓集群成員進(jìn)行通信,在集群內(nèi)發(fā)送state/update/heartbeat數(shù)據(jù)給其他成員。
Tomcat集群成員的通信是如下進(jìn)行的:所有的集群成員用多播ping消息來對話。每一個(gè)Tomcat實(shí)例將發(fā)送一個(gè)消息,廣播其IP地址和TCP監(jiān)聽端口(為sessionreplication)。如果在給定的時(shí)間幀內(nèi),某個(gè)實(shí)例沒有接收到這些信息,那么該實(shí)例就會被認(rèn)為是當(dāng)機(jī)。
另一個(gè)比較流行的概念是farming,提供集群范圍內(nèi)的Web應(yīng)用的熱部署。在服務(wù)器farm內(nèi),一個(gè)Web應(yīng)用通過拷貝war文件到集群內(nèi)的一個(gè)節(jié)點(diǎn)上進(jìn)行部署,farming將會把這個(gè)Web應(yīng)用部署到整個(gè)集群中。類似的,從一個(gè)集群節(jié)點(diǎn)上刪除war文件,farming將會在集群內(nèi)所有的節(jié)點(diǎn)上反部署這個(gè)Web應(yīng)用。Tomcat的集群文檔中講到在接下來的版本中將會支持farming能力。
◆負(fù)載均衡
一種機(jī)制,能將服務(wù)器的負(fù)載被分發(fā)到集群的不同節(jié)點(diǎn)上。基于負(fù)載均衡策略,應(yīng)用不再在單一的服務(wù)器上執(zhí)行,而是在動(dòng)態(tài)選擇的服務(wù)器上。當(dāng)客戶請求服務(wù),一個(gè)或多個(gè)協(xié)作服務(wù)器處理這個(gè)請求。負(fù)載均衡為集群提供單一的入口,就如直接和獨(dú)立的Web或者應(yīng)用服務(wù)器交互一樣,這對客戶來說是透明的。
兩種比較流行的負(fù)載均衡方法分別是DNS輪循和硬件負(fù)載均衡。DNS輪循提供單個(gè)邏輯名稱,返回集群內(nèi)某臺機(jī)器的ip地址。這種方式是廉價(jià)、簡單并且容易配置,但它并沒有提供服務(wù)器之間的聯(lián)系和高可靠性的能力。相對來說,硬件負(fù)載均衡通過虛擬ip地址來解決DNS輪循存在的問題。負(fù)載均衡器有一個(gè)單獨(dú)的ip地址,映射到集群內(nèi)的每一個(gè)節(jié)點(diǎn)上。負(fù)載均衡器接收到請求,然后重寫頭部來指向集群內(nèi)的其他機(jī)器。如果我們從集群內(nèi)移出一些機(jī)器,那么這個(gè)改變馬上生效。硬件負(fù)載均衡的好處是服務(wù)器的聯(lián)系性和高效。缺點(diǎn)是昂貴并且設(shè)置復(fù)雜。(作者在這里沒有提到這種硬件的負(fù)載均衡方式可以用軟件實(shí)現(xiàn),這種方式稱為VitrualServer)。
對于負(fù)載的分發(fā)有多種算法,下面是一些較為常用的算法:
round-robin輪循
random隨機(jī)
weight-based權(quán)重
minimumload最小負(fù)載
lastaccesstime最后訪問時(shí)間
programmaticparameter-based負(fù)載均衡器根據(jù)方法中的參數(shù)來選擇服務(wù)器
負(fù)載均衡算法涉及統(tǒng)計(jì)上的差異,速度和簡單性。舉個(gè)例子,weight-based算法比其他的算法需要更長的計(jì)算時(shí)間。想得到對負(fù)載均衡的更詳細(xì)的解釋,參考ONJava的文章“LoadBalancingWebApplications"