曹海濤, 胡 牧, 蔣厚明
?
基于集群節點間即時拷貝的會話同步技術研究①
曹海濤, 胡 牧, 蔣厚明
(南瑞集團公司(國網電力科學研究院), 南京 210003)
集群會話同步技術目前主要有如下幾種: 基于Cookie的會話同步, 基于數據庫的會話同步, 基于分布式緩存的會話同步. 在以上會話同步技術的基礎上, 提出了一種基于集群節點間即時拷貝的會話同步技術, 將會話標識信息存放在客戶端中, 避免了在客戶端中存放完整的會話信息, 從而可防止用戶身份信息暴露的安全隱患; 同時, 在客戶端向服務器發送請求的過程中, 只攜帶會話標識信息, 而不是完整的會話信息, 傳輸的數據量將大大減少, 提高了客戶端對服務器的訪問效率; 各集群節點間同步會話信息, 不需要從數據庫中獲取會話信息, 避免了頻繁使用數據庫帶來的性能瓶頸; 也不需要使用專門的會話緩存服務器, 減低了開發和部署成本, 并具有良好的應用前景.
集群服務; 會話; 會話同步; 即時拷貝
用戶使用Web服務, 基本上需要客戶端與Web 服務器的多次交互. 而同一個用戶和服務端的交互, 稱為用戶和服務器之間的會話. HTTP 協議本身是無狀態的, 用戶與Web應用交互過程信息(如購物車信息、用戶狀態、用戶記錄等)就只能依靠會話(session)技術[1], 需要基于HTTP 協議支持會話狀態的機制. 而這樣的機制能使Web 服務器從多次單獨的HTTP 請求中看到“會話”, 也就是知道請求是來自哪個會話的[2]. 具體實現方式為: 在會話開始時, 分配唯一的會話標識(SessionId), 通過某種手段把這個標識告訴客戶端, 以后每次請求的時候, 客戶端都會帶上這個會話標識來告訴Web 服務器請求是屬于哪個會話的. Web服務器集群是通過高速局域網互聯的多臺Web服務器組成的, 用戶的HTTP請求被均衡地、透明地分配到集群中具體的服務器上, 由其完成請求響應過程, 并將響應信息返回給用戶[3]. 假設來自同一客戶端的兩次請求被分發到了兩臺不同的Web服務器上, 而這兩次請求之間又存在關聯(如: 第一次請求是用戶登錄, 第二次請求是獲取信息), Web服務器需要標識這兩次請求是否來自同一個用戶. 此時就需要使用會話同步技術, 會話同步技術是用來解決集群環境中, 組成集群的各個Web服務器如何標識某一次客戶端的請求是否屬于同一會話的. 本文所討論的會話同步技術屬于會話保持機制[4]的范疇. 目前主流的會話同步技術主要有: 基于Cookie的會話同步技術, 基于數據庫的會話同步技術和基于分布式緩存的會話同步技術.
在基于Cookie的會話同步方案中, 服務端將會話信息返回給客戶端, 客戶端將會話信息存儲在Cookie中, 客戶端每次請求時攜帶Cookie中保存的會話信息, 服務端根據Cookie中的會話信息創建會話.
在基于數據庫的會話同步方案中, 服務端將會話信息存放在數據庫中, 并將會話ID返回給客戶端, 客戶端保存會話ID信息, 客戶端再次請求時, 各集群節點根據客戶端攜帶的會話ID從數據庫中獲取會話信息.
在基于分布式緩存的會話同步方案中, 服務端將會話信息存放在分布式緩存服務器上, 并將會話ID返回給客戶端, 客戶端保存會話ID信息, 客戶端再次請求時, 各集群節點根據會話ID從分布式緩存服務器上獲取會話信息.
在此基礎上, 本文提出了一種基于集群節點間即時拷貝的會話同步技術, 并將此技術應用于某企業移動應用項目的后臺服務架構中, 取得了良好的效果.
2.1 技術原理
基于集群節點間即時拷貝的會話同步技術實現原理如下:
(1) 客戶端第一次訪問集群服務時, 當前服務的集群節點為客戶端創建會話并保存在內存中, 然后將會話標識反饋給客戶端, 客戶端接收并保存會話標識, 會話標識包括: 會話ID和當前服務的集群節點IP.
(2) 客戶端再次訪問集群服務時, 需要攜帶會話標識, 當前服務的集群節點根據客戶端攜帶的會話標識解析出創建該會話的集群節點IP和會話ID, 并查看本集群節點內是否存在該會話ID, 若存在, 則根據該會話ID獲取對應的會話信息; 否則, 根據創建該會話的集群節點IP和會話ID到對應的集群節點上獲取會話信息.
(3) 某一集群節點中的會話信息更新時, 此集群節點通知其他集群節點更新會話信息.
(4) 各集群節點定時清理超時的會話信息, 以釋放服務器的內存資源.
2.2 技術實現
基于集群節點間即時拷貝的會話同步技術具體實現步驟如圖1所示.

圖1 實施流程圖
(1) 假設當前訪問的客戶端為客戶端2, 客戶端2第一次訪問集群服務時, 負載均衡服務將本次請求分發到集群節點2上, 集群節點2將為客戶端2創建會話信息生成會話標識, 并將會話標識信息返回給客戶端2.
(2) 客戶端2再次訪問集群服務時, 負載均衡服務將本次請求分發到集群節點N上(N代表任意集群節點), 集群節點N根據客戶端2攜帶的會話標識信息, 解析出集群節點2的IP和會話ID, 并根據會話ID在本節點中查找對應的會話信息, 若找到, 則將會話信息返回; 否則, 根據集群節點2的IP到集群節點2上獲取會話ID對應的會話信息. 獲取會話信息后, 根據客戶端的會話ID校驗客戶端的請求是否合法. 校驗成功后, 集群節點N將根據客戶端的請求返回響應信息.
(3) 某個集群節點更新會話信息時, 通知其他在線的集群節點更新會話信息, 具體實現方式如下: 更新會話信息的集群節點獲取其他所有在線的集群節點, 并遠程調用各集群節點的更新會話接口, 根據會話ID更新會話信息.
(4) 各集群節點定時清理無效的會話信息, 以釋放無效的會話信息所占用的服務器內存資源. 具體實現方式為: 各集群節點遍歷本節點內的會話信息, 判斷會話是否超時, 若會話超時則清理.
基于Cookie的會話同步方案, 客戶端每次請求都需要攜帶完整的會話信息, 當會話信息過大時, 會導致請求到達服務端的時間過長, 從而影響訪問效率; 并且, 不同瀏覽器對Cookie使用有不同的限制, 超過限制就會丟棄Cookie, 這會影響應用系統的正常使用[5]. 同時, 由于每次請求都需要攜帶完整的會話信息, 會增加暴露用戶信息的風險.
基于數據庫的會話同步方案, 為同步會話信息需要頻繁對數據庫進行讀寫, 在集群服務器較多, 訪問量較大時, 容易造成性能瓶頸.
基于分布式緩存的會話同步方案, 將會話信息存放在緩存服務器上, 在系統部署時必須額外增加緩存服務器, 所有對會話的操作都必須在緩存服務器上進行. 在整個系統中使用會話緩存服務器將會增加系統部署和開發的難度, 同時新增的會話緩存服務器將會帶來新的維護成本.
基于集群節點間即時拷貝的會話同步方案, 將會話信息存放在組成集群的各個節點服務器上, 解決了基于分布式緩存的會話同步方案需要額外增加緩存服務器的問題; 將會話標識存放在客戶端, 解決了基于Cookie的會話同步方案將完整的會話信息存放在客戶端的問題; 同時, 將會話信息存儲在集群服務的各個節點的內存中, 解決了基于數據庫的會話同步方案中將會話信息存儲在數據庫中所帶來的性能問題.
下表為各會話同步方案比較表, 從表中可以看出, 基于Cookie的會話同步方案, 在客戶端獲取會話時, 服務端的網絡調用次數N和數據庫訪問次數D均為0, 但是該方案是將完整的會話信息存放在Cookie中, 發送請求時需攜帶完整的會話信息, 當會話信息較大時, 必然會影響訪問效率, 同時將會話信息存儲在Cookie中, 存在泄露會話信息的風險, 安全性較低, 而其他會話同步方案, 將會話信息存儲在服務端安全性相對較高. 基于數據庫的會話同步方案, 在客戶端獲取會話時, 服務端的網絡調用次數N=0, 數據庫訪問次數D=1, 但是該方案中每次會話更新時都需要操作數據庫, 會造成性能瓶頸. 基于分布式緩存的會話同步方案中, N=1, 每次請求都需要從會話緩存服務器中獲取會話信息; 基于集群節點間即時拷貝的會話同步方案中, N<=1, 只有本節點不存在會話信息時才會到其他節點同步會話信息, 由此可以看出, 在會話信息獲取效率上, 基于集群節點間即時拷貝的會話同步方案是較優的.

表1 會話同步方案比較表
本文首先介紹客戶端和Web服務器的會話以及會話同步的相關概念, 指出在集群環境中會話同步的必要性, 并介紹目前主流的會話同步技術, 分析這些會話同步技術存在的問題. 在此基礎上提出一種新的會話同步技術: 基于集群節點間即時拷貝的會話同步技術, 重點探討了基于集群節點間即時拷貝的會話同步技術的實現原理和具體實現步驟.
需要指出的是本文提出的會話同步技術的主要實現思路是在組成集群服務的各個集群節點間復制會話信息, 以實現會話同步. 該方案也存在一定局限性, 在集群節點較多時, 頻繁地進行會話復制會帶來較大的系統開銷, 影響系統的整體性能. 在后續的工作中, 作者將對此問題進行深入分析研究.
最后, 筆者將該會話同步技術應用于某企業移動應用平臺項目中, 用于解決客戶端移動設備和后臺Web服務器集群之間的會話同步問題, 取得了良好的效果.
1趙艷芳,蔣云起.Web服務器負載均衡會話保持的研究.云南民族大學學報(自然科學版),2011,20(4):296–300.
2 曾憲杰.大型網站系統與Java中間件實踐.北京:電子工業出版社,2014,(4):42–46.
3 郭成城,晏蒲柳.一種異構Web服務器集群動態負載均衡算法.計算機學報,2005,28(2):179–184.
4 Tsai HH, Sun DW. Color image watermark extraction based on support vector machines. Information Sciences, 2007, 177(2): 550–569.
5 許令波.深入分析Java Web技術內幕.北京:電子工業出版, 2014.
Research on Session Synchronization Technology Based on Instant Copy of Cluster Node
CAO Hai-Tao, HU Mu, JIANG Hou-Ming
(Nari Group Corporation (State Grid Electric Power Research Institute), Nanjing 210003, China)
Session synchronization technology mainly has the following several: session synchronization based on cookie, session synchronization based on database, session synchronization based on distributed cache. Based on the above session synchronization technologies, this paper gives a session synchronization technology based on instant copy of cluster node. This technology stores session id information in client to avoid store full session information in client, thus avoids the danger of user identity information exposure. Besides, in the process of sending a request to the server, only taking session id instead of complete session information. This greatly reduces transmitted data, so then improves the access efficiency of the client to server. Sychronizing session information between cluster nodes, there is no need to get session information from database which avoids performance bottlenecks on using database frequently. It also does not need specialized session cache servers, which cuts the cost of development and deployment. So, it has good application prospects.
cluster service; session; session synchronization; instant copy
2016-06-24;
2016-10-12
[10.15888/j.cnki.csa.005653]