溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

TOMCAT5 集群中的SESSION復(fù)制-第2部分

發(fā)布時(shí)間:2020-08-05 11:54:29 來源:ITPUB博客 閱讀:150 作者:rainytag 欄目:編程語言
作者:
Srini Penchikala;Sunny983
原文地址:http://www.onjava.com/pub/a/onjava/2004/12/15/replication2.html
中文地址:
http://www.matrix.org.cn/resource/article/43/43865_Tomcat_Clustering.html
關(guān)鍵詞: Tomcat Clustering

本文是有關(guān)在TOMCAT5容器中進(jìn)行SESSION復(fù)制系列的第2部分。在第一部分中,我對(duì)相對(duì)sticky的已復(fù)制的SESSION以及SESSION復(fù)制設(shè)計(jì)所要注意的一些事項(xiàng)給出了個(gè)概要。我同樣討論了在一個(gè)TOMCAT集群中SESSION復(fù)制是怎樣工作的,特別是當(dāng)服務(wù)器自動(dòng)或關(guān)閉的時(shí)候。在這個(gè)部分,我將會(huì)介紹一個(gè)樣例TOMCAT集群?jiǎn)?dòng)的詳細(xì)配置,比較不同的SESSION復(fù)制場(chǎng)景以及他們分別對(duì)集群性能的影響。


Tomcat 5集群中的SESSION復(fù)制 第一部分:http://www.matrix.org.cn/resource/article/43/43865_Tomcat_Clustering.html


集群安裝

為了在TOMCAT5容器中SESSION復(fù)制可用,必須完成以下步驟:
● 為了集群能夠工作,你必須使用你系統(tǒng)上的多點(diǎn)傳送可使用
● 為了有些使用SESSION復(fù)制,所有TOMCAT例程必須同樣配置。這意味著WEB應(yīng)用程序必須統(tǒng)一的部署在集群中的每臺(tái)服務(wù)器上。這些配置同樣簡(jiǎn)化了集群管理,維護(hù)和發(fā)現(xiàn)維修故障的任務(wù)。
● 在server.xml未注釋的Cluster 和Valve (ReplicationValve) 元素。起用server.xm中的CLUSTER元素意味著所有WEB CONTEXT的SESSION管理器將會(huì)改變。因此 當(dāng)運(yùn)行一個(gè)集群的時(shí)候,你應(yīng)該確保只有一個(gè)需要被集成WEB應(yīng)用程序并且移除其他的。
● 如果服務(wù)器例程運(yùn)行在同樣的機(jī)器上,應(yīng)該確保每個(gè)例程的tcpListenPort屬性是一致的。
● 確保web.xml有distributable屬性
● 所有的SESSION屬性必須實(shí)現(xiàn)java.io.Serializable接口

范例集群安裝有兩個(gè)TOMCAT例程和一個(gè)負(fù)載平衡用于分配服務(wù)器間的請(qǐng)求。所有三個(gè)服務(wù)器都運(yùn)行在一個(gè)單獨(dú)的機(jī)器上,以下表格列出了集群和負(fù)載平衡上的配置參數(shù)。

TOMCAT5 集群中的SESSION復(fù)制-第2部分



編輯注解:以上Web App Directory中的值為了適應(yīng)排版而換行了。在你的部署中,每個(gè)值應(yīng)該是單一而完整的一行

注意:不要設(shè)置tcpListenAddress為127.0.0.1,因?yàn)?27用于回環(huán)地址,在SESSION復(fù)制期間可能會(huì)出現(xiàn)問題。


負(fù)載平衡器安裝

TOMCAT服務(wù)器不提供失效轉(zhuǎn)移能力用于當(dāng)一個(gè)集群接點(diǎn)失效的時(shí)候重定向任何引入的請(qǐng)求到下一個(gè)可用的服務(wù)器上。所以我使用一個(gè)分開的負(fù)載平衡器去管理WEB請(qǐng)求的負(fù)載平衡。有一些流行的負(fù)載平衡器例如Apache/mod_jk, Balance, 和 Pen。我在范例集群安裝中使用Pen作為負(fù)載平衡器。

Pen是一個(gè)簡(jiǎn)單的,基于TCP協(xié)議,例如HTTP或者SMTP的負(fù)載平衡器。他允許多個(gè)服務(wù)器對(duì)外表現(xiàn)為一個(gè)服務(wù)器,并且自動(dòng)檢測(cè)關(guān)閉的服務(wù)器,在可用的服務(wù)器間分配客戶斷。他提供了負(fù)載平衡和失效轉(zhuǎn)移能力。Pen易于安裝以及配置,非常容易使用和運(yùn)行在Windows和UNIX操做系統(tǒng)上。范例配置使用round-robin負(fù)載平衡算法用于在集群節(jié)點(diǎn)間分配負(fù)載平衡

運(yùn)行負(fù)載平衡器的命令如下:
pen -r -a -f -d localhost:8080 192.168.0.10:9080 192.168.0.20:10080

以下是用于啟動(dòng)負(fù)載平衡器的每個(gè)命令行參數(shù)的解釋
-r: 使用round robin負(fù)載平衡
-a: 打印來回發(fā)送的ASCII格式的數(shù)據(jù)
-f: 保持在前臺(tái)
-d: 起用DEBUG模式

想要知道更多用于啟動(dòng)PEN的參數(shù)細(xì)節(jié),請(qǐng)?jiān)L問PEN網(wǎng)站
圖表1展示了兩個(gè)集群節(jié)點(diǎn),一個(gè)負(fù)載平衡器,儀器層,以及測(cè)試客戶端的拓?fù)鋱D


TOMCAT5 集群中的SESSION復(fù)制-第2部分


Figure 1. Cluster setup diagram

測(cè)試安裝

我創(chuàng)建了一個(gè)叫做clusterapp的WEB應(yīng)用程序來驗(yàn)證集群安裝以及SESSION復(fù)制原理。為了測(cè)試真實(shí)的SESSION復(fù)制,我寫了一個(gè)叫做SessionReplicationClient的簡(jiǎn)單JAVA客戶端用語測(cè)試從一個(gè)服務(wù)器拷貝SESSION數(shù)據(jù)到另外一個(gè)服務(wù)器的需要的時(shí)間。這個(gè)客戶端使用Jakarta Commons HttpClient況架去創(chuàng)建和操作HTTP SESSION并且調(diào)用TOMCAT服務(wù)器上的一個(gè)SERVLET。用于測(cè)試SESSION復(fù)制的機(jī)器軟硬件配置如下:
● CPU: HP Pavilion Pentium III 800MHz
● Memory: 512MB RAM
● Hard disk: 40GB
● Operating system: Windows 2000 server
● JDK version: 1.4.2_05 (Note: JDK 1.4 or later version is required to use clustering and session replication)
● Tomcat version: 5.0.28
● Tools: Pen, Log4J, Eclipse, Commons HttpClient

當(dāng)一個(gè)復(fù)制客戶端程序運(yùn)行的時(shí)候,他首先設(shè)置一個(gè)作用指令用于這樣操縱SESSION(例如,添加一個(gè)新的屬性到SESSION,從SESSION中移除一個(gè)已存在的屬性,或則讓一個(gè)SESSION失效)。然后客戶端通過在Commons HttpClient框架使用HttpClient和PostMethod類調(diào)用ReplicationServlet?;谶@些SESSION命令,servlet生成一個(gè)新的SEESION或者修改一個(gè)已經(jīng)存在的SESSION并且轉(zhuǎn)到一個(gè)WEB頁(yè)面中瞻示SESSION細(xì)節(jié)。如果在管理SESSION中有任何錯(cuò)誤,則轉(zhuǎn)到一個(gè)錯(cuò)誤頁(yè)面。我寫了一個(gè)定制的SESSION監(jiān)聽類(ClusterAppSessionListener)用于跟蹤SESSION管理的細(xì)節(jié),例如新SESSION的創(chuàng)建,修改或則終止已經(jīng)存在的SEESION。

圖表2展現(xiàn)了SESSION復(fù)制流程


TOMCAT5 集群中的SESSION復(fù)制-第2部分


Figure 2. Session replication sequence diagram

服務(wù)器上的SESSION狀態(tài)通過每個(gè)WEB請(qǐng)求的COOKIE跟蹤,所以為了保持使用同樣的SESSION,從客戶端發(fā)出的請(qǐng)求URL必須一樣。另外,在每次請(qǐng)求都創(chuàng)建一個(gè)新的HTTP SESSION。我使用了兩種類型的,基于添加到SESSION中的屬性類別的測(cè)試方法去測(cè)試復(fù)制。

第一個(gè)類別有100個(gè)輕量對(duì)象(每個(gè)1K)添加到SESSION。第2個(gè)類別中,我添加了一個(gè)單一的大對(duì)象(100K)去比較基于SESSION屬性大小的SESSION復(fù)制所花費(fèi)的時(shí)間

以下列出了SessionReplicationClient的測(cè)試規(guī)格:
● 客戶端線程數(shù):2
● 旋環(huán)次數(shù):1000
● 請(qǐng)求延遲:1000 milliseconds
● 測(cè)試范例數(shù):1000
● SESSION屬性:?。?00個(gè)1K大小的對(duì)象)或則大(一個(gè)100K大小的對(duì)象)

使用指定參數(shù)運(yùn)行測(cè)試客戶端的命令如下:
java -Dlog4j.configuration=log4j.xml com.clusterapp.test.SessionReplicationClient 2 192.168.0.10 9080 1000 1000 lite

測(cè)試環(huán)境包括使用不同的SESSION管理器(SimpleTcpReplicationManager 或則 DeltaManager)和SESSION復(fù)制模式(同步,異步,池),以下表格列出了在TOMCAT集群中的一系列測(cè)試環(huán)境:


TOMCAT5 集群中的SESSION復(fù)制-第2部分



想要把復(fù)制模式從池該到同步或異步,只要在server.xml文件中的SENDER標(biāo)志中修改replicationMode屬性值就可以了。同樣,要改變SESSION管理器的類型,只要改變Cluster元素的managerClassName屬性。

以下參數(shù)用于比較反應(yīng)時(shí)間和SESSION復(fù)制的效率:
● 平均反映時(shí)間(ms)
● 平均請(qǐng)求時(shí)間(ms)
● 集群開銷時(shí)間(ms)
● 復(fù)制時(shí)間(ms)
● 比率(bytes/ms)
● 比率(bytes/request)

測(cè)試結(jié)果


delta管理器和池復(fù)制模式相結(jié)合使用對(duì)與SESSION復(fù)制效率是最好的標(biāo)準(zhǔn)。同樣,保持SESSION大小較小可以比復(fù)制大SESSION快2到3倍。


TOMCAT5 集群中的SESSION復(fù)制-第2部分



復(fù)制管理器
DeltaManager在SESSION復(fù)制方面更有效,因?yàn)樗麅H僅處理SESSION deltas而不是全部的SESSION數(shù)據(jù)。使用DeltaManager,與使用簡(jiǎn)單復(fù)制管理器比較,SESSION復(fù)制效率會(huì)提高30%(大SESSION)到50%(小SESSION)。

復(fù)制模式
與其他兩個(gè)選項(xiàng)(同步和異步)比較,池復(fù)制模式復(fù)制SESSION花費(fèi)更好的時(shí)間。在一個(gè)復(fù)制時(shí)間內(nèi),池選項(xiàng)幾乎是同意選項(xiàng)的 4倍快。但是在反應(yīng)時(shí)間和集群開銷時(shí)間方面,池和同步模式幾乎一樣,因?yàn)樵谕侥J嚼铮涸诜祷厍安挥玫却齋ESSIONG完成復(fù)制

綜述
基于SESSION復(fù)制測(cè)試的結(jié)果,我們得出結(jié)論:應(yīng)該在任何可能時(shí)候使用DeltaManager。因?yàn)閺?fù)制SESSION數(shù)據(jù)的開銷是意義重大的,必須確保沒有在SESSION中存儲(chǔ)太多的數(shù)據(jù)同樣,添加到SESSION中的屬性大小也是影響到SESSION復(fù)制時(shí)間的另一個(gè)因素。當(dāng)我運(yùn)行測(cè)試在SESSION存儲(chǔ)大對(duì)象(100K)的時(shí)候,與在SESSION中存儲(chǔ)小對(duì)象(1K)相比較,復(fù)制時(shí)間非常高。想要最小化SESSION復(fù)制開銷最好的方法是避免調(diào)用session.setAttribute()以及把數(shù)據(jù)存儲(chǔ)在請(qǐng)求對(duì)象中而不是SESSION中。這樣相對(duì)更好因?yàn)楫?dāng)WEB請(qǐng)求完成的時(shí)候請(qǐng)求屬性會(huì)被重置。同樣,如果沒有商業(yè)方面的原因要在服務(wù)器存儲(chǔ)數(shù)據(jù),我們可以以COOKIES的形式在客戶端存儲(chǔ)數(shù)據(jù)。這種方法完全避免了使用任何SESSIOIN的需要。

一種最小化SESSION復(fù)制時(shí)間開銷的方法是限制集群中到兩個(gè)或則三個(gè)服務(wù)器上的服務(wù)器例程數(shù)目。這樣當(dāng)?shù)谝粋€(gè)服務(wù)器失敗的時(shí)候第一個(gè)服務(wù)器上的SESSION數(shù)據(jù)已經(jīng)被拷貝到第二個(gè)服務(wù)器上。為了保持網(wǎng)絡(luò)暢通,集群可以分割成小塊的組,每個(gè)組包括兩個(gè)或則三個(gè)服務(wù)器例程。記住,集群中的服務(wù)器越多,SESSION復(fù)制花費(fèi)的時(shí)間也越多。目前TOMCAT5不支持首要/次要復(fù)制的概念。在以后發(fā)布的版本中將會(huì)有,這樣我們將可以在一個(gè)或則兩個(gè)備份服務(wù)器上存儲(chǔ)SESSION。擁有這個(gè)特性的話,TOMCAT將會(huì)為在集群環(huán)境中運(yùn)行WEB服務(wù)器提供更全面的SESSION復(fù)制方法。

在未來TOMCAT將會(huì)支持的一些屬性:
● 擁有在SESSION中存在非序列化的屬性的能力,集群將會(huì)忽略該屬性
● 擁有復(fù)制context屬性以及非序列化的相關(guān)數(shù)據(jù)的能力,例如JDBC連接池和對(duì)象CACHES。

這些特性將會(huì)使在TOMCAT集群中的SESSION復(fù)制更強(qiáng)壯和靈活。[@more@]
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI