一人拾柴火不旺,眾人拾柴火焰高。Tomcat服務(wù)器也是一樣,一臺服務(wù)器再強(qiáng)大能承受的訪問也是有限的。要提供高并發(fā)、高可用的服務(wù),就必須橫向擴(kuò)展,多臺Tomcat組成一個集群,根據(jù)實(shí)際的訪問量動態(tài)增減服務(wù)器的部署。

負(fù)載均衡的難點(diǎn)

我們一般用session來保持會話,所以Tomcat服務(wù)器是有狀態(tài)的。壞處是當(dāng)一臺宕機(jī)后自動跳轉(zhuǎn)到另一臺服務(wù)器可能會導(dǎo)致用戶會話失效,最明顯的例子就是要重新登錄。所以以下的幾種方法,都是在圍繞session的問題。

方案一、使用Tomcat自帶的session同步功能

如果我們使用nginx作為負(fù)載均衡服務(wù)器,它默認(rèn)使用是輪詢策略(也就是第一次請求分給服務(wù)器A,第二次分配給B,以此類推)。這種方案非常簡單,但是別忘了我們的session是放在訪問服務(wù)器上,輪詢得結(jié)果是下次我們可能訪問的是另一臺服務(wù)器了,導(dǎo)致我們的會話不能保持。
其實(shí),解決起來也似乎很簡單,就是創(chuàng)建session時,只需要把它復(fù)制給集群中的所有服務(wù)器就行了,下次不管訪問哪一臺Tomcat,它都能根據(jù)sessionID找到我們的session。非常幸運(yùn)的是,Tomcat本身就已經(jīng)幫我們實(shí)現(xiàn)了這個功能——session復(fù)制。我們只需簡單兩步配置即可:

  1. 在server.xml中打開以下注釋:

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
  2. 在tomcat或者應(yīng)用下web.xml,添加:

    <distributable/>

    是不是非常簡單實(shí)用呢。

    簡單歸簡單,不得不提的是,它有一個缺點(diǎn),因?yàn)樗J(rèn)使用BackupManager,是all-to-all的復(fù)制,所以如果大量節(jié)點(diǎn)的集群會有廣播風(fēng)暴,而且即使沒有部署應(yīng)用的節(jié)點(diǎn)也會復(fù)制。所以對大規(guī)模的集群,這種方案需謹(jǐn)慎考慮哦。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式