本發(fā)明實施例涉及但不限于智能終端技術(shù),尤指一種實現(xiàn)會話(Session)共享的系統(tǒng)、方法、服務(wù)器和集群設(shè)備。
背景技術(shù):
隨著互聯(lián)網(wǎng)的日益壯大,網(wǎng)站的頁面瀏覽量(PV,Page View)和獨立訪客(UV,Unique Visitor)成線性或者指數(shù)倍的增加,因此,單服務(wù)器單數(shù)據(jù)庫早已經(jīng)不能滿足實際需求。目前,大多數(shù)大型網(wǎng)站的服務(wù)器都采用了分布式服務(wù)的部署方式,解決大并發(fā)、大數(shù)據(jù)量造成的瓶頸問題。目前,有關(guān)于分布式Session數(shù)據(jù)的共享基本上都是基于Memcached服務(wù)器的,其中,Memcached本質(zhì)上是一個內(nèi)存緩存系統(tǒng)。因此,如果發(fā)生網(wǎng)絡(luò)故障或是Memcached服務(wù)器宕機,則存儲在這臺Memcached服務(wù)器上的所有Session數(shù)據(jù)都將不可訪問,并且由于Session數(shù)據(jù)是存儲在內(nèi)存中的,一旦重啟Memcached服務(wù)器,就會導(dǎo)致Session數(shù)據(jù)全部丟失。
技術(shù)實現(xiàn)要素:
本申請?zhí)峁┝艘环N實現(xiàn)會話(Session)共享的系統(tǒng)、方法、服務(wù)器和集群設(shè)備,能夠提升Session數(shù)據(jù)的安全性。
為了達到本申請目的,本發(fā)明實施例提供了一種實現(xiàn)會話Session共享的系統(tǒng),包括:一個或多個服務(wù)器和集群設(shè)備;集群設(shè)備包括一個主用處理器和多個輔助處理器;其中,
服務(wù)器,用于接收到客戶端發(fā)送的用戶請求,判斷該用戶請求攜帶的cookie中是否存在第一會話標(biāo)識SessionID;當(dāng)判斷出用戶請求攜帶的cookie中存在第一SessionID時,在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù);當(dāng)判斷出查找到的第一Session數(shù)據(jù)是無效數(shù)據(jù)時,則向主用處理器發(fā)送第一通知;接收到主用處理器發(fā)送的通知,為與所述用戶請求對應(yīng)的Session創(chuàng)建第二SessionID,并向主用處理器發(fā)送第二通知;
主用處理器,用于接收到服務(wù)器發(fā)送的第一通知,根據(jù)第一通知刪除自身、本地內(nèi)存區(qū)域以及每個輔助處理器中預(yù)先對應(yīng)存儲的該第一SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);通知服務(wù)器創(chuàng)建與用戶請求對應(yīng)的第二SessionID;接收到服務(wù)器發(fā)送的第二通知,根據(jù)第二通知在本地第一存儲單元中對應(yīng)存儲與用戶請求對應(yīng)的第二Session數(shù)據(jù)和第二SessionID,并且將對應(yīng)存儲的第二Session數(shù)據(jù)和第二SessionID同步至多個輔助處理器中;
輔助處理器,用于預(yù)先對應(yīng)存儲第一SessionID和與第一SessionID對應(yīng)的第一Session數(shù)據(jù);對應(yīng)存儲主用處理器同步過來的第二Session數(shù)據(jù)和第二SessionID。
可選地,所述服務(wù)器,還用于當(dāng)判斷出所述用戶請求攜帶的cookie中不存在所述第一SessionID時,為與所述用戶請求對應(yīng)的Session創(chuàng)建第三SessionID作為所述第一SessionID;向所述主用處理器發(fā)送第三通知;相應(yīng)地,
所述主用處理器,還用于接收到服務(wù)器發(fā)送的所述第三通知,在所述本地第一存儲單元中對應(yīng)存儲與所述用戶請求對應(yīng)的第三Session數(shù)據(jù)和所述第一SessionID,并且將對應(yīng)存儲的所述第三Session數(shù)據(jù)和所述第一SessionID同步至多個輔助處理器中;相應(yīng)地,
所述輔助處理器,還用于對應(yīng)存儲所述主用處理器同步過來的所述第三Session數(shù)據(jù)和所述第一SessionID。
可選地,所述服務(wù)器中用于在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù)包括:根據(jù)所述第一SessionID判斷本地內(nèi)存區(qū)域中是否有所述第一Session數(shù)據(jù);當(dāng)判斷出所述本地內(nèi)存區(qū)域中有所述第一Session數(shù)據(jù),從所述本地內(nèi)存區(qū)域中讀取所述第一Session數(shù)據(jù);當(dāng)判斷出所述本地內(nèi)存區(qū)域中沒有所述第一Session數(shù)據(jù),向所述主用處理器發(fā)送第四通知;從所述本地內(nèi)存區(qū)域中讀取所述第一Session數(shù)據(jù);相應(yīng)地,
所述主用處理器,還用于接收到所述服務(wù)器發(fā)送的所述第四通知,查找與所述第一SessionID對應(yīng)的Session數(shù)據(jù);將查找到的Session數(shù)據(jù)同步至所述本地內(nèi)存區(qū)域中。
可選地,所述主用處理器中用于查找與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù)包括:在所述多個輔助處理器中確定滿足預(yù)設(shè)條件的一個輔助處理器并通知滿足所述預(yù)設(shè)條件的一個輔助處理器;接收來自所述滿足所述預(yù)設(shè)條件的一個輔助處理器發(fā)送的查找到的與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù)并將接收到的所述Session數(shù)據(jù)作為與所述第一SessionID對應(yīng)的Session數(shù)據(jù);相應(yīng)地,
所述滿足所述預(yù)設(shè)條件的一個輔助處理器,用于在本地第二存儲單元中查找與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù);將查找到的與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù)發(fā)送給所述主用處理器。
可選地,所述服務(wù)器,還用于當(dāng)判斷出查找到的所述第一Session數(shù)據(jù)是有效數(shù)據(jù)時,向所述主用處理器發(fā)送第五通知;相應(yīng)地,
所述主用處理器,還用于接收到所述服務(wù)器發(fā)送的所述第五通知,更新自身、所述本地內(nèi)存區(qū)域以及每個輔助處理器中存儲的所述第一Session數(shù)據(jù)中的最后訪問時間。
可選地,所述服務(wù)器中用于判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù)包括:
獲取當(dāng)前時間;
計算獲得的當(dāng)前時間和所述第一Session數(shù)據(jù)中的最后訪問時間之間的差值;
判斷所述差值是否大于預(yù)設(shè)時長閾值;
當(dāng)判斷出所述差值大于預(yù)設(shè)時長閾值,判斷出所述第一Session數(shù)據(jù)是無效數(shù)據(jù);
當(dāng)判斷出所述差值小于或等于預(yù)設(shè)時長閾值,判斷出所述第一Session數(shù)據(jù)是有效數(shù)據(jù)。
可選地,所述服務(wù)器,還用于在所述為與所述用戶請求對應(yīng)的Session創(chuàng)建第二SessionID之后,將創(chuàng)建的所述第二SessionID作為所述第一SessionID存儲至所述cookie中并將存儲了所述第一SessionID的cookie返回給用戶。
本發(fā)明實施例還提供了一種實現(xiàn)會話Session共享的方法,包括:
主用處理器接收到服務(wù)器發(fā)送的第一通知,根據(jù)所述第一通知刪除自身、本地內(nèi)存區(qū)域以及每個輔助處理器中預(yù)先對應(yīng)存儲的該第一會話標(biāo)識SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù),并通知服務(wù)器創(chuàng)建與用戶請求對應(yīng)的第二SessionID;
主用處理器接收到服務(wù)器發(fā)送的第二通知,根據(jù)所述第二通知在本地第一存儲單元中對應(yīng)存儲與用戶請求對應(yīng)的第二Session數(shù)據(jù)和第二SessionID,并且將對應(yīng)存儲的第二Session數(shù)據(jù)和第二SessionID同步至多個輔助處理器中。
可選地,在所述主用處理器接收到服務(wù)器發(fā)送的第一通知之前,該方法還包括:
所述服務(wù)器接收到客戶端發(fā)送的用戶請求,判斷該用戶請求攜帶的cookie中是存在所述第一SessionID;
當(dāng)判斷出用戶請求攜帶的cookie中存在第一SessionID時,所述服務(wù)器在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);
所述服務(wù)器判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù);當(dāng)判斷出查找到的第一Session數(shù)據(jù)是無效數(shù)據(jù)時,則向主用處理器發(fā)送所述第一通知;
所述服務(wù)器接收到主用處理器發(fā)送的通知,為與該用戶請求對應(yīng)的Session創(chuàng)建第二SessionID,并向主用處理器發(fā)送所述第二通知。
可選地,當(dāng)所述服務(wù)器判斷出所述用戶請求攜帶的cookie中不存在所述第一SessionID時,該方法還包括:
所述服務(wù)器為與所述用戶請求對應(yīng)的Session創(chuàng)建第三SessionID作為所述第一SessionID;向所述主用處理器發(fā)送第三通知;
所述主用處理器接收到服務(wù)器發(fā)送的所述第三通知,在所述本地第一存儲單元中對應(yīng)存儲與所述用戶請求對應(yīng)的第三Session數(shù)據(jù)和所述第一SessionID,并且將對應(yīng)存儲的所述第三Session數(shù)據(jù)和所述第一SessionID同步至多個輔助處理器中。
可選地,所述服務(wù)器在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù)包括:
所述服務(wù)器根據(jù)所述第一SessionID判斷本地內(nèi)存區(qū)域中是否有所述第一Session數(shù)據(jù);當(dāng)判斷出所述本地內(nèi)存區(qū)域中有所述第一Session數(shù)據(jù),所述服務(wù)器從所述本地內(nèi)存區(qū)域中讀取所述第一Session數(shù)據(jù);
當(dāng)判斷出所述本地內(nèi)存區(qū)域中沒有所述第一Session數(shù)據(jù),所述服務(wù)器向所述主用處理器發(fā)送第四通知;從所述本地內(nèi)存區(qū)域中讀取所述第一Session數(shù)據(jù);所述主用處理器接收到所述服務(wù)器發(fā)送的所述第四通知,查找與所述第一SessionID對應(yīng)的Session數(shù)據(jù);將查找到的Session數(shù)據(jù)同步至所述本地內(nèi)存區(qū)域中;所述服務(wù)器從所述本地內(nèi)存區(qū)域中讀取同步過來的所述Session數(shù)據(jù)。
可選地,所述主用處理器查找與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù)包括:
所述主用處理器在所述多個輔助處理器中確定滿足預(yù)設(shè)條件的一個輔助處理器并通知滿足所述預(yù)設(shè)條件的一個輔助處理器;
所述滿足所述預(yù)設(shè)條件的一個輔助處理器在本地第二存儲單元中查找與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù);將查找到的與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù)發(fā)送給所述主用處理器;
所述主用處理器接收來自所述滿足所述預(yù)設(shè)條件的一個輔助處理器發(fā)送的查找到的與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù)并將接收到的所述Session數(shù)據(jù)作為與所述第一SessionID對應(yīng)的Session數(shù)據(jù)。
可選地,當(dāng)所述服務(wù)器判斷出查找到的所述第一Session數(shù)據(jù)是有效數(shù)據(jù)時,該方法還包括:所述服務(wù)器向所述主用處理器發(fā)送第五通知;所述主用處理器接收到所述服務(wù)器發(fā)送的所述第五通知,更新自身、所述本地內(nèi)存區(qū)域以及每個輔助處理器中存儲的所述第一Session數(shù)據(jù)中的最后訪問時間。
可選地,所述服務(wù)器判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù)包括:
所述服務(wù)器獲取當(dāng)前時間;
所述服務(wù)器計算獲得的當(dāng)前時間和所述第一Session數(shù)據(jù)中的最后訪問時間之間的差值;
所述服務(wù)器判斷所述差值是否大于預(yù)設(shè)時長閾值;
當(dāng)判斷出所述差值大于預(yù)設(shè)時長閾值,所述服務(wù)器判斷出所述第一Session數(shù)據(jù)是無效數(shù)據(jù);
當(dāng)判斷出所述差值小于或等于預(yù)設(shè)時長閾值,所述服務(wù)器判斷出所述第一Session數(shù)據(jù)是有效數(shù)據(jù)。
可選地,在所述為與所述用戶請求對應(yīng)的Session創(chuàng)建第二SessionID之后,該方法還包括:所述服務(wù)器將創(chuàng)建的所述第二SessionID作為所述第一SessionID存儲至所述cookie中并將存儲了所述第一SessionID的cookie返回給用戶。
本發(fā)明實施例還提供了一種服務(wù)器,包括:收發(fā)模塊、判斷模塊、查找模塊和創(chuàng)建模塊;其中,
收發(fā)模塊,用于接收到客戶端發(fā)送的用戶請求;接收到判斷模塊發(fā)送的通知,則向主用處理器發(fā)送第一通知;接收來自主用處理器的通知,通知創(chuàng)建模塊;接收到創(chuàng)建模塊發(fā)送的通知,向主用處理器發(fā)送第二通知;
判斷模塊,用于判斷該用戶請求攜帶的cookie中是否存在第一會話標(biāo)識SessionID;當(dāng)判斷出用戶請求攜帶的cookie中存在第一SessionID時,通知查找模塊;判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù);當(dāng)判斷出查找到的第一Session數(shù)據(jù)是無效數(shù)據(jù)時,通知收發(fā)模塊;
查找模塊,用于在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);
創(chuàng)建模塊,用于接收到收發(fā)模塊發(fā)送的通知,為與該用戶請求對應(yīng)的Session創(chuàng)建第二SessionID;通知收發(fā)模塊向主用處理器發(fā)送第二通知。
可選地,所述判斷模塊,還用于當(dāng)判斷出所述用戶請求攜帶的cookie中不存在所述第一SessionID時,通知所述創(chuàng)建模塊;相應(yīng)地,
所述創(chuàng)建模塊,還用于接收到所述判斷模塊發(fā)送的通知,為與所述用戶請求對應(yīng)的Session創(chuàng)建第三SessionID作為所述第一SessionID;通知所述收發(fā)模塊向所述主用處理器發(fā)送第三通知;相應(yīng)地,
所述收發(fā)模塊,還用于向所述主用處理器發(fā)送所述第三通知。
可選地,所述查找模塊具體用于:根據(jù)所述第一SessionID判斷本地內(nèi)存區(qū)域中是否有所述第一Session數(shù)據(jù);當(dāng)判斷出所述本地內(nèi)存區(qū)域中有所述第一Session數(shù)據(jù),從所述本地內(nèi)存區(qū)域中讀取所述第一Session數(shù)據(jù);當(dāng)判斷出所述本地內(nèi)存區(qū)域中沒有所述第一Session數(shù)據(jù),通知所述收發(fā)模塊向所述主用處理器發(fā)送第四通知;從所述本地內(nèi)存區(qū)域中讀取所述第一Session數(shù)據(jù)。
可選地,所述判斷模塊,還用于當(dāng)判斷出查找到的所述第一Session數(shù)據(jù)是有效數(shù)據(jù)時,通知所述收發(fā)模塊向所述主用處理器發(fā)送第五通知;相應(yīng)地,
所述收發(fā)模塊,還用于接收到所述判斷模塊發(fā)送的通知,向所述主用處理器發(fā)送第五通知。
可選地,所述判斷模塊中用于判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù)包括:
獲取當(dāng)前時間;
計算獲得的當(dāng)前時間和所述第一Session數(shù)據(jù)中的最后訪問時間之間的差值;
判斷所述差值是否大于預(yù)設(shè)時長閾值;
當(dāng)判斷出所述差值大于預(yù)設(shè)時長閾值,判斷出所述第一Session數(shù)據(jù)是無效數(shù)據(jù);
當(dāng)判斷出所述差值小于或等于預(yù)設(shè)時長閾值,判斷出所述第一Session數(shù)據(jù)是有效數(shù)據(jù)。
可選地,所述收發(fā)模塊,還用于將創(chuàng)建的所述第二SessionID作為所述第一SessionID存儲至所述cookie中并將存儲了所述第一SessionID的cookie返回給用戶。
本發(fā)明實施例還提供了一種集群設(shè)備,包括:一個主用處理器和多個輔助處理器;其中,
主用處理器,用于接收到服務(wù)器發(fā)送的第一通知,刪除自身、本地內(nèi)存區(qū)域以及每個輔助處理器中預(yù)先對應(yīng)存儲的該第一會話標(biāo)識SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);通知服務(wù)器;接收到服務(wù)器發(fā)送的第二通知,在本地第一存儲單元中對應(yīng)存儲與該用戶請求對應(yīng)的第二Session數(shù)據(jù)和該第二SessionID,并且將對應(yīng)存儲的第二Session數(shù)據(jù)和第二SessionID同步至多個輔助處理器中;
輔助處理器,用于預(yù)先對應(yīng)存儲該第一SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);對應(yīng)存儲主用處理器同步過來的第二Session數(shù)據(jù)和第二SessionID。
可選地,所述主用處理器,還用于接收到服務(wù)器發(fā)送的所述第三通知,在本地第一存儲單元中對應(yīng)存儲與所述用戶請求對應(yīng)的第三Session數(shù)據(jù)和所述第一SessionID,并且將對應(yīng)存儲的所述第三Session數(shù)據(jù)和所述第一SessionID同步至多個輔助處理器中;相應(yīng)地,
所述輔助處理器,還用于對應(yīng)存儲所述主用處理器同步過來的所述第三Session數(shù)據(jù)和所述第一SessionID。
可選地,所述主用處理器,還用于接收到所述服務(wù)器發(fā)送的所述第四通知,查找與所述第一SessionID對應(yīng)的Session數(shù)據(jù);將查找到的Session數(shù)據(jù)同步至所述本地內(nèi)存區(qū)域中。
可選地,所述主用處理器中用于查找與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù)包括:在所述多個輔助處理器中確定滿足預(yù)設(shè)條件的一個輔助處理器并通知滿足所述預(yù)設(shè)條件的一個輔助處理器;接收來自所述滿足所述預(yù)設(shè)條件的一個輔助處理器發(fā)送的查找到的與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù)并將接收到的所述Session數(shù)據(jù)作為與所述第一SessionID對應(yīng)的Session數(shù)據(jù);相應(yīng)地,
所述滿足所述預(yù)設(shè)條件的一個輔助處理器,用于在本地第二存儲單元中查找與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù);將查找到的與所述第一SessionID對應(yīng)存儲的Session數(shù)據(jù)發(fā)送給所述主用處理器。
可選地,所述主用處理器,還用于接收到所述服務(wù)器發(fā)送的所述第五通知,更新自身、所述本地內(nèi)存區(qū)域以及每個輔助處理器中存儲的所述第一Session數(shù)據(jù)中的最后訪問時間。
本發(fā)明實施例包括:主用處理器接收到服務(wù)器發(fā)送的第一通知,根據(jù)所述第一通知刪除自身、本地內(nèi)存區(qū)域以及每個輔助處理器中預(yù)先對應(yīng)存儲的第一會話標(biāo)識SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù),并通知服務(wù)器創(chuàng)建與用戶請求對應(yīng)的第二SessionID;主用處理器接收到所述服務(wù)器發(fā)送的第二通知,根據(jù)所述第二通知在本地第一存儲單元中對應(yīng)存儲與用戶請求對應(yīng)的第二Session數(shù)據(jù)和第二SessionID,并且將對應(yīng)存儲的第二Session數(shù)據(jù)和第二SessionID同步至多個輔助處理器中。本發(fā)明實施例提升了Session數(shù)據(jù)的安全性。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
圖1為本申請實現(xiàn)Session共享的系統(tǒng)的架構(gòu)圖;
圖2為本申請實現(xiàn)Session共享的方法的流程圖;
圖3為本申請實現(xiàn)Session共享的方法的實施例的流程圖;
圖4為本申請服務(wù)器的結(jié)構(gòu)示意圖;
圖5為本申請集群設(shè)備的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下文中將結(jié)合附圖對本發(fā)明的實施例進行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互任意組合。
圖1為本申請實現(xiàn)Session共享的系統(tǒng)的架構(gòu)圖,如圖1所示,包括:一個或多個服務(wù)器和集群設(shè)備;集群設(shè)備包括一個主用處理器和多個輔助處理器。其中,
服務(wù)器,用于接收到客戶端發(fā)送的用戶請求,判斷該用戶請求攜帶的cookie中是否存在第一會話標(biāo)識(SessionID);當(dāng)判斷出用戶請求攜帶的cookie中存在第一SessionID時,在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù);當(dāng)判斷出查找到的第一Session數(shù)據(jù)是無效數(shù)據(jù)時,則向主用處理器發(fā)送第一通知;接收到主用處理器發(fā)送的通知,為與該用戶請求對應(yīng)的Session創(chuàng)建第二SessionID,并向主用處理器發(fā)送第二通知。
其中,cookie是指某些網(wǎng)站為了辨別用戶身份、進行Session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)。
主用處理器,用于接收到服務(wù)器發(fā)送的第一通知,根據(jù)第一通知刪除自身、本地內(nèi)存區(qū)域以及每個輔助處理器中預(yù)先對應(yīng)存儲的該第一SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);通知服務(wù)器創(chuàng)建與用戶請求對應(yīng)的第二SessionID;接收到服務(wù)器發(fā)送的第二通知,根據(jù)第二通知在本地第一存儲單元中對應(yīng)存儲與該用戶請求對應(yīng)的第二Session數(shù)據(jù)和該第二SessionID,并且將對應(yīng)存儲的第二Session數(shù)據(jù)和第二SessionID同步至多個輔助處理器中。
其中,本地第一存儲單元可以是主用處理器的自身的硬盤。
輔助處理器,用于預(yù)先對應(yīng)存儲該第一SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);對應(yīng)存儲主用處理器同步過來的第二Session數(shù)據(jù)和第二SessionID。
其中,輔助處理器中預(yù)先對應(yīng)存儲的該第一SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù)是由主用處理器同步過來的數(shù)據(jù)。
可選地,服務(wù)器,還用于當(dāng)判斷出用戶請求攜帶的cookie中不存在第一SessionID時,為與用戶請求對應(yīng)的Session創(chuàng)建第三SessionID作為第一SessionID;向主用處理器發(fā)送第三通知;相應(yīng)地,
主用處理器,還用于接收到服務(wù)器發(fā)送的第三通知,在本地第一存儲單元中對應(yīng)存儲與用戶請求對應(yīng)的第三Session數(shù)據(jù)和第一SessionID,并且將對應(yīng)存儲的第三Session數(shù)據(jù)和第一SessionID同步至多個輔助處理器中;相應(yīng)地,
輔助處理器,還用于對應(yīng)存儲主用處理器同步過來的第三Session數(shù)據(jù)和第一SessionID。
其中,服務(wù)器中用于在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù)包括:根據(jù)第一SessionID判斷本地內(nèi)存區(qū)域中是否有第一Session數(shù)據(jù);當(dāng)判斷出本地內(nèi)存區(qū)域中有第一Session數(shù)據(jù),從本地內(nèi)存區(qū)域中讀取第一Session數(shù)據(jù);當(dāng)判斷出本地內(nèi)存區(qū)域中沒有第一Session數(shù)據(jù),向主用處理器發(fā)送第四通知;從本地內(nèi)存區(qū)域中讀取第一Session數(shù)據(jù);相應(yīng)地,
主用處理器,還用于接收到服務(wù)器發(fā)送的第四通知,查找與第一SessionID對應(yīng)的Session數(shù)據(jù);將查找到的Session數(shù)據(jù)同步至本地內(nèi)存區(qū)域中。
其中,主用處理器中用于查找與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)包括:在多個輔助處理器中確定滿足預(yù)設(shè)條件的一個輔助處理器并通知滿足預(yù)設(shè)條件的一個輔助處理器;接收來自滿足預(yù)設(shè)條件的一個輔助處理器發(fā)送的查找到的與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)并將接收到的Session數(shù)據(jù)作為與第一SessionID對應(yīng)的Session數(shù)據(jù);相應(yīng)地,
滿足預(yù)設(shè)條件的一個輔助處理器,用于在本地第二存儲單元中查找與第一SessionID對應(yīng)存儲的Session數(shù)據(jù);將查找到的與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)發(fā)送給主用處理器。
其中,本地第二存儲單元可以是滿足預(yù)設(shè)條件的一個輔助處理器的自身的硬盤。
其中,預(yù)設(shè)條件包括:當(dāng)前處理的進程數(shù)最少,或者配置最高,或者資源利用率最低等等。
可選地,服務(wù)器,還用于當(dāng)判斷出查找到的第一Session數(shù)據(jù)是有效數(shù)據(jù)時,向主用處理器發(fā)送第五通知;相應(yīng)地,
主用處理器,還用于接收到服務(wù)器發(fā)送的第五通知,更新自身、本地內(nèi)存區(qū)域以及每個輔助處理器中存儲的第一Session數(shù)據(jù)中的最后訪問時間。
其中,服務(wù)器中用于判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù)包括:
獲取當(dāng)前時間;
計算獲得的當(dāng)前時間和第一Session數(shù)據(jù)中的最后訪問時間之間的差值;
判斷差值是否大于預(yù)設(shè)時長閾值;
當(dāng)判斷出差值大于預(yù)設(shè)時長閾值,判斷出第一Session數(shù)據(jù)是無效數(shù)據(jù);
當(dāng)判斷出差值小于或等于預(yù)設(shè)時長閾值,判斷出第一Session數(shù)據(jù)是有效數(shù)據(jù)。
可選地,服務(wù)器,還用于在為與用戶請求對應(yīng)的Session創(chuàng)建第二SessionID之后,將創(chuàng)建的第二SessionID作為第一SessionID存儲至cookie中并將存儲了第一SessionID的cookie返回給用戶。
需要說明的是,將SessionID存儲至cookie中屬于本領(lǐng)域技術(shù)人員所熟知的慣用技術(shù)手段,此處不再贅述,并不用來限制本申請。
可選地,輔助處理器,還用于當(dāng)主用處理器宕機時,通過選舉算法在自身及其它輔助處理器中選取一個輔助處理器作為主用處理器。
可選地,主用處理器和多個輔助處理器的總數(shù)量是奇數(shù)。
需要說明的是,集群設(shè)備中的每一個處理器(主用處理器或輔助處理器)都相當(dāng)于一個節(jié)點,也即相當(dāng)于一個選民,它們都有自己的推薦人(自己或其它處理器),比如,最開始它們都推薦自己,而誰更適合成為Leader(領(lǐng)導(dǎo)者或主用處理器)有一個簡單的規(guī)則,例如配置足夠大、持有的數(shù)據(jù)夠新等等;每個選民都告訴其它選民自己目前的推薦人是誰,當(dāng)選民發(fā)現(xiàn)有比自己更適合的選民時就轉(zhuǎn)而推薦這個更適合的選民;最后,大部選民意見一致時,就可以結(jié)束選舉,從而確定出主用處理器。
可選地,上述多個服務(wù)器可以是Memcached服務(wù)器,其中,Memcached是一套分布式的高速緩存系統(tǒng)。
圖2為本申請實現(xiàn)會話(Session)共享的方法的流程圖,如圖2所示,包括:
步驟201:主用處理器接收到服務(wù)器發(fā)送的第一通知,根據(jù)第一通知刪除自身、本地內(nèi)存區(qū)域以及每個輔助處理器中預(yù)先對應(yīng)存儲的該第一會話標(biāo)識(SessionID)和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù),并通知服務(wù)器創(chuàng)建與用戶請求對應(yīng)的第二SessionID。
可選地,在主用處理器接收到服務(wù)器發(fā)送的第一通知之前,該方法還包括:
服務(wù)器接收到客戶端發(fā)送的用戶請求,判斷該用戶請求攜帶的cookie中是否存在第一SessionID;
當(dāng)判斷出用戶請求攜帶的cookie中存在第一SessionID時,服務(wù)器在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);
服務(wù)器判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù);當(dāng)判斷出查找到的第一Session數(shù)據(jù)是無效數(shù)據(jù)時,則向主用處理器發(fā)送第一通知;相應(yīng)地,
服務(wù)器接收到主用處理器發(fā)送的通知,為與該用戶請求對應(yīng)的Session創(chuàng)建第二SessionID,并向主用處理器發(fā)送第二通知??蛇x地,在服務(wù)器為與用戶請求對應(yīng)的Session創(chuàng)建第二SessionID之后,該方法還包括:服務(wù)器將創(chuàng)建的第二SessionID作為第一SessionID存儲至cookie中并將存儲了第一SessionID的cookie返回給用戶。
其中,服務(wù)器在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù)包括:
服務(wù)器根據(jù)第一SessionID判斷本地內(nèi)存區(qū)域中是否有第一Session數(shù)據(jù);當(dāng)判斷出本地內(nèi)存區(qū)域中有第一Session數(shù)據(jù),服務(wù)器從本地內(nèi)存區(qū)域中讀取第一Session數(shù)據(jù);
當(dāng)判斷出本地內(nèi)存區(qū)域中沒有第一Session數(shù)據(jù),服務(wù)器向主用處理器發(fā)送第四通知;從本地內(nèi)存區(qū)域中讀取第一Session數(shù)據(jù);主用處理器接收到服務(wù)器發(fā)送的第四通知,查找與第一SessionID對應(yīng)的Session數(shù)據(jù);將查找到的Session數(shù)據(jù)同步至本地內(nèi)存區(qū)域中;服務(wù)器從本地內(nèi)存區(qū)域中讀取同步過來的Session數(shù)據(jù)。
可選地,當(dāng)服務(wù)器判斷出用戶請求攜帶的cookie中不存在第一SessionID時,該方法還包括:
服務(wù)器為與用戶請求對應(yīng)的Session創(chuàng)建第三SessionID作為第一SessionID;向主用處理器發(fā)送第三通知;
主用處理器接收到服務(wù)器發(fā)送的第三通知,在本地第一存儲單元中對應(yīng)存儲與用戶請求對應(yīng)的第三Session數(shù)據(jù)和第一SessionID,并且將對應(yīng)存儲的第三Session數(shù)據(jù)和第一SessionID同步至多個輔助處理器中。
其中,輔助處理器中對應(yīng)存儲有主用處理器同步過來的第三Session數(shù)據(jù)和第一SessionID。
其中,主用處理器查找與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)包括:
主用處理器在多個輔助處理器中確定滿足預(yù)設(shè)條件的一個輔助處理器并通知滿足預(yù)設(shè)條件的一個輔助處理器;
滿足預(yù)設(shè)條件的一個輔助處理器在本地第二存儲單元中查找與第一SessionID對應(yīng)存儲的Session數(shù)據(jù);將查找到的與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)發(fā)送給主用處理器;
主用處理器接收來自滿足預(yù)設(shè)條件的一個輔助處理器發(fā)送的查找到的與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)并將接收到的Session數(shù)據(jù)作為與第一SessionID對應(yīng)的Session數(shù)據(jù)。
其中,本地第二存儲單元是指輔助處理器自身的硬盤。其中,一個輔助處理器有一個硬盤。
其中,預(yù)設(shè)條件包括:當(dāng)前處理的進程數(shù)最少,或者配置最高,或者資源利用率最低等等。
可選地,當(dāng)服務(wù)器判斷出查找到的第一Session數(shù)據(jù)是有效數(shù)據(jù)時,該方法還包括:服務(wù)器向主用處理器發(fā)送第五通知;主用處理器接收到服務(wù)器發(fā)送的第五通知,更新自身、本地內(nèi)存區(qū)域以及每個輔助處理器中存儲的第一Session數(shù)據(jù)中的最后訪問時間。
其中,服務(wù)器判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù)包括:
服務(wù)器獲取當(dāng)前時間;
服務(wù)器計算獲得的當(dāng)前時間和第一Session數(shù)據(jù)中的最后訪問時間之間的差值;
服務(wù)器判斷差值是否大于預(yù)設(shè)時長閾值;
當(dāng)判斷出差值大于預(yù)設(shè)時長閾值,服務(wù)器判斷出第一Session數(shù)據(jù)是無效數(shù)據(jù);
當(dāng)判斷出差值小于或等于預(yù)設(shè)時長閾值,服務(wù)器判斷出第一Session數(shù)據(jù)是有效數(shù)據(jù)。
步驟202:主用處理器接收到服務(wù)器發(fā)送的第二通知,根據(jù)第二通知在本地第一存儲單元中對應(yīng)存儲與該用戶請求對應(yīng)的第二Session數(shù)據(jù)和該第二SessionID,并且將對應(yīng)存儲的第二Session數(shù)據(jù)和第二SessionID同步至多個輔助處理器中。
其中,本地第一存儲單元是指主用處理器自身的硬盤。
可選地,當(dāng)主用處理器宕機時,該方法還包括:多個輔助處理器通過選舉算法在自身及其它輔助處理器中選取一個輔助處理器作為主用處理器。
需要說明的是,每一個處理器(主用處理器或輔助處理器)都相當(dāng)于一個節(jié)點,也即相當(dāng)于一個選民,它們都有自己的推薦人(自己或其它處理器),比如,最開始它們都推薦自己,而誰更適合成為Leader(領(lǐng)導(dǎo)者或主用處理器)有一個簡單的規(guī)則,例如配置足夠大、持有的數(shù)據(jù)夠新等等;每個選民都告訴其它選民自己目前的推薦人是誰,當(dāng)選民發(fā)現(xiàn)有比自己更適合的選民時就轉(zhuǎn)而推薦這個更適合的選民;最后,大部選民意見一致時,就可以結(jié)束選舉,從而確定出主用處理器。
可選地,主用處理器和多個輔助處理器的總數(shù)量是奇數(shù)。
可選地,上述多個服務(wù)器可以是Memcached服務(wù)器,其中,Memcached是一套分布式的高速緩存系統(tǒng)。
可選地,該方法之后還包括:服務(wù)器根據(jù)讀取的與用戶請求對應(yīng)的第一Session數(shù)據(jù)對該用戶請求進行處理。
需要說明的是,如何根據(jù)讀取的Session數(shù)據(jù)對用戶請求進行處理屬于本領(lǐng)域技術(shù)人員所熟知的慣用技術(shù)手段,此處不再贅述,并不用來限制本申請。
需要說明的是,上述中的第一SessionID、第二SessionID和第三SessionID均是可以唯一標(biāo)識一個會話的身份的,對于同一用戶(或客戶端)而言,第一SessionID、第二SessionID和第三SessionID是在不同時刻或場景標(biāo)識同一用戶的會話的身份的,因此,在某種意義上,第一SessionID、第二SessionID和第三SessionID是相同的。
需要說明的是,本申請的上述技術(shù)方案中,服務(wù)器僅僅是對應(yīng)保存一份SessionID和Session數(shù)據(jù),并不對Session數(shù)據(jù)進行生命周期的管理(如Session數(shù)據(jù)是無效數(shù)據(jù)時,刪除與該Session數(shù)據(jù)相關(guān)的一切數(shù)據(jù);又如,當(dāng)Session由新數(shù)據(jù)產(chǎn)生時,也是將新數(shù)據(jù)更新至對應(yīng)的Session數(shù)據(jù)中),而是有集群設(shè)備中的主用處理器進行生命周期的管理,從而可以提升服務(wù)器讀取Session數(shù)據(jù)和對用戶請求進行處理的效率,從而提升了整個系統(tǒng)的系統(tǒng)。
本申請實施方式中,通過主用處理器在本地第一存儲單元中對應(yīng)存儲與該用戶請求對應(yīng)的第二Session數(shù)據(jù)和該第二SessionID,并且將對應(yīng)存儲的第二Session數(shù)據(jù)和第二SessionID同步至多個輔助處理器中,從而提升了Session數(shù)據(jù)的安全性。通過服務(wù)器在本地內(nèi)存區(qū)域中讀取Session數(shù)據(jù)對用戶請求進行操作,從而提升了整個系統(tǒng)的性能。
圖3為本申請實現(xiàn)Session共享的方法的實施例的流程圖,如圖3所示,包括:
步驟301:服務(wù)器接收到客戶端發(fā)送的用戶請求。
步驟302:服務(wù)器判斷該用戶請求攜帶的cookie中是否存在第一會話標(biāo)識(SessionID)。當(dāng)判斷出用戶請求攜帶的cookie中存在第一SessionID時,轉(zhuǎn)入步驟303;否則,轉(zhuǎn)入步驟309。
步驟303:服務(wù)器在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù)。
其中,步驟303具體包括:
服務(wù)器根據(jù)第一SessionID判斷本地內(nèi)存區(qū)域中是否有第一Session數(shù)據(jù);當(dāng)判斷出本地內(nèi)存區(qū)域中有第一Session數(shù)據(jù),服務(wù)器從本地內(nèi)存區(qū)域中讀取第一Session數(shù)據(jù);
當(dāng)判斷出本地內(nèi)存區(qū)域中沒有第一Session數(shù)據(jù),服務(wù)器向主用處理器發(fā)送第四通知;從本地內(nèi)存區(qū)域中讀取第一Session數(shù)據(jù);主用處理器接收到服務(wù)器發(fā)送的第四通知,查找與第一SessionID對應(yīng)的Session數(shù)據(jù);將查找到的Session數(shù)據(jù)同步至本地內(nèi)存區(qū)域中;服務(wù)器從本地內(nèi)存區(qū)域中讀取同步過來的Session數(shù)據(jù)。
其中,主用處理器查找與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)包括:
主用處理器在多個輔助處理器中確定滿足預(yù)設(shè)條件的一個輔助處理器并通知滿足預(yù)設(shè)條件的一個輔助處理器;
滿足預(yù)設(shè)條件的一個輔助處理器在本地第二存儲單元中查找與第一SessionID對應(yīng)存儲的Session數(shù)據(jù);將查找到的與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)發(fā)送給主用處理器;
主用處理器接收來自滿足預(yù)設(shè)條件的一個輔助處理器發(fā)送的查找到的與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)并將接收到的Session數(shù)據(jù)作為與第一SessionID對應(yīng)的Session數(shù)據(jù)。
其中,本地第二存儲單元是指輔助處理器自身的硬盤。不同的輔助處理器有不同的本地第二存儲單元,也即一個輔助處理器對應(yīng)一個本地第二存儲單元。
其中,預(yù)設(shè)條件包括:當(dāng)前處理的進程數(shù)最少,或者配置最高,或者資源利用率最低等等。
步驟304:服務(wù)器判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù)。當(dāng)判斷出查找到的第一Session數(shù)據(jù)是無效數(shù)據(jù)時,轉(zhuǎn)入步驟305;否則,轉(zhuǎn)入步驟311。
其中,步驟304具體包括:
服務(wù)器獲取當(dāng)前時間;
服務(wù)器計算獲得的當(dāng)前時間和第一Session數(shù)據(jù)中的最后訪問時間之間的差值;
服務(wù)器判斷差值是否大于預(yù)設(shè)時長閾值;
當(dāng)判斷出差值大于預(yù)設(shè)時長閾值,服務(wù)器判斷出第一Session數(shù)據(jù)是無效數(shù)據(jù);
當(dāng)判斷出差值小于或等于預(yù)設(shè)時長閾值,服務(wù)器判斷出第一Session數(shù)據(jù)是有效數(shù)據(jù)。
步驟305:服務(wù)器向主用處理器發(fā)送第一通知。
步驟306:主用處理器接收到服務(wù)器發(fā)送的第一通知,根據(jù)第一通知刪除自身、本地內(nèi)存區(qū)域以及每個輔助處理器中預(yù)先對應(yīng)存儲的該第一SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù),并通知服務(wù)器建與用戶請求對應(yīng)的第二SessionID。
步驟307:服務(wù)器接收到主用處理器發(fā)送的通知,為與該用戶請求對應(yīng)的Session創(chuàng)建第二SessionID;服務(wù)器將創(chuàng)建的第二SessionID作為第一SessionID存儲至cookie中并將存儲了第一SessionID的cookie返回給用戶;向主用處理器發(fā)送第二通知。
步驟308:主用處理器接收到服務(wù)器發(fā)送的第二通知,根據(jù)第二通知在本地第一存儲單元中對應(yīng)存儲與該用戶請求對應(yīng)的第二Session數(shù)據(jù)和該第二SessionID,并且將對應(yīng)存儲的第二Session數(shù)據(jù)和第二SessionID同步至多個輔助處理器中。
其中,本地第一存儲單元是指主用處理器自身的硬盤。
步驟309:服務(wù)器為與用戶請求對應(yīng)的Session創(chuàng)建第三SessionID作為第一SessionID;向主用處理器發(fā)送第三通知。
步驟310:主用處理器接收到服務(wù)器發(fā)送的第三通知,在本地第一存儲單元中對應(yīng)存儲與用戶請求對應(yīng)的第三Session數(shù)據(jù)和第一SessionID,并且將對應(yīng)存儲的第三Session數(shù)據(jù)和第一SessionID同步至多個輔助處理器中。
其中,輔助處理器中對應(yīng)存儲有主用處理器同步過來的第三Session數(shù)據(jù)和第一SessionID。
步驟311:服務(wù)器向主用處理器發(fā)送第五通知;主用處理器接收到服務(wù)器發(fā)送的第五通知,更新自身、本地內(nèi)存區(qū)域以及每個輔助處理器中存儲的第一Session數(shù)據(jù)中的最后訪問時間。轉(zhuǎn)入步驟312。
步驟312:服務(wù)器根據(jù)讀取的與用戶請求對應(yīng)的第一Session數(shù)據(jù)對該用戶請求進行處理。
可選地,當(dāng)主用處理器宕機時,該方法還包括:多個輔助處理器通過選舉算法在自身及其它輔助處理器中選取一個輔助處理器作為主用處理器。
需要說明的是,每一個處理器(主用處理器或輔助處理器)都相當(dāng)于一個節(jié)點,也即相當(dāng)于一個選民,它們都有自己的推薦人(自己或其它處理器),比如,最開始它們都推薦自己,而誰更適合成為Leader(領(lǐng)導(dǎo)者或主用處理器)有一個簡單的規(guī)則,例如配置足夠大、持有的數(shù)據(jù)夠新等等;每個選民都告訴其它選民自己目前的推薦人是誰,當(dāng)選民發(fā)現(xiàn)有比自己更適合的選民時就轉(zhuǎn)而推薦這個更適合的選民;最后,大部選民意見一致時,就可以結(jié)束選舉,從而確定出主用處理器。
可選地,主用處理器和多個輔助處理器的總數(shù)量是奇數(shù)。
可選地,上述多個服務(wù)器可以是Memcached服務(wù)器,其中,Memcached是一套分布式的高速緩存系統(tǒng)。
可選地,該方法之后還包括:服務(wù)器根據(jù)讀取的與用戶請求對應(yīng)的第一Session數(shù)據(jù)對該用戶請求進行處理。
需要說明的是,如何根據(jù)讀取的Session數(shù)據(jù)對用戶請求進行處理屬于本領(lǐng)域技術(shù)人員所熟知的慣用技術(shù)手段,此處不再贅述,并不用來限制本申請。
圖4為本申請服務(wù)器的結(jié)構(gòu)示意圖,如圖4所示,包括:收發(fā)模塊、判斷模塊、查找模塊和創(chuàng)建模塊。其中,
收發(fā)模塊,用于接收到用戶請求;接收到判斷模塊發(fā)送的通知,則向主用處理器發(fā)送第一通知;接收來自主用處理器的通知,通知創(chuàng)建模塊;接收到創(chuàng)建模塊發(fā)送的通知,向主用處理器發(fā)送第二通知。
判斷模塊,用于判斷該用戶請求攜帶的cookie中是否存在第一會話標(biāo)識(SessionID);當(dāng)判斷出用戶請求攜帶的cookie中存在第一SessionID時,通知查找模塊;判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù);當(dāng)判斷出查找到的第一Session數(shù)據(jù)是無效數(shù)據(jù)時,通知收發(fā)模塊。
查找模塊,用于在本地內(nèi)存區(qū)域中查找與該第一SessionID對應(yīng)的第一Session數(shù)據(jù)。
其中,查找模塊具體用于:根據(jù)第一SessionID判斷本地內(nèi)存區(qū)域中是否有第一Session數(shù)據(jù);當(dāng)判斷出本地內(nèi)存區(qū)域中有第一Session數(shù)據(jù),從本地內(nèi)存區(qū)域中讀取第一Session數(shù)據(jù);當(dāng)判斷出本地內(nèi)存區(qū)域中沒有第一Session數(shù)據(jù),通知收發(fā)模塊向主用處理器發(fā)送第四通知;從本地內(nèi)存區(qū)域中讀取第一Session數(shù)據(jù)。
創(chuàng)建模塊,用于接收到收發(fā)模塊發(fā)送的通知,為與該用戶請求對應(yīng)的Session創(chuàng)建第二SessionID;通知收發(fā)模塊向主用處理器發(fā)送第二通知。
可選地,判斷模塊,還用于當(dāng)判斷出用戶請求攜帶的cookie中不存在第一SessionID時,通知創(chuàng)建模塊;相應(yīng)地,
創(chuàng)建模塊,還用于接收到判斷模塊發(fā)送的通知,為與用戶請求對應(yīng)的Session創(chuàng)建第三SessionID作為第一SessionID;通知收發(fā)模塊向主用處理器發(fā)送第三通知;相應(yīng)地,
收發(fā)模塊,還用于向主用處理器發(fā)送第三通知。
可選地,判斷模塊,還用于當(dāng)判斷出查找到的第一Session數(shù)據(jù)是有效數(shù)據(jù)時,通知收發(fā)模塊向主用處理器發(fā)送第五通知;相應(yīng)地,
收發(fā)模塊,還用于接收到判斷模塊發(fā)送的通知,向主用處理器發(fā)送第五通知。
其中,判斷模塊中用于判斷查找到的第一Session數(shù)據(jù)是否是有效數(shù)據(jù)包括:
獲取當(dāng)前時間;
計算獲得的當(dāng)前時間和第一Session數(shù)據(jù)中的最后訪問時間之間的差值;
判斷差值是否大于預(yù)設(shè)時長閾值;
當(dāng)判斷出差值大于預(yù)設(shè)時長閾值,判斷出第一Session數(shù)據(jù)是無效數(shù)據(jù);
當(dāng)判斷出差值小于或等于預(yù)設(shè)時長閾值,判斷出第一Session數(shù)據(jù)是有效數(shù)據(jù)。
可選地,收發(fā)模塊,還用于將創(chuàng)建的第二SessionID作為第一SessionID存儲至cookie中并將存儲了第一SessionID的cookie返回給用戶。
圖5為本申請集群設(shè)備的結(jié)構(gòu)示意圖,如圖5所示,包括:一個主用處理器和多個輔助處理器。其中,
主用處理器,用于接收到服務(wù)器發(fā)送的第一通知,根據(jù)第一通知刪除自身、本地內(nèi)存區(qū)域以及每個輔助處理器中預(yù)先對應(yīng)存儲的該第一SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù),并通知服務(wù)器建與用戶請求對應(yīng)的第二SessionID;接收到服務(wù)器發(fā)送的第二通知,根據(jù)第二通知在本地第一存儲單元中對應(yīng)存儲與該用戶請求對應(yīng)的第二Session數(shù)據(jù)和該第二SessionID,并且將對應(yīng)存儲的第二Session數(shù)據(jù)和第二SessionID同步至多個輔助處理器中。
輔助處理器,用于預(yù)先對應(yīng)存儲該第一SessionID和與該第一SessionID對應(yīng)的第一Session數(shù)據(jù);對應(yīng)存儲主用處理器同步過來的第二Session數(shù)據(jù)和第二SessionID。
可選地,主用處理器,還用于接收到服務(wù)器發(fā)送的第三通知,在本地第一存儲單元中對應(yīng)存儲與用戶請求對應(yīng)的第三Session數(shù)據(jù)和第一SessionID,并且將對應(yīng)存儲的第三Session數(shù)據(jù)和第一SessionID同步至多個輔助處理器中;相應(yīng)地,
輔助處理器,還用于對應(yīng)存儲主用處理器同步過來的第三Session數(shù)據(jù)和第一SessionID。
可選地,主用處理器,還用于接收到服務(wù)器發(fā)送的第四通知,查找與第一SessionID對應(yīng)的Session數(shù)據(jù);將查找到的Session數(shù)據(jù)同步至本地內(nèi)存區(qū)域中。
其中,主用處理器中用于查找與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)包括:在多個輔助處理器中確定滿足預(yù)設(shè)條件的一個輔助處理器并通知滿足預(yù)設(shè)條件的一個輔助處理器;接收來自滿足預(yù)設(shè)條件的一個輔助處理器發(fā)送的查找到的與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)并將接收到的Session數(shù)據(jù)作為與第一SessionID對應(yīng)的Session數(shù)據(jù);相應(yīng)地,
滿足預(yù)設(shè)條件的一個輔助處理器,用于在本地第二存儲單元中查找與第一SessionID對應(yīng)存儲的Session數(shù)據(jù);將查找到的與第一SessionID對應(yīng)存儲的Session數(shù)據(jù)發(fā)送給主用處理器。
其中,預(yù)設(shè)條件包括:當(dāng)前處理的進程數(shù)最少,或者配置最高,或者資源利用率最低等等。
可選地,主用處理器,還用于接收到服務(wù)器發(fā)送的第五通知,更新自身、本地內(nèi)存區(qū)域以及每個輔助處理器中存儲的第一Session數(shù)據(jù)中的最后訪問時間。
可選地,輔助處理器,還用于當(dāng)主用處理器宕機時,通過選舉算法在自身及其它輔助處理器中選取一個輔助處理器作為主用處理器。
可選地,主用處理器和多個輔助處理器的總數(shù)量是奇數(shù)。
需要說明的是,每一個處理器(主用處理器或輔助處理器)都相當(dāng)于一個節(jié)點,也即相當(dāng)于一個選民,它們都有自己的推薦人(自己或其它處理器),比如,最開始它們都推薦自己,而誰更適合成為Leader(領(lǐng)導(dǎo)者或主用處理器)有一個簡單的規(guī)則,例如配置足夠大、持有的數(shù)據(jù)夠新等等;每個選民都告訴其它選民自己目前的推薦人是誰,當(dāng)選民發(fā)現(xiàn)有比自己更適合的選民時就轉(zhuǎn)而推薦這個更適合的選民;最后,大部選民意見一致時,就可以結(jié)束選舉,從而確定出主用處理器。
需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件(例如處理器)完成,所述程序可以存儲于計算機可讀存儲介質(zhì)中,如只讀存儲器、磁盤或光盤等??蛇x地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現(xiàn)。相應(yīng)地,上述實施例中的各模塊/單元可以采用硬件的形式實現(xiàn),例如通過集成電路來實現(xiàn)其相應(yīng)功能,也可以采用軟件功能模塊的形式實現(xiàn),例如通過處理器執(zhí)行存儲于存儲器中的程序/指令來實現(xiàn)其相應(yīng)功能。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。
以上僅為本申請的優(yōu)選實施例,并非因此限制本申請的專利范圍,凡是利用本申請說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本申請的專利保護范圍內(nèi)。