成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

tomcat集群機制剖析及其生產(chǎn)部署選型

為什么要使用集群?主要有兩方面原因:一是對于一些核心系統(tǒng)要求長期不能中斷服務(wù),為了提供高可用性我們需要由多臺機器組成的集群;另外一方面,隨著訪問量越來越大且業(yè)務(wù)邏輯越來越復(fù)雜,單臺機器的處理能力已經(jīng)不足以處理如此多且復(fù)雜的邏輯,于是需要增加若干臺機器使整個服務(wù)處理能力得到提升。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供潮州網(wǎng)站建設(shè)、潮州做網(wǎng)站、潮州網(wǎng)站設(shè)計、潮州網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、潮州企業(yè)網(wǎng)站模板建站服務(wù),10余年潮州做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

集群難點在哪?

如果說一個web應(yīng)用不涉及會話的話,那么做集群是相當(dāng)簡單的,因為節(jié)點都是無狀態(tài)的,集群內(nèi)各個節(jié)點無需互相通信,只需要將各個請求均勻分配到集群節(jié)點即可。但基本所有web應(yīng)用都會使用會話機制,所以做web應(yīng)用集群時整個難點在于會話數(shù)據(jù)的同步。

當(dāng)然你可以通過一些策略規(guī)避復(fù)雜的額數(shù)據(jù)同步操作,例如前面說到的把會話信息保存在分布式緩存或數(shù)據(jù)庫中統(tǒng)一集中管理,如下圖,每個tomcat實例只需去寫入或讀取數(shù)據(jù)庫即可,避免了tomcat集群之間的通信。但這種方式也有不足,要額外引入數(shù)據(jù)庫或緩存服務(wù),同時也要保證它們的高可用性,增加了機器和維護成本。

全節(jié)點會話同步模型

鑒于統(tǒng)一將會話存放到數(shù)據(jù)庫或緩存上存在的不足,提供另一種解決思路就是tomcat集群節(jié)點自身完成各自的數(shù)據(jù)同步,不管訪問到哪個節(jié)點都能找到對應(yīng)的會話,如下圖,客戶端第一次訪問生成會話,tomcat自身會將會話信息同步到其他節(jié)點上,而且是每次請求完成都會同步此次請求過程中對session的所有操作,這樣一來下一次請求到集群中任意節(jié)點都能找到響應(yīng)的會話信息,且能保證信息的及時性。而且任意一個節(jié)點宕掉了也不影響整體對外的服務(wù)。

會話備份單節(jié)點模型

Tomcat提供的第二種集群會話管理的機制就是單節(jié)點備份機制,下面看看這種方式具體的工作機制,集群一般是通過負(fù)載均衡對外提供整體服務(wù),所有節(jié)點被隱藏在后端組成一個整體。前面各種模式的實現(xiàn)都無需負(fù)載均衡協(xié)助,所以圖中都把負(fù)載均衡省略了。最常見的負(fù)載方式是前面用apache拖所有節(jié)點,它支持將類似“326257DA6DB76F8D2E38F2C4540D1DEA.tomcat1”的會話id進行分解,定位到tomcat集群中以tomcat1命名的節(jié)點上(這種方式稱為Session Stick,由apache jk模塊實現(xiàn))。每個會話存在一個原件和一個備份,且備份與原件不會保存在同一個節(jié)點上,如下圖,例如當(dāng)客戶端發(fā)起請求后通過負(fù)載均衡被分發(fā)到tomcat1實例節(jié)點上,生成一個包含.tomcat1后綴的會話標(biāo)識,并且tomcat1節(jié)點根據(jù)一定策略選出此次會話對象備份的節(jié)點,然后將包含了{會話id,備份ip}的信息發(fā)送給tomcat2、tomcat3、tomcat4,如圖中虛線所示,這樣每個節(jié)點都有一個會話id、備份ip列表,即每個節(jié)點都有每個會話的備份ip地址。

完成上面一步后就是將會話內(nèi)容備份到備份節(jié)點上,假如tomcat1的s1、s2兩個會話的備份地址為tomcat2,則把會話對象備份到tomcat2中,類似的有tomcat2把s3會話備份到tomcat4,tomcat4把s4、s5兩個對話備份到tomcat3,這樣集群中所有的會話都已經(jīng)有了一份備份。當(dāng)tomcat1一直不出故障,由于Session Stick技術(shù)客戶端將一直訪問到tomcat1節(jié)點上,保證一直能獲取到會話。而當(dāng)tomcat1出故障了,這時tomcat也提供了一個failover機制,apache感知到后端集群tomcat1節(jié)點被移除了,這時它會把請求隨機分配到其他任意節(jié)點上,接下去會有兩種情況:

①剛好分到了備份節(jié)點tomcat2上,此時仍能獲取到s1會話,除此之外,tomcat2還要另外做的事是將這個s1會話標(biāo)記為原件且繼續(xù)選取一個備份地址備份s1會話,這樣一來又有了備份。

②假如分到了非備份節(jié)點tomcat3,此時肯定找不到s1會話,于是它將向集群所有節(jié)點發(fā)問,“請問誰有s1會話的備份ip地址信息?”,因為只有tomcat2有s1的備份地址信息,它接收到詢問后應(yīng)答告知tomcat3節(jié)點s1會話的備份在tomcat2,根據(jù)這個信息就能查到s1會話了,并且tomcat3在自己本地生成s1會話并標(biāo)為原件,tomcat2上的副本不變,這樣一來同樣能找到s1會話,正常完整整個請求處理。

生產(chǎn)部署選型

以上兩種模型都有各自的優(yōu)缺點,在實際生產(chǎn)上部署應(yīng)該根據(jù)實際情況選擇適合的模型。

對于全節(jié)點會話同步模型

細看很容易發(fā)現(xiàn)集群的節(jié)點之間的會話是兩兩互相復(fù)制的,一旦集群節(jié)點數(shù)量及訪問量大起來,將導(dǎo)致大量的會話信息需要互相復(fù)制同步,很容易導(dǎo)致網(wǎng)絡(luò)阻塞,而且這些同步操作很可能會成為整體性能的瓶頸,根據(jù)經(jīng)驗,此種方案在實際生產(chǎn)上推薦的集群節(jié)點個數(shù)為3-6個,它無法組建更大的集群,而且冗余了大量的數(shù)據(jù),利用率較低。

對于集群增量會話管理器,可通過配置server.xml文件使用它,在tomcat中使用集群模式需要在<Engine>節(jié)點下添加<cluster>節(jié)點,而集群增量會話管理器正是在此節(jié)點下添加一個子節(jié)點<Manager className="org.apache.catalina.ha.session.DeltaManager"/>。

對于會話備份模型

針對上面全節(jié)點會話同步模型的網(wǎng)絡(luò)流量隨節(jié)點數(shù)量增加呈平方趨勢增長的問題,也正是因為這個因素導(dǎo)致無法構(gòu)建較大規(guī)模的集群,為了使集群節(jié)點能更加大,首要解決的就是數(shù)據(jù)復(fù)制時流量增長的問題,tomcat提出會話備份模型對前面的模型進行優(yōu)化,它使會話備份的網(wǎng)絡(luò)流量隨節(jié)點數(shù)量的增加呈線性趨勢增長,每個會話只會有一個備份,大大減少了網(wǎng)絡(luò)流量和邏輯操作,此模型可構(gòu)建較大的集群。生產(chǎn)上可以組成十個以上的節(jié)點作為一個集群。

對于集群備份會話管理器,可通過配置server.xml文件使用它,它的配置與DeltaManager的配置基本相似,在<cluster>節(jié)點下添加一個子節(jié)點<Manager className="org.apache.catalina.ha.session.BackupManager"/>。

新聞名稱:tomcat集群機制剖析及其生產(chǎn)部署選型
URL標(biāo)題:http://jinyejixie.com/article34/choope.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、App設(shè)計營銷型網(wǎng)站建設(shè)、Google手機網(wǎng)站建設(shè)、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
安顺市| 满洲里市| 柳州市| 抚顺县| 印江| 界首市| 井研县| 定边县| 定边县| 沈阳市| 永登县| 新乡市| 通州区| 义马市| 凌源市| 宜昌市| 罗源县| 清徐县| 洛宁县| 梁河县| 饶河县| 黄石市| 广河县| 秦皇岛市| 开阳县| 新津县| 杂多县| 牙克石市| 古丈县| 嘉定区| 溧水县| 铜陵市| 西华县| 石首市| 安吉县| 广昌县| 西畴县| 盐池县| 康定县| 临朐县| 敖汉旗|