提高服務的效能、併發能力、以及高可用性
提高專案架構的橫向擴充套件能力
實際公司線上生產環境都會選擇一台機器部署乙個tomcat,多台機器完成集群,畢竟一台機器部署多個tomcat還是有一些共享瓶頸的,例如它們的網絡卡只有乙個,記憶體和磁碟io等都是共用的。而多台機器共同提供相同的服務,能夠充分利用每一台機器的資源,自然能夠提高服務的效能。
很好理解,一台tomcat的http執行緒池是有限的,那麼兩台能承載的http執行緒自然是一台的2倍。
簡單理解在nginx下面掛了多台tomcat節點,當其中一台tomcat掛掉的時候,那麼我們可以把這個節點從nginx負載均衡tomcat集群的配置當中移除,那麼對於請求nginx還會打到可用的tomcat伺服器上,並不影響我們提供的服務。所以tomcat集群就能帶來一定的高可用性。
假設對於一台伺服器,通過不斷的公升級它的cpu、記憶體、更換固態硬碟等,我們認為這是縱向提高機器的配置,來達到提高tomcat所提供服務的效能,隨著硬體不斷提高,成本是指數級上公升的。
而橫向擴充套件能力則不同,比如天貓的雙11活動,因為平時訪問量沒有那麼高,但是雙11訪問量非常高,當tomcat集群完成後我們就可以做乙個橫向擴充套件,只要增加tomcat節點就可以了,根據實際資料、歷史資料去做乙個評估,當然這個還要有一定的動態能力,根據實際的情況動態的增加幾個節點,讓nginx進行熱部署,就把新增的節點加入到集群中。
通過nginx負載均衡對多個tomcat進行請求**,也就是說將多個使用者的請求通過一定的策略打到集群的各個tomcat伺服器中。
tomcat集群帶來了什麼新問題
1.session登入資訊儲存及讀取問題
通常在單tomcat環境下,我們都是將登入資訊儲存在原生提供的session物件中。那麼在集群環境下,當使用者a發起登入請求被**到tomcat1上,最終登入的session資訊儲存到了tomcat1上,使用者a此時訪問系統的某個服務,該請求被**到了tomcat2上,但是tomcat2並沒有該使用者的登入資訊,所以會提示使用者未登入,顯然這是不合理的。
所以在集群環境下我們必須要解決多個tomcat之間session共享問題,讓使用者只需要登入一次就可以繼續訪問其他的服務。
2.伺服器定時任務併發的問題
當伺服器存在定時任務時,假設配置的30分鐘執行一次,那麼到了執行的時間點,多個tomcat就會同時啟動這個定時任務,帶來的問題就是首先如果定時任務的業務邏輯很複雜時,非常容易造成線上的資料錯亂,其次我們其實只希望有一台伺服器去執行定時任務就夠了,那麼多台同時執行也會帶來不必要的資源浪費。
3.根據專案架構和現有業務還有可能有更多的問題
對於實際不同的場景還會有很多的問題,所以隨著專案架構的演進,從架構層面的變化會引起**層面的變化以及解決方案的變化,不要想當然的認為集群就是多部署幾台tomcat就行了。
如圖為tomcat集群後簡要的架構圖,左側是乙個分布式的redis session server,無論使用者請求哪台tomcat,都將session資訊儲存在這裡,tomcat請求session也都從這裡獲取。所以這裡還需要做單點登入功能。
同時可以利用分布式redis來做乙個分布式鎖,解決多個tomcat在同一時間點啟動定時任務的問題。
Nginx tomcat集群環境搭建
實驗環境 windows xp sp3 nginx版本 1.5.12 tomcat版本 6.0.39 一 配置nginx 2 d nginx nginx 1.5.12目錄結構 nginx conf 配置目錄 contrib.docs 文件目錄 logs 日誌目錄 temp 臨時檔案目錄 html 靜...
Nginx Tomcat實現集群環境
環境準備,實現的效果,訪問tomcat1和tomcat2兩個應用均正常。一台資料庫伺服器 一台tomcat伺服器 一台tomcat伺服器 windows部署nginx 輪詢方式 預設 每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。注意 session無法傳遞 u...
nginx tomcat集群過程
1.裝多tomcat,注意埠不要一樣,每乙個tomcat都要設三個埠,都要不一樣 比如配兩個,啟動起來,如果埠衝突起啟不了 配製nginx配製如下 user nobody worker processes 2 error log logs error.log error log logs error...