摘 要: 用戶會(huì)話信息一致性是影響集群負(fù)載均衡的一個(gè)重要因素。在研究當(dāng)前負(fù)載均衡集群系統(tǒng)中會(huì)話保持機(jī)制的基礎(chǔ)上,針對(duì)會(huì)話復(fù)制方法中隨著請(qǐng)求增加導(dǎo)致網(wǎng)絡(luò)阻塞的問(wèn)題,提出一種添加了動(dòng)態(tài)會(huì)話集中存儲(chǔ)設(shè)備的會(huì)話復(fù)制機(jī)制。經(jīng)模擬驗(yàn)證,該方法在較大規(guī)模集群環(huán)境下穩(wěn)定響應(yīng)多用戶請(qǐng)求,平均響應(yīng)時(shí)間仍處于相對(duì)穩(wěn)定狀態(tài),滿足大型企業(yè)級(jí)應(yīng)用的會(huì)話處理需要。
關(guān)鍵詞: 集群;負(fù)載均衡;會(huì)話保持機(jī)制;會(huì)話復(fù)制
1 研究綜述
1.1 負(fù)載均衡技術(shù)
隨著計(jì)算機(jī)技術(shù)的發(fā)展,服務(wù)器性能成為影響大型應(yīng)用系統(tǒng)的關(guān)鍵因素。Web服務(wù)器集群是通過(guò)高速局域網(wǎng)互連的多臺(tái)Web服務(wù)器組成的,用戶的HTTP請(qǐng)求被均衡地、透明地分配到集群中具體的服務(wù)器上,由其完成請(qǐng)求響應(yīng)過(guò)程,并將響應(yīng)結(jié)果返回給用戶[1]。在性能、可靠性、靈活性方面,服務(wù)器集群比直接升級(jí)單臺(tái)服務(wù)器有相對(duì)較高的效益。
集群服務(wù)器的一個(gè)重要技術(shù)是集群內(nèi)部用戶請(qǐng)求的均衡分配——負(fù)載均衡。負(fù)載均衡技術(shù)能夠根據(jù)各個(gè)服務(wù)器處理能力,合理地給各個(gè)服務(wù)器分配相應(yīng)的請(qǐng)求任務(wù),均衡分配任務(wù)的過(guò)程對(duì)用戶來(lái)說(shuō)是完全透明的[2]。
1.2 負(fù)載均衡下的會(huì)話保持機(jī)制
目前,HTTP協(xié)議[3]是Web應(yīng)用中使用最廣泛的應(yīng)用層協(xié)議,采用分布式協(xié)作的方式和請(qǐng)求/響應(yīng)模式的無(wú)狀態(tài)協(xié)議。Web應(yīng)用不保存與任何客戶機(jī)通信的狀態(tài),只負(fù)責(zé)對(duì)到來(lái)的當(dāng)前請(qǐng)求進(jìn)行處理,因此需要一定的機(jī)制保持會(huì)話。對(duì)于負(fù)載均衡集群,應(yīng)該保證無(wú)論請(qǐng)求被分配到哪個(gè)節(jié)點(diǎn),用戶請(qǐng)求對(duì)應(yīng)的會(huì)話信息應(yīng)該相同,實(shí)現(xiàn)節(jié)點(diǎn)之間的信息一致。
會(huì)話保持機(jī)制主要實(shí)現(xiàn)方式分為Cookie機(jī)制和會(huì)話機(jī)制。Cookie機(jī)制將用戶信息存放在客戶瀏覽器中,隨著用戶發(fā)送的請(qǐng)求一起傳遞給服務(wù)器。因受到請(qǐng)求大小的限制和安全問(wèn)題,它不適合存放敏感性的用戶信息。因此,在會(huì)話保持機(jī)制中,Session機(jī)制很常用,它通過(guò)將整個(gè)用戶會(huì)話過(guò)程中保持其狀態(tài)的信息存儲(chǔ)在服務(wù)器端來(lái)實(shí)現(xiàn)。
目前LB集群系統(tǒng)中,常用的會(huì)話保持機(jī)制[4]有如下幾種:
?。?)以負(fù)載均衡服務(wù)器入手,管理某個(gè)用戶的請(qǐng)求和這些請(qǐng)求被分配到的集群機(jī)的對(duì)應(yīng)關(guān)系,通過(guò)查詢關(guān)系表,將請(qǐng)求分配到之前被分配到的集群機(jī)上進(jìn)行服務(wù)。
?。?)負(fù)載均衡系統(tǒng)中,在多臺(tái)服務(wù)器間根據(jù)處理需要傳遞復(fù)制會(huì)話信息,實(shí)現(xiàn)會(huì)話復(fù)制策略。用戶請(qǐng)求發(fā)送之后,系統(tǒng)會(huì)自動(dòng)查詢是否已經(jīng)產(chǎn)生對(duì)應(yīng)的會(huì)話信息,然后進(jìn)行會(huì)話處理。
?。?)從應(yīng)用程序的會(huì)話管理入手,不將會(huì)話數(shù)據(jù)保存在集群機(jī)本地,而是所有集群機(jī)使用同一個(gè)會(huì)話數(shù)據(jù)緩存區(qū),集群機(jī)通過(guò)查詢會(huì)話緩存區(qū)獲取該用戶的Session id對(duì)應(yīng)的數(shù)據(jù)。
1.3 會(huì)話保持中的會(huì)話復(fù)制機(jī)制
在LB集群系統(tǒng)中,也常常采用會(huì)話復(fù)制機(jī)制維護(hù)集群中的用戶信息。會(huì)話復(fù)制機(jī)制的主要實(shí)現(xiàn)方式是:通過(guò)序列化,將存儲(chǔ)在內(nèi)存的會(huì)話信息轉(zhuǎn)換成可以傳輸?shù)男问?,然后通過(guò)廣播將消息傳遞給集群內(nèi)部其他節(jié)點(diǎn),節(jié)點(diǎn)接收?qǐng)?bào)文并進(jìn)行相應(yīng)處理,從而使集群系統(tǒng)中每個(gè)節(jié)點(diǎn)都存儲(chǔ)著同樣的會(huì)話庫(kù)。
這種機(jī)制的優(yōu)點(diǎn)是負(fù)載均衡設(shè)備對(duì)任務(wù)分配的靈活性高,系統(tǒng)的穩(wěn)定性強(qiáng),具有良好的可靠性和高性能,而且不會(huì)因?yàn)槌霈F(xiàn)單個(gè)節(jié)點(diǎn)故障而丟失會(huì)話信息。缺點(diǎn)主要是應(yīng)用規(guī)模小。增加節(jié)點(diǎn)會(huì)造成傳遞會(huì)話復(fù)制信息的工作量加重,造成節(jié)點(diǎn)性能下降,引發(fā)廣播風(fēng)暴。
2 改進(jìn)的會(huì)話復(fù)制機(jī)制
會(huì)話復(fù)制機(jī)制的優(yōu)點(diǎn)適用于負(fù)載均衡集群。但是,對(duì)于集群規(guī)模較大的企業(yè)級(jí)應(yīng)用系統(tǒng),會(huì)話復(fù)制機(jī)制往往不合適。本次研究的主要目的是改進(jìn)會(huì)話復(fù)制機(jī)制,使該機(jī)制適用于中大型企業(yè)。
復(fù)制會(huì)話信息消耗每個(gè)節(jié)點(diǎn)的內(nèi)存和網(wǎng)絡(luò)帶寬,是限制群集的規(guī)模的主要原因。進(jìn)而,為了控制廣播中傳遞的會(huì)話信息量,提出將會(huì)話信息分解,穩(wěn)定的會(huì)話信息部分選擇會(huì)話復(fù)制機(jī)制,數(shù)據(jù)量大且變化大的部分采取集中存儲(chǔ)機(jī)制的會(huì)話機(jī)制,盡量減少在會(huì)話復(fù)制過(guò)程中復(fù)制和廣播的信息量,使會(huì)話復(fù)制機(jī)制更適用于大型應(yīng)用系統(tǒng)。
2.1 改進(jìn)方法的硬件部署方案
改進(jìn)后的會(huì)話復(fù)制機(jī)制采用會(huì)話復(fù)制為核心,集中存儲(chǔ)設(shè)備為輔助。具體的服務(wù)器端的硬件部署模型如圖1所示。服務(wù)器端集群多由若干個(gè)中小型規(guī)模集群組成。負(fù)載均衡平臺(tái)的主要功能是轉(zhuǎn)發(fā)用戶請(qǐng)求,對(duì)任務(wù)進(jìn)行分配。負(fù)載均衡器接受用戶發(fā)送的請(qǐng)求,針對(duì)當(dāng)前系統(tǒng)中的服務(wù)器節(jié)點(diǎn)的狀態(tài),均衡分配用戶的請(qǐng)求。負(fù)載均衡器對(duì)集群系統(tǒng)的負(fù)載均衡起到總體調(diào)控的作用。
集群中包含了服務(wù)器集群、數(shù)據(jù)庫(kù)集群以及系統(tǒng)備份和企業(yè)級(jí)業(yè)務(wù)。其中,企業(yè)級(jí)業(yè)務(wù)包括FTP服務(wù)、郵件服務(wù)和企業(yè)內(nèi)部管理平臺(tái)。備份服務(wù)器采用雙機(jī)備份的原則,當(dāng)負(fù)載均衡設(shè)備出現(xiàn)故障時(shí),便于系統(tǒng)的恢復(fù)。
為了解決會(huì)話復(fù)制過(guò)程中大量數(shù)據(jù)復(fù)制的問(wèn)題,在集群結(jié)構(gòu)的內(nèi)部添加了會(huì)話集中存儲(chǔ)設(shè)備。該設(shè)備用于存儲(chǔ)穩(wěn)定性較差的會(huì)話信息,對(duì)該部分?jǐn)?shù)據(jù)進(jìn)行統(tǒng)一的管理,采取點(diǎn)對(duì)點(diǎn)的傳遞方式,僅限于處理節(jié)點(diǎn)與會(huì)話存儲(chǔ)設(shè)備之間的不穩(wěn)定數(shù)據(jù)傳輸。
對(duì)于同一用戶的會(huì)話數(shù)據(jù),根據(jù)不同的穩(wěn)定性,將用戶的會(huì)話數(shù)據(jù)劃分為靜態(tài)數(shù)據(jù)部分和動(dòng)態(tài)數(shù)據(jù)部分。靜態(tài)會(huì)話數(shù)據(jù)變化不大,數(shù)據(jù)量相對(duì)較小,具有一定的穩(wěn)定性,如用戶名、系統(tǒng)參數(shù)等,采用會(huì)話復(fù)制的形式。動(dòng)態(tài)會(huì)話信息包含一些隨著時(shí)間變化而改變的數(shù)據(jù),這些數(shù)據(jù)本身具有復(fù)雜性,如購(gòu)物車(chē)、表單、實(shí)時(shí)數(shù)據(jù)等。將這部分?jǐn)?shù)據(jù)的處理放在處理節(jié)點(diǎn)和集中存儲(chǔ)設(shè)備上,有效地控制這部分?jǐn)?shù)據(jù)傳播的規(guī)模,而且點(diǎn)對(duì)點(diǎn)的傳輸處理也減少了對(duì)集群內(nèi)部帶寬的占用。
2.2 機(jī)制的實(shí)現(xiàn)
改進(jìn)后的會(huì)話復(fù)制機(jī)制,具體實(shí)現(xiàn)流程如圖2所示。
?。?)假設(shè)用戶A訪問(wèn)系統(tǒng)時(shí),服務(wù)器端接收用戶請(qǐng)求,由負(fù)載均衡平臺(tái)進(jìn)行任務(wù)分配處理。負(fù)載均衡器動(dòng)態(tài)或靜態(tài)地監(jiān)控集群中各個(gè)節(jié)點(diǎn)的負(fù)載狀態(tài),將任務(wù)分配到負(fù)載相對(duì)較低的節(jié)點(diǎn)上。負(fù)載均衡平臺(tái)可通過(guò)軟件或者硬件實(shí)現(xiàn),對(duì)集群負(fù)載起到總體調(diào)控的作用。假設(shè)負(fù)載均衡器根據(jù)當(dāng)前集群狀態(tài)將任務(wù)分配到節(jié)點(diǎn)X。
?。?)接收到請(qǐng)求后,節(jié)點(diǎn)X會(huì)進(jìn)行相應(yīng)的處理。首先,服務(wù)器X從用戶請(qǐng)求中查詢請(qǐng)求數(shù)據(jù)中的會(huì)話ID。
?、偃绻?qǐng)求中沒(méi)有會(huì)話ID,或節(jié)點(diǎn)X沒(méi)有從本機(jī)會(huì)話庫(kù)中查詢到該會(huì)話ID,集群系統(tǒng)中沒(méi)有用戶A的會(huì)話信息,則節(jié)點(diǎn)X為用戶A創(chuàng)建對(duì)應(yīng)的會(huì)話信息。在會(huì)話創(chuàng)建完成后,分離出會(huì)話中的動(dòng)態(tài)數(shù)據(jù)和靜態(tài)數(shù)據(jù)。靜態(tài)會(huì)話直接通過(guò)廣播的形式發(fā)送到集群中的每臺(tái)服務(wù)器。動(dòng)態(tài)數(shù)據(jù)在完成用戶請(qǐng)求后,再發(fā)送至動(dòng)態(tài)會(huì)話集中存儲(chǔ)設(shè)備。
?、谌绻麜?huì)話庫(kù)中包含對(duì)應(yīng)的會(huì)話ID,則節(jié)點(diǎn)X先從會(huì)話庫(kù)中得到對(duì)應(yīng)的靜態(tài)數(shù)據(jù)。然后,發(fā)送動(dòng)態(tài)數(shù)據(jù)請(qǐng)求給動(dòng)態(tài)會(huì)話集中存儲(chǔ)區(qū)。從回復(fù)消息中,提取相應(yīng)的動(dòng)態(tài)會(huì)話數(shù)據(jù)。服務(wù)器X將動(dòng)態(tài)數(shù)據(jù)和靜態(tài)數(shù)據(jù)結(jié)合在一起,得到用戶完整的會(huì)話信息。
?。?)經(jīng)過(guò)第(2)步得到完整的會(huì)話信息后,處理用戶的請(qǐng)求,根據(jù)請(qǐng)求的內(nèi)容進(jìn)行相關(guān)處理,將處理結(jié)果返回給用戶。處理結(jié)果中包含會(huì)話ID,服務(wù)器將會(huì)話ID作為Cookie的一個(gè)屬性發(fā)送給客戶端,用戶后續(xù)訪問(wèn)將自動(dòng)攜帶該Cookie屬性。
?。?)任務(wù)完成后,服務(wù)器中存儲(chǔ)的該用戶動(dòng)態(tài)會(huì)話信息可能發(fā)生改變。這時(shí)服務(wù)器X需要向動(dòng)態(tài)會(huì)話集中存儲(chǔ)設(shè)備發(fā)送存儲(chǔ)/更新動(dòng)態(tài)會(huì)話數(shù)據(jù)的命令,存儲(chǔ)/更新對(duì)應(yīng)的動(dòng)態(tài)會(huì)話數(shù)據(jù)信息。若設(shè)備中沒(méi)有該會(huì)話ID,則直接存儲(chǔ)新用戶的動(dòng)態(tài)數(shù)據(jù)。根據(jù)處理后的會(huì)話信息中靜態(tài)數(shù)據(jù)是否改變,決定是否發(fā)送廣播消息。
這種模式下,服務(wù)器處理完用戶請(qǐng)求后,一般的數(shù)據(jù)處理中,靜態(tài)數(shù)據(jù)具有穩(wěn)定性,廣播一次就能實(shí)現(xiàn)同步。更新的動(dòng)態(tài)數(shù)據(jù)需要從處理節(jié)點(diǎn)發(fā)送到動(dòng)態(tài)數(shù)據(jù)管理設(shè)備進(jìn)行存儲(chǔ),由集中數(shù)據(jù)管理器進(jìn)行存儲(chǔ)處理。
3 模擬驗(yàn)證
為了驗(yàn)證改進(jìn)后Session復(fù)制算法的性能,使用同一應(yīng)用系統(tǒng)分別采用不同的會(huì)話支持技術(shù)進(jìn)行比較分析。在模擬過(guò)程中,應(yīng)用系統(tǒng)采用“青島某服裝企業(yè)供應(yīng)鏈系統(tǒng)”,搭建的集群環(huán)境采用八臺(tái)處理機(jī),其中一臺(tái)為主服務(wù)器,作負(fù)載均衡器。采用Tomcat進(jìn)行服務(wù)器集群及負(fù)載均衡。Session集中存儲(chǔ)設(shè)備的大小配置為256 GB(根據(jù)需要更改大小)。
如表1所示,采用tomcat集群中復(fù)制模式(會(huì)話復(fù)制)、Session集中存儲(chǔ)模式和包含動(dòng)態(tài)Session集中存儲(chǔ)區(qū)的會(huì)話復(fù)制方式進(jìn)行性能比較。
模擬結(jié)果如圖3所示,在初始階段,處理性能都很高。當(dāng)用戶請(qǐng)求增加到一定數(shù)量時(shí),服務(wù)器的性能下降,傳統(tǒng)會(huì)話復(fù)制機(jī)制會(huì)因節(jié)點(diǎn)間傳遞信息量的劇增導(dǎo)致響應(yīng)時(shí)間增大。會(huì)話集中存儲(chǔ)方式下,因節(jié)點(diǎn)等待訪問(wèn)存儲(chǔ)用戶數(shù)據(jù),響應(yīng)時(shí)間相對(duì)改進(jìn)后的算法較長(zhǎng)。動(dòng)態(tài)會(huì)話集中存儲(chǔ)下的會(huì)話復(fù)制模式由于查找會(huì)話ID以及廣播數(shù)據(jù)量相對(duì)較少,雖然加重了節(jié)點(diǎn)對(duì)會(huì)話數(shù)據(jù)的處理,但隨著用戶訪問(wèn)量的增多,系統(tǒng)處理效率仍處于相對(duì)穩(wěn)定的狀態(tài)。
綜上所述,動(dòng)態(tài)會(huì)話集中存儲(chǔ)下的會(huì)話復(fù)制模式在平均響應(yīng)時(shí)間比較穩(wěn)定地增長(zhǎng)、系統(tǒng)訪問(wèn)量劇增時(shí),系統(tǒng)處理性能仍然穩(wěn)定,適用于節(jié)點(diǎn)數(shù)目相對(duì)較大的集群系統(tǒng)。
4 結(jié)束語(yǔ)
針對(duì)會(huì)話復(fù)制方法無(wú)法適應(yīng)大規(guī)模集群系統(tǒng)的問(wèn)題,提出了動(dòng)態(tài)會(huì)話集中存儲(chǔ)的會(huì)話復(fù)制機(jī)制,將靜態(tài)會(huì)話數(shù)據(jù)采取會(huì)話復(fù)制策略,而動(dòng)態(tài)部分采取集中存儲(chǔ)的策略,進(jìn)而滿足負(fù)載均衡系統(tǒng)中會(huì)話一致的要求。經(jīng)實(shí)驗(yàn)驗(yàn)證,該方法可靠性好,性能穩(wěn)定,可滿足大型應(yīng)用平臺(tái)的會(huì)話需求。如何提高動(dòng)態(tài)會(huì)話集中存儲(chǔ)下的會(huì)話復(fù)制方法的穩(wěn)定性是之后的研究重點(diǎn)。
參考文獻(xiàn)
[1] 郭成城,晏蒲柳.一種異構(gòu)Web服務(wù)器集群動(dòng)態(tài)負(fù)載均衡算法[J].計(jì)算機(jī)學(xué)報(bào),2005,28(2):179-184.
[2] 陳一驕,盧錫城,時(shí)向泉,等.一種面向會(huì)話的自適應(yīng)負(fù)載均衡算法[J].軟件學(xué)報(bào),2008,19(7):1828-1836.
[3] 趙章界,余智華,張丙奇.HTTP協(xié)議流解析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2005,31(24):38-40,46.
[4] 趙涓涓,劉濤,強(qiáng)彥,等.云計(jì)算中基于Session和內(nèi)容等級(jí)的數(shù)據(jù)庫(kù)請(qǐng)求分類(lèi)算法[J].計(jì)算機(jī)科學(xué),2013(2),40:177-179.