用于發(fā)布訂閱系統(tǒng)的實現(xiàn)歷史事件訂閱的緩存方法
【專利摘要】本發(fā)明公開了一種用于發(fā)布訂閱系統(tǒng)的實現(xiàn)歷史事件訂閱的緩存方法,包括如下步驟:路由表擴充步驟,在路由表中增設(shè)緩存路由信息;事件處理步驟,通過哈希函數(shù)計算緩存點參考值;事件發(fā)布步驟:根據(jù)緩存點參考值判斷當(dāng)前代理節(jié)點是否作為緩存點并進(jìn)行緩存,同步更新緩存路由信息;緩存訂閱步驟;以及緩存獲取步驟。本發(fā)明具有以下有益效果:本發(fā)明提供的緩存方法實現(xiàn)了訂閱者對歷史事件的訂閱;本發(fā)明充分利用了事件分發(fā)路徑上所有代理及其鄰居代理的存儲空間,提高了存儲資源利用率,增強了發(fā)布訂閱系統(tǒng)的緩存能力;本發(fā)明對緩存冗余做了精簡,在訪存效率與存儲占用率之間做了平衡。
【專利說明】用于發(fā)布訂閱系統(tǒng)的實現(xiàn)歷史事件訂閱的緩存方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及發(fā)布訂閱系統(tǒng)技術(shù),具體涉及一種實現(xiàn)歷史事件訂閱的緩存方法。
【背景技術(shù)】
[0002]發(fā)布訂閱系統(tǒng)包含一個分布式的通信網(wǎng)絡(luò),即事件代理網(wǎng)絡(luò),和一系列相互通信的端點,即訂閱者和發(fā)布者。訂閱者和發(fā)布者之間通過事件代理網(wǎng)絡(luò)互聯(lián),采用一種異步的發(fā)布-訂閱方式來完成數(shù)據(jù)交換。訂閱者通過聲明一個過濾條件表達(dá)式提交訂閱,當(dāng)發(fā)布者發(fā)布了一條符合其訂閱條件的事件,該事件即經(jīng)由代理網(wǎng)絡(luò)路由到訂閱者。在時間上,內(nèi)容的訂閱與發(fā)布是異步的,而在空間上,訂閱者與發(fā)布者也不必關(guān)心對方位于何處,因此發(fā)布訂閱系統(tǒng)實現(xiàn)了通信雙方在空間、時間和控制流上完全解耦。
[0003]在傳統(tǒng)的發(fā)布訂閱系統(tǒng)中,事件通知能夠確保最終到達(dá)每個感興趣的訂閱者,但前提是每個訂閱者都處于在線狀態(tài)且各自的訂閱被整個系統(tǒng)所知。這一前提條件對于動態(tài)網(wǎng)絡(luò)環(huán)境來說則是一大限制,因為客戶端往往會頻繁地加入或離開網(wǎng)絡(luò),新加入的訂閱者可能會請求一個在其加入網(wǎng)絡(luò)之前所發(fā)布的事件。在傳統(tǒng)的發(fā)布訂閱系統(tǒng)中,這種請求是得不到響應(yīng)的,因而如何利用事件緩存機制以使新用戶能夠獲知歷史事件就成為了發(fā)布訂閱系統(tǒng)需要解決的一大問題。
【發(fā)明內(nèi)容】
[0004]為了克服現(xiàn)有技術(shù)中存在的訂閱者無法訂閱歷史事件的缺陷,本發(fā)明提供一種實現(xiàn)歷史事件訂閱的緩存方法。本發(fā)明具體的技術(shù)方案如下:
[0005]一種用于發(fā)布訂閱系統(tǒng)的實現(xiàn)歷史事件訂閱的緩存方法,包括如下步驟:
[0006]路由表擴充步驟:在各代理節(jié)點的路由表中增設(shè)緩存路由信息,所述緩存路由信息用于提供能夠定位到緩存點的路由信息;
[0007]事件處理步驟:當(dāng)某一代理節(jié)點發(fā)出一事件時,通過哈希函數(shù)進(jìn)行計算,得到一緩存點參考值;為所述事件附加一消息頭,所述消息頭中記錄了緩存點信息以及訂閱路徑信息;所述緩存點信息中包括所述緩存點參考值;
[0008]事件發(fā)布步驟:根據(jù)所述消息頭中記錄的訂閱路徑信息,將所述事件向?qū)?yīng)的訂閱節(jié)點進(jìn)行發(fā)布;對于發(fā)布路徑中的每個代理節(jié)點,根據(jù)所述緩存點參考值判斷當(dāng)前代理節(jié)點是否作為緩存點并進(jìn)行緩存,同時,當(dāng)前代理節(jié)點同步更新對應(yīng)于所述事件的緩存路
由信息;
[0009]緩存訂閱步驟:某一代理節(jié)點發(fā)出一緩存請求,所述緩存請求中包含訂閱條件;將所述訂閱條件與當(dāng)前代理節(jié)點的路由表中預(yù)存的過濾條件進(jìn)行匹配,確定緩存事件;所述緩存事件是指,與訂閱條件匹配成功的過濾條件對應(yīng)的事件;
[0010]緩存獲取步驟:若當(dāng)前代理節(jié)點的路由表中包含所述緩存事件對應(yīng)的緩存路由信息,則直接根據(jù)該緩存路由信息找到所述緩存事件對應(yīng)的緩存點,
[0011]將緩存請求轉(zhuǎn)發(fā)到緩存點,獲取緩存;若當(dāng)前代理節(jié)點的路由表中不包含所述緩存事件對應(yīng)的緩存路由信息,則根據(jù)所述緩存事件對應(yīng)的訂閱路由信息,將緩存請求發(fā)送到下一個代理節(jié)點,回轉(zhuǎn)執(zhí)行緩存獲取步驟。
[0012]作為優(yōu)化方案,所述哈希函數(shù)如公式(I)所示:
[0013]
【權(quán)利要求】
1.一種用于發(fā)布訂閱系統(tǒng)的實現(xiàn)歷史事件訂閱的緩存方法,其特征在于,包括如下步驟: 路由表擴充步驟:在各代理節(jié)點的路由表中增設(shè)緩存路由信息,所述緩存路由信息用于提供能夠定位到緩存點的路由信息; 事件處理步驟:當(dāng)某一代理節(jié)點發(fā)出一事件時,通過哈希函數(shù)進(jìn)行計算,得到一緩存點參考值;為所述事件附加一消息頭,所述消息頭中記錄了緩存點信息以及訂閱路徑信息;所述緩存點信息中包括所述緩存點參考值; 事件發(fā)布步驟:根據(jù)所述消息頭中記錄的訂閱路徑信息,將所述事件向?qū)?yīng)的訂閱節(jié)點進(jìn)行發(fā)布;對于發(fā)布路徑中的每個代理節(jié)點,根據(jù)所述緩存點參考值判斷當(dāng)前代理節(jié)點是否作為緩存點并進(jìn)行緩存,同時,當(dāng)前代理節(jié)點同步更新對應(yīng)于所述事件的緩存路由信息; 緩存訂閱步驟:某一代理節(jié)點發(fā)出一緩存請求,所述緩存請求中包含訂閱條件;將所述訂閱條件與當(dāng)前代理節(jié)點的路由表中預(yù)存的過濾條件進(jìn)行匹配,確定緩存事件;所述緩存事件是指,與訂閱條件匹配成功的過濾條件對應(yīng)的事件; 緩存獲取步驟:若當(dāng)前代理節(jié)點的路由表中包含所述緩存事件對應(yīng)的緩存路由信息,則直接根據(jù)該緩存路由信息找到所述緩存事件對應(yīng)的緩存點,將緩存請求轉(zhuǎn)發(fā)到緩存點,獲取緩存;若當(dāng)前代理節(jié)點的路由表中不包含所述緩存事件對應(yīng)的緩存路由信息,則根據(jù)所述緩存事件對應(yīng)的訂閱路由信息,將緩存請求發(fā)送到下一個代理節(jié)點,回轉(zhuǎn)執(zhí)行緩存獲取步驟。
2.根據(jù)權(quán)利要求1所述的緩存方法,其特征在于,所述哈希函數(shù)如公式(I)所示:
3.根據(jù)權(quán)利要求2所述的緩存方法,其特征在于,根據(jù)所述緩存點參考值判斷當(dāng)前代理節(jié)點是否作為緩存點并進(jìn)行緩存具體為: 當(dāng)前代理節(jié)點收到事件后先將所述緩存點參考值t減1,然后根據(jù)緩存點參考值進(jìn)行判斷,若t = 0,則將當(dāng)前代理節(jié)點做為緩存點。
4.根據(jù)權(quán)利要求1所述的緩存方法,其特征在于,所述路由表擴充步驟具體為: 在各代理節(jié)點的路由表中增加cache_nexthops字段,使得所述路由表的結(jié)構(gòu)為:
〈filter Isub_nexthops|cache_nexthops> 其中,filter是指過濾條件,sub_nexthops記錄了與filter匹配成功的事件向訂閱節(jié)點方向轉(zhuǎn)發(fā)的下一跳代理,cache_nexthops記錄了與filter匹配成功的緩存請求向緩存點方向轉(zhuǎn)發(fā)的下一跳代理。
5.根據(jù)權(quán)利要求4所述的緩存方法,其特征在于,所述事件發(fā)布步驟中,對于事件在發(fā)布過程中的當(dāng)前代理節(jié)點,其緩存路由信息的更新方法具體為: 若當(dāng)前代理節(jié)點在緩存點的后方,則將緩存路由信息中的下一跳設(shè)置為前驅(qū)的代理節(jié)占.^ \\\ ? 若當(dāng)前代理節(jié)點正好為緩存點,則將緩存路由信息中的下一跳設(shè)置為當(dāng)前代理節(jié)點自身; 若當(dāng)前代理節(jié)點在緩存點的前方,則將緩存路由信息中的下一跳設(shè)置為后繼的代理節(jié)點。
6.根據(jù)權(quán)利要求5所述的緩存方法,其特征在于,所述緩存獲取步驟中,將緩存請求轉(zhuǎn)發(fā)到緩存點獲取緩存的方法具體為: 在緩存請求轉(zhuǎn)發(fā)到緩存點的過程中依次記錄沿途經(jīng)過的代理節(jié)點,記為緩存請求路徑;緩存請求到達(dá)緩存點后,緩存點將請求的緩存沿緩存請求路徑的逆序發(fā)送給發(fā)出緩存請求的代理節(jié)點。
7.根據(jù)權(quán)利要求1所述的緩存方法,其特征在于,所述事件發(fā)布步驟中,若當(dāng)前代理節(jié)點作為緩存點并進(jìn)行緩存時,進(jìn)行判斷:若當(dāng)前代理節(jié)點的存儲空間耗盡,則詢問該事件發(fā)布路徑之外的直接鄰居是否尚有可用存儲空間;若該鄰居有可用存儲空間,則將事件轉(zhuǎn)發(fā)給該鄰居進(jìn)行緩存。
8.根據(jù)權(quán)利要求1所述的緩存方法,其特征在于,所述緩存點信息還包括緩存點位置、緩存副本數(shù)目以及緩存時間戳,所述緩存點位置、緩存副本數(shù)目以及緩存時間戳的初值均為空;對于發(fā)布路徑中的每個代理節(jié)點,若當(dāng)前代理節(jié)點作為緩存點并進(jìn)行緩存時,更新事件的消息頭中記錄的緩存點位置、緩存副本數(shù)目以及緩存時間戳,同時更新當(dāng)前代理節(jié)點內(nèi)存儲的緩存點位置、緩存副本數(shù)目以及緩存時間戳。
9.根據(jù)權(quán)利要求8所述的緩存方法,其特征在于,在事件在發(fā)布過程中,沿途比較各代理節(jié)點的緩存時間戳,獲得最舊緩存的位置,當(dāng)事件抵達(dá)訂閱節(jié)點時,若整條發(fā)布路徑上的存儲空間耗盡,則轉(zhuǎn)回至最舊緩存的位置替換最舊的緩存。
10.根據(jù)權(quán)利要求1所述的緩存方法,其特征在于,所述事件發(fā)布步驟中,對于每個代理節(jié)點,采用冗余精簡方法對事件進(jìn)行緩存,所述冗余精簡方法具體為: 設(shè)代理節(jié)點為bi;其包含若干子節(jié)點bij,設(shè)gij為每個子節(jié)點bij對應(yīng)的子樹;根據(jù)目標(biāo)函數(shù)學(xué)確定將緩存的副本分派到緩存點的哪些子樹,如公式(2)所示:
【文檔編號】H04L29/08GK103888517SQ201410075650
【公開日】2014年6月25日 申請日期:2014年3月4日 優(yōu)先權(quán)日:2014年3月4日
【發(fā)明者】曹健, 于潤勝, 徐錢元, 許文星 申請人:上海交通大學(xué)