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