麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種在云計算環境下實現分布式會話的方法和系統的制作方法

文檔序號:7886811閱讀:548來源:國知局
專利名稱:一種在云計算環境下實現分布式會話的方法和系統的制作方法
技術領域
本發明涉及移動通信數據業務技術領域,尤其涉及一種在云計算環境下實現分布式會話的方法和系統。
背景技術
在多數的Web應用中,應用程序需要保存客戶端的狀態,以便于在同一個客戶端所訪問的頁面之間建立相互聯系。但是,一般的Web應用都是基于超文本傳輸協議(HTTP)的,而HTTP恰恰是一種無狀態協議,具有天生的無狀態性,所以一般無法保存客戶端的狀態。例如,用戶從A頁面跳轉到B頁面時會重新發送一次HTTP請求,而服務端在返回響應時卻無法獲知該用戶在請求訪問B頁面之前做了什么。因此,現有技術中的Web應用服務器一般都是通過會話(Session)的方式來保存客戶的狀態信息。例如,在JSP應用服務器中,可通過HttpSession對象來實現Session的功能。上述HttpSession表示一次會話,用來保存客戶端的狀態信息。上述客戶端的狀態信息保存在服務器端,而Session的id則保存在客戶端的Cookie中。當用戶打開瀏覽器訪問某個網站時,服務器就會在服務器的內存為該瀏覽器分配一個空間,該空間被瀏覽器獨占,這個空間就是Session空間,該空間中的數據默認存在時間為30分鐘(min)。對于一個瀏覽器而言,不同的頁面能夠共享Session空間的數據,因此可以通過Java平臺對Session機制的實現規范中所規定的各種方法來查看和使用Session對象相關信息。隨著集群服務器的出現,在構建可以靈活地進行水平擴展、高可用性的Java Web應用程序時,對HttpSession的處理策略很大程度決定了應用程序的擴展性、可用性。一般而言,對HttpSession有如下的處理方案:處理方案1:在服務器端不保存Session,完全無狀態(Stateless)。對于不需要保持用戶狀態的Web應用,采用Stateless是最為恰當的,因此就不存在 Session 共享的問題。具象狀態傳輸(REST, Representational State Transfer)是使用該處理方案的最為典型的例子。但該方案的缺點在于:只適用于無狀態應用開發環境;比如新聞網頁等。處理方案2:基于瀏覽器Cookie的Session共享。此種方案把與用戶相關的Session信息存儲到瀏覽器的Cookie中,也稱為客戶端Session。但該方案的缺點在于:I)只能夠存儲字符串、數值等基本類型的數據;c00kie大小存在限制;安全性不高;還存在帶寬及數據解壓縮、網絡傳輸性能較差等問題;2) Cookie取決于客戶端的設置,且客戶端可以禁止Cookie,從而導致Session實現的失敗。處理方案3:基于數據庫的Session信息共享,實現分布式應用間Session信息共孚。
此種方案把Session信息存儲到數據庫表,以實現不同應用服務器間的Session信息的共享。諸如Websphere Portal、Weblogic Portal等都采用了類似的方案。該方案的優點在于:實現簡單。但該方案的缺點在于:I)由于數據庫服務器相對于應用服務器更難擴展且資源更為寶貴,在高并發的Web應用中,最大的性能瓶頸通常在于數據庫服務器。2)如果將Session存儲到數據庫表,頻繁的增加、刪除、查詢操作很容易造成數據庫表爭用及加鎖,最終影響業務的性能。處理方案4:基于應用服務器/Servlet容器的Clustering機制。一些常用的應用服務器及Servlet容器的Clustering機制可以實現Session信息復制(Session Replication)的功倉泛,例如 Tomcat Clustering/Session Replication、Jboss buddy Replication 等。但該方案的缺點在于:為了支持JSP HttpSession狀態的自動失效無縫轉移,Web服務器需要將存儲在一臺服務器上的Session數據復制到集群中的其他成員上,以防止數據丟失以及允許失效無縫轉移,而基于Clustering的Session復制性能很差,擴展性也很差。處理方案5:基于共享存儲,實現分布式應用間Session共享。通過共享存儲,實現Session信息在不同服務器之間的狀態和數據同步,類似于數據庫的Session信息共享,但是該方案的共享存儲的存取速度更快,效率上有了提升。但該方案的缺點在于:在該處理方案中,通常需要定制Web容器,因此代價極高。在現有技術中的云計算環境下,運行環境的實現往往是無狀態的,即對于同一頁面的多次訪問請求,將會被路由到不同的服務節點之上。上述的實現方法可以極大地利用云計算環境中所有節點的計算能力,為更多的客戶提供服務,從而大大提升整個系統的可擴展性和魯棒性。但問題在于,如果云端的服務器完全無狀態,則對于那些需要在訪問中保持會話狀態的應用而言,將面臨很大的困難。為了解決上述問題,現有技術中通常會使用上述的處理方案3和處理方案5來實現在無狀態的服務環境中的Session共享,但也必然無法避免上述兩種處理方案中所存在的性能瓶頸以及代價極高的問題。綜上可知,現有技術中的在云計算環境下實現分布式會話的方法具有如上所述的各種缺點,從而難以在云計算環境下實現高效率、高性能、低成本、易擴展的分布式會話。

發明內容
有鑒于此,本發明提供了一種在云計算環境下實現分布式會話的方法和系統,從而可以在云計算環境下實現高效率、高性能、低成本、易擴展的分布式會話。本發明采用的技術方案具體是這樣實現的:一種在云計算環境下實現分布式會話的方法,該方法包括:通過過濾器攔截客戶端發送的Http訪問請求,并從所述Http訪問請求中獲取該客戶端的Cookie信息中客戶端的會話標識;根據所獲取的會話標識構造一個Http裝飾類對象,將所述Http裝飾類對象發送給與所述被攔截的Http訪問請求相對應的應用服務器;
根據所獲取的會話標識重構與所述客戶端相關的會話信息;將所獲取的會話標識及相對應的會話信息存儲于預先設置在網絡側的緩存服務器上;各應用服務器根據客戶端的會話標識從所述緩存服務器上獲取與所述客戶端相關的會話信息。本發明中還提供了一種在云計算環境下的分布式會話系統,該分布式會話系統包括:包括至少一個客戶端的客戶端層、包括至少一個應用服務器的應用服務器層、包括至少一個緩存服務器的緩存服務器層、過濾器和重構器;所述客戶端,用于發送Http訪問請求;所述過濾器,用于攔截所述客戶端發送的Http訪問請求,并從所述Http訪問請求中獲取該客戶端的Cookie信息中的客戶端的會話標識;將所述會話標識發送給重構器;所述重構器,用于根據所獲取的會話標識構造新的Http裝飾類對象,將所述Http裝飾類對象發送給與所述被攔截的Http訪問請求相對應的應用服務器;還用于根據所獲取的會話標識重構與所述客戶端相關的會話信息,將所獲取的會話標識及相對應的會話信息發送給緩存服務器;所述緩存服務器,用于存儲所接收到的會話標識及相對應的會話信息;所述應用服務器,用于根據客戶端的會話標識從所述緩存服務器上獲取與所述客戶端相關的會話信息。由上述技術方案可見,本發明中由于可通過過濾器攔截客戶端發送的Http訪問請求以獲取客戶端的會話標識,然后根據客戶端的會話標識重構與客戶端相關的Session信息并存儲在緩存服務器中,使得應用服務器可根據客戶端的會話標識從緩存服務器中讀取與客戶端相關的Session信息,從而可以在云計算環境下實現高效率、高性能、低成本、易擴展的分布式會話。


圖1是本發明中在云計算環境下實現分布式會話的方法的流程圖。圖2為本發明中在云計算環境下的分布式會話系統的組成示意圖。
具體實施例方式為使本發明的目的、技術方案和優點表達得更加清楚明白,下面結合附圖及具體實施例對本發明再作進一步詳細的說明。圖1是本發明中在云計算環境下實現分布式會話的方法的流程圖。如圖1所示,該方法包括:步驟101,通過過濾器攔截客戶端發送的Http訪問請求,并從所述Http訪問請求中獲取該客戶端的Cookie信息中客戶端的會話標識(Session ID)。具體來說,當用戶需要訪問某個URL地址時,將通過其使用的客戶端向應用服務器發送相應的Http訪問請求,該Http訪問請求攜帶有該客戶端的Cookie信息。因此,在本發明的具體實施例中,可以通過過濾器對上述Http訪問請求進行攔截,從而從所述Http訪問請求中獲得該客戶端的Cookie信息,并從所述客戶端的Cookie信息中獲取客戶端的Session ID。
較佳的,上述的過濾器可以是Java Servlet過濾器。其中,所述Java Servlet是一種服務器端的Java應用程序。步驟102,根據所獲取的會話標識構造一個Http裝飾類對象,將所述Http裝飾類對象發送給與上述被攔截的Http訪問請求相對應的應用服務器。由于在步驟101中已獲取了客戶端的會話標識,因此,在本步驟中,可根據所獲取的客戶端的會話標識構造一個Http裝飾類對象,并將該Http裝飾類對象替代上述所攔截的Http訪問請求發送給相應的應用服務器。步驟103,根據所獲取的會話標識重構與所述客戶端相關的Session信息。現有技術的Java框架中已經有創建會話(Session)信息的機制,但該機制并不適用于云計算中的Stateless環境,因此我們需要重構與所述客戶端相關的Session信息。因此,在本步驟中將根據上述所獲取的客戶端的SessionID,重構與該客戶端相關的Session信息。在本發明的技術方案中,可以使用多種方法來根據所獲取的會話標識重構與客戶端相關的Session信息。例如,在本發明的具體實施例中,重構與客戶端相關的Session信息可包括如下所述的步驟:步驟1031,根據上述所獲取的客戶端的Session ID,通過繼承重構HttpServletRequestWrapper接口,將與所述客戶端相關的Session信息封裝為Session對象。在本步驟中,將根據上述從Http訪問請求中獲取的客戶端的Session ID,將與所述客戶端相關的Session信息封裝為Session對象,從而替換原有的Java框架中的創建Session信息的機制。當系統通過Java標準接口調用Session對象時,所調用的將為重新封裝后的Session對象。具體來說,Java框架中有一個名稱為 HttpServletRequestWrapper 的接口,Java框架中并未規定該接口的具體實現方法,可以由開發者自行完成具體的實現或擴展。因此,在本步驟中,可根據上述從Http訪問請求中獲取的客戶端的Session ID對該接口進行擴展,通過繼承重構HttpServletRequestWrapper接口(例如,重新撰寫該接口中與Session信息相關的代碼類)的方式將與所述客戶端相關的Session信息封裝為Session對象,從而替代原有的Java框架中的Session機制。當系統通過Java標準接口調用Session對象時,所調用的將為重新封裝后的Session對象。步驟1032,通過繼承重構HttpSessionWrapper類,設定所述Session對象的存取方式。當上述步驟1031中將與客戶端相關的Session信息封裝為Session對象之后,原有的Java框架中的Session信息存取方法已經難以適用。所以,在本發明的具體實施例中,還需設定與該Session對象相關的存取方式,從而使得各個應用服務器可以對上述Session對象進行調用或訪問。因此,在本步驟中,將通過繼承重構HttpSessionWrapper類(例如,重新撰寫與所述HttpSessionWrapper類相關的代碼)的方式,設定所述Session對象的存取方式,從而替代原有的Java框架中的的Session信息存取方法。通過上述的步驟1031和1032,可以重構與客戶端相關的Session信息。
步驟104,將所獲取的會話標識及相對應的Session信息存儲于預先設置在網絡側的緩存服務器上。在本發明的具體實施例中,還將在網絡側預先設置一個緩存服務器,該緩存服務器用于存儲與客戶端相關的Session信息。因此,可將所獲取的會話標識及相對應的Session信息存儲在該緩存服務器上。例如,在本發明的具體實施例中,可將上述所獲取的會話標識及相對應的重構的Session信息通過所述繼承重構的HttpServletRequestWrapper接口和HttpSessionWrapper類存儲到預先設置在網絡側的緩存服務器中。具體來說,所述緩存服務器可以是Memcached服務器,其中,所述Memcached服務器是一種高性能的分布式內存對象緩存服務器。因此,可通過HttpSessionWrapper類連接Memcached服務器,并以客戶端的Session ID作為關鍵字(key),將與所述客戶端相關的Session信息存儲在Memcached服務器中。其中,所存儲的對象(即與所述客戶端相關的Session信息)可以是一個map,因此,該map的內容即為與所述客戶端相關的Session信息。步驟105,各應用服務器根據客戶端的會話標識從所述緩存服務器上獲取與所述客戶端相關的Session信息。由于與客戶端相關的Session信息已存儲在緩存服務器上,因此,各個應用服務器在需要獲取與客戶端相關的Session信息時,可以直接根據該客戶端的Session ID訪問上述緩存服務器,從而獲取所需的與該客戶端相關的Session信息。例如,應用服務器可根據客戶端的Session ID從Memcached服務器上獲取整個map對象,然后再以Session的屬性名稱(attributeName)作為關鍵字(key)從所述map對象中獲取相應客戶端的Session信息。通過上述的步驟101 105,即可在云計算環境下實現分布式會話,從而可以在云計算環境下實現高效率、高性能、低成本、易擴展的分布式會話。進一步的,在本發明的具體實施例中,還可以對緩存服務器中存儲的Session信息進行持久化操作。例如,將緩存服務器中存儲的Session信息存儲為一個文件;或者,將緩存服務器中存儲的Session信息存儲在數據庫中。進一步的,在本發明的具體實施例中,為了更好地實現分布式緩存,還可以對上述的步驟104進行改進,改進后的步驟104為:在網絡側預先設置至少兩個緩存服務器集群,每個緩存服務器集群中包括至少一個緩存服務器;將所獲取的會話標識及相對應的Session信息存儲在一個緩存服務器集群中的一個緩存服務器上,并將會話標識及相對應的Session信息復制到其它緩存服務器集群中的至少一個緩存服務器上。通過上述的操作,可以更好地實現分布式緩存,并可在多個緩存服務器集群之間完成Session信息的傳遞與同步,從而可以實現具有更高性能和更高可用性的分布式緩存存儲體系結構,進而提高Session信息的高可用性和負載均衡性。在本發明的技術方案中,還提出一種在云計算環境下的分布式會話系統。圖2為本發明中在云計算環境下的分布式會話系統的組成示意圖。如圖2所示,所述在云計算環境下的分布式會話系統包括:包括至少一個客戶端的客戶端層201、包括至少一個應用服務器的應用服務器層202、包括至少一個緩存服務器的緩存服務器層203、過濾器204和重構器205。所述客戶端,用于發送Http訪問請求;所述過濾器204,用于攔截所述客戶端發送的Http訪問請求,并從所述Http訪問請求中獲取該客戶端的Cookie信息中的客戶端的會話標識;將所述會話標識發送給重構器 205 ;所述重構器205,用于根據所獲取的會話標識構造新的Http裝飾類對象,將所述Http裝飾類對象發送給與所述被攔截的Http訪問請求相對應的應用服務器;還用于根據所獲取的會話標識重構與所述客戶端相關的Session信息,將所獲取的會話標識及相對應的Session信息發送給緩存服務器;所述緩存服務器,用于存儲所接收到的會話標識及相對應的Session信息;所述應用服務器,用于根據客戶端的會話標識從所述緩存服務器上獲取與所述客戶端相關的Session信息。進一步地,在本發明的具體實施例中,所述緩存服務器層中可以包括至少兩個緩存服務器集群,每個緩存服務器集群中包括至少一個緩存服務器。因此,所述重構器205還可用于將所獲取的會話標識及相對應的Session信息發送給一個緩存服務器集群中的一個緩存服務器上。而所述緩存服務器集群中的緩存服務器,則可用于將所存儲的會話標識及相對應的Session信息復制到其它緩存服務器集群中的至少一個緩存服務器上。綜上所述,在本發明的技術方案中,由于可通過過濾器攔截客戶端發送的Http訪問請求以獲取客戶端的會話標識,然后根據客戶端的會話標識重構與客戶端相關的Session信息并存儲在緩存服務器中,使得應用服務器可根據客戶端的會話標識從緩存服務器中讀取與客戶端相關的Session信息,從而可以在云計算環境下實現高效率、高性能、低成本、易擴展的分布式會話。而且,還可以更好地實現分布式緩存,并可在多個緩存服務器集群之間完成Session信息的傳遞與同步,從而可以實現具有更高性能和更高可用性的分布式緩存存儲體系結構,進而提高Session信息的高可用性和負載均衡性。以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明保護的范圍之內。
權利要求
1.一種在云計算環境下實現分布式會話的方法,其特征在于,該方法包括: 通過過濾器攔截客戶端發送的Http訪問請求,并從所述Http訪問請求中獲取該客戶端的Cookie信息中客戶端的會話標識; 根據所獲取的會話標識構造一個Http裝飾類對象,將所述Http裝飾類對象發送給與所述被攔截的Http訪問請求相對應的應用服務器; 根據所獲取的會話標識重構與所述客戶端相關的會話信息;將所獲取的會話標識及相對應的會話信息存儲于預先設置在網絡側的緩存服務器上; 各應用服務器根據客戶端的會話標識從所述緩存服務器上獲取與所述客戶端相關的會話信息。
2.根據權利要求1所述的方法,其特征在于, 所述過濾器為Java Servlet過濾器。
3.根據權利要求1所述的方法,其特征在于,所述根據所獲取的會話標識重構與所述客戶端相關的會話信息包括: 根據所獲取的客戶端的 會話標識,通過繼承重構HttpServletRequestWrapper接口,將與所述客戶端相關的會話信息封裝為會話對象; 通過繼承重構HttpSessionWrapper類,設定所述會話對象的存取方式。
4.根據權利要求3所述的方法,其特征在于,所述將所獲取的會話標識及相對應的會話信息存儲于預先設置在網絡側的緩存服務器上包括: 將所獲取的會話標識及相對應的重構的會話信息通過所述繼承重構的HttpServletRequestWrapper接口和HttpSessionWrapper類存儲到預先設置在網絡側的緩存服務器中。
5.根據權利要求1或4所述的方法,其特征在于, 所述緩存服務器可以是Memcached服務器。
6.根據權利要求1所述的方法,其特征在于,所述將所獲取的會話標識及相對應的會話信息存儲于預先設置在網絡側的緩存服務器上包括: 在網絡側預先設置至少兩個緩存服務器集群,每個緩存服務器集群中包括至少一個緩存服務器; 將所獲取的會話標識及相對應的會話信息存儲在一個緩存服務器集群中的一個緩存服務器上,并將所述會話標識及相對應的會話信息復制到其它緩存服務器集群中的至少一個緩存服務器上。
7.—種在云計算環境下的分布式會話系統,其特征中在于,該分布式會話系統包括:包括至少一個客戶端的客戶端層、包括至少一個應用服務器的應用服務器層、包括至少一個緩存服務器的緩存服務器層、過濾器和重構器; 所述客戶端,用于發送Http訪問請求; 所述過濾器,用于攔截所述客戶端發送的Http訪問請求,并從所述Http訪問請求中獲取該客戶端的Cookie信息中的客戶端的會話標識;將所述會話標識發送給重構器; 所述重構器,用于根據所獲取的會話標識構造新的Http裝飾類對象,將所述Http裝飾類對象發送給與所述被攔截的Http訪問請求相對應的應用服務器;還用于根據所獲取的會話標識重構與所述客戶端相關的會話信息,將所獲取的會話標識及相對應的會話信息發送給緩存服務器; 所述緩存服務器,用于存儲所接收到的會話標識及相對應的會話信息; 所述應用服務器,用于根據客戶端的會話標識從所述緩存服務器上獲取與所述客戶端相關的會話信息。
8.根據權利要求7所述的分布式會話系統,其特征在于, 所述緩存服務器層中包括至少兩個緩存服務器集群,每個緩存服務器集群中包括至少一個緩存服務器; 所述重構器,還用于將所獲取的會話標識及相對應的會話信息發送給一個緩存服務器集群中的一個緩存服務器上; 所述緩存服務器,還用于將所存儲的會話標識及相對應的會話信息復制到其它緩存服務器集群中的至少一個緩存服 務器上。
全文摘要
本發明提供了一種在云計算環境下實現分布式會話的方法和系統。其中的方法包括通過過濾器攔截客戶端發送的Htp訪問請求,從所述Http訪問請求中獲取客戶端的會話標識;根據所獲取的會話標識構造一個Http裝飾類對象,將所述Http裝飾類對象發送給與所述被攔截的Http訪問請求相對應的應用服務器;根據所獲取的會話標識重構與所述客戶端相關的會話信息;將所獲取的會話標識及相對應的會話信息存儲于預先設置在網絡側的緩存服務器上;各應用服務器根據客戶端的會話標識從所述緩存服務器上獲取與所述客戶端相關的會話信息。應用本發明可以在云計算環境下實現高效率、高性能、低成本、易擴展的分布式會話。
文檔編號H04L29/08GK103200212SQ20121000485
公開日2013年7月10日 申請日期2012年1月4日 優先權日2012年1月4日
發明者王磊建, 孔令軍, 劉濤 申請人:中國移動通信集團公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 通州区| 津市市| 通州市| 长汀县| 正镶白旗| 彰化市| 澳门| 丹阳市| 涿鹿县| 盐池县| 宁阳县| 永宁县| 孟连| 洛宁县| 库车县| 当阳市| 玛多县| 七台河市| 砚山县| 内黄县| 贵南县| 阜平县| 张家港市| 湘乡市| 勃利县| 芦山县| 昌吉市| 长治县| 延寿县| 谷城县| 庆云县| 卢氏县| 万宁市| 镇康县| 理塘县| 赞皇县| 舒兰市| 渑池县| 滁州市| 巨野县| 崇明县|