一種緩存控制方法和系統(tǒng)的制作方法
【專(zhuān)利摘要】一種緩存控制方法,包括:將包含多個(gè)服務(wù)器的集群形成層級(jí)網(wǎng)絡(luò)結(jié)構(gòu);該結(jié)構(gòu)中每一層由多個(gè)節(jié)點(diǎn)以設(shè)定的第一結(jié)構(gòu)的形式連接而成;每一第一結(jié)構(gòu)構(gòu)成上一層網(wǎng)絡(luò)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);最底層包括一個(gè)或多個(gè)第一結(jié)構(gòu),集群中的每個(gè)服務(wù)器作為最底層的第一結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);第一結(jié)構(gòu)由每n個(gè)節(jié)點(diǎn)按預(yù)定規(guī)則形成:n個(gè)節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)和該n個(gè)節(jié)點(diǎn)中的k個(gè)節(jié)點(diǎn)相連,0<k<n,n>1;判斷緩存數(shù)據(jù)發(fā)生更新時(shí),發(fā)送更新通知至頂層的第一結(jié)構(gòu),逐層轉(zhuǎn)發(fā)至最底層的第一結(jié)構(gòu),直到最底層的第一結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)獲取更新通知,以使集群中的各服務(wù)器更新緩存數(shù)據(jù)。本申請(qǐng)還提供一種緩存控制系統(tǒng)。本申請(qǐng)保證集群中的各服務(wù)器的本地緩存的及時(shí)更新和同步。
【專(zhuān)利說(shuō)明】一種緩存控制方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種緩存控制方法和系統(tǒng)。
【背景技術(shù)】
[0002] 現(xiàn)有技術(shù)中,一般存在兩種緩存方法:
[0003] -種是本地緩存:數(shù)據(jù)保存在本地服務(wù)器的內(nèi)存上,訪問(wèn)時(shí)走的僅是系統(tǒng)總線(xiàn),速 度快。如開(kāi)源的EhCache、googel MemCached、OSCache。本地緩存與應(yīng)用一起部署,會(huì)占用 應(yīng)用服務(wù)器較多內(nèi)存空間。
[0004] 另一種是分布式緩存:應(yīng)用把需緩存的數(shù)據(jù)通過(guò)網(wǎng)絡(luò),存放在分布式緩存服務(wù)器 上。也可以建立緩存服務(wù)器集群,緩存空間理論上足夠大;并且不占用應(yīng)用服務(wù)器內(nèi)存空 間。分布式緩存需要通過(guò)網(wǎng)絡(luò)進(jìn)行交互,占用網(wǎng)絡(luò)帶寬,另外,有序列化數(shù)據(jù)的計(jì)算性能消 耗,性能較差。
[0005] 對(duì)于本地緩存,數(shù)據(jù)發(fā)生變更時(shí),一般的實(shí)現(xiàn)都是通過(guò)消息通知讓集群內(nèi)所有 CACHE(緩存)中的相關(guān)數(shù)據(jù)失效。當(dāng)再次需要相關(guān)數(shù)據(jù)時(shí),各服務(wù)器到數(shù)據(jù)源獲取數(shù)據(jù),并 放入CACHE中。該方法不能實(shí)現(xiàn)緩存數(shù)據(jù)的及時(shí)更新和保證事務(wù)(集群模式)的同步。
【發(fā)明內(nèi)容】
[0006] 本申請(qǐng)要解決的技術(shù)問(wèn)題是提供一種緩存控制方法和系統(tǒng),實(shí)現(xiàn)緩存數(shù)據(jù)的及時(shí) 更新和事務(wù)同步。
[0007] 為了解決上述問(wèn)題,本申請(qǐng)?zhí)峁┝艘环N緩存控制方法,包括:
[0008] 將包含多個(gè)服務(wù)器的集群形成層級(jí)網(wǎng)絡(luò)結(jié)構(gòu);
[0009] 其中,所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的每一層由多個(gè)節(jié)點(diǎn)以設(shè)定的第一結(jié)構(gòu)的形式連接而 成;每一包含多個(gè)節(jié)點(diǎn)的第一結(jié)構(gòu)構(gòu)成上一層網(wǎng)絡(luò)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu) 的最底層包括一個(gè)或多個(gè)第一結(jié)構(gòu),所述集群中的每個(gè)服務(wù)器作為所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的最 底層的第一結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);
[0010] 所述第一結(jié)構(gòu)由每η個(gè)節(jié)點(diǎn)按預(yù)定規(guī)則形成,所述預(yù)定規(guī)則包括:所述η個(gè)節(jié)點(diǎn)中 的每個(gè)節(jié)點(diǎn)和該η個(gè)節(jié)點(diǎn)中的k個(gè)節(jié)點(diǎn)相連,0 < k < η, η > 1 ; toon] 判斷緩存數(shù)據(jù)發(fā)生更新時(shí),發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的頂層的第一結(jié) 構(gòu),由所述頂層的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最底層的第一結(jié) 構(gòu)的每個(gè)節(jié)點(diǎn)獲取所述更新通知,即所述集群中的各服務(wù)器獲取所述更新通知,以使所述 集群中的各服務(wù)器更新緩存數(shù)據(jù)。
[0012] 上述方法還可具有以下特點(diǎn),所述發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的頂層的第 一結(jié)構(gòu),由所述頂層的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最底層的第 一結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)獲取所述更新通知包括:
[0013] 每個(gè)所述第一結(jié)構(gòu)中設(shè)定一主節(jié)點(diǎn);
[0014] 將所述更新通知發(fā)送至所述頂層的第一結(jié)構(gòu)的主節(jié)點(diǎn);
[0015] 每個(gè)節(jié)點(diǎn)接收到所述更新通知后,進(jìn)行如下轉(zhuǎn)發(fā)處理:
[0016] 將所述更新通知發(fā)送給處于同一第一結(jié)構(gòu)的相鄰節(jié)點(diǎn);以及,如果所述節(jié)點(diǎn)非最 底層節(jié)點(diǎn),將所述更新通知發(fā)送給該層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)中對(duì)應(yīng)的下一層第一結(jié)構(gòu)中的主節(jié)點(diǎn)。
[0017] 上述方法還可具有以下特點(diǎn),所述方法還包括:每個(gè)節(jié)點(diǎn)接收到所述更新通知后, 進(jìn)行所述轉(zhuǎn)發(fā)處理前,判斷是否已處理所述更新通知,如果已處理,則丟棄該更新通知,如 果沒(méi)有,才進(jìn)行所述轉(zhuǎn)發(fā)處理。
[0018] 上述方法還可具有以下特點(diǎn),所述方法還包括:所述服務(wù)器獲取所述更新通知并 接收新的緩存數(shù)據(jù)后,更新原緩存數(shù)據(jù)。
[0019] 上述方法還可具有以下特點(diǎn),所述η為10,所述k為3,所述第一結(jié)構(gòu)為Petersen 圖。
[0020] 上述方法還可具有以下特點(diǎn),所述方法還包括:
[0021] 將應(yīng)用的緩存數(shù)據(jù)存儲(chǔ)到分布式緩存中,以及,將使用頻率和/或大小滿(mǎn)足預(yù)定 條件的緩存數(shù)據(jù)存儲(chǔ)到所述集群中的服務(wù)器的本地緩存中;
[0022] 接收到一個(gè)或多個(gè)應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求后,如果所述分布式緩存中 不存在所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),則向數(shù)據(jù)源獲取所述一個(gè)或多個(gè)應(yīng)用請(qǐng) 求訪問(wèn)的緩存數(shù)據(jù)后,將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述一個(gè)或多個(gè) 應(yīng)用,并將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存中。
[0023] 上述方法還可具有以下特點(diǎn),所述預(yù)定條件包括:
[0024] 使用頻率大于第一閾值且占用的緩存空間小于第二閾值;
[0025] 和/或,使用頻率大于第四閾值且占用的緩存空間大于第三閾值。
[0026] 上述方法還可具有以下特點(diǎn),所述方法還包括:
[0027] 接收到應(yīng)用的緩存數(shù)據(jù)訪問(wèn)請(qǐng)求后,如果所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)位于發(fā)起 所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的服務(wù)器的本地緩存或者位于所述分布式緩存中,則從所述本地緩 存或所述分布式緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用。
[0028] 上述方法還可具有以下特點(diǎn),所述從所述本地緩存或所述分布式緩存中獲取所述 應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用包括:
[0029] 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng) 求的服務(wù)器的本地緩存中存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)時(shí),從發(fā)起所述緩存數(shù)據(jù)訪問(wèn) 請(qǐng)求的服務(wù)器的本地緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所述應(yīng)用;
[0030] 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng) 求的服務(wù)器的本地緩存中不存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),或者,所述應(yīng)用請(qǐng)求訪問(wèn) 的緩存數(shù)據(jù)不滿(mǎn)足所述預(yù)定條件時(shí),判斷所述分布式緩存中是否存在所述應(yīng)用請(qǐng)求訪問(wèn)的 緩存數(shù)據(jù),如果存在,則從所述分布式緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所 述應(yīng)用。
[0031] 上述方法還可具有以下特點(diǎn),所述方法還包括:
[0032] 每個(gè)所述服務(wù)器上布置有中央控制裝置,且不同服務(wù)器上的中央控制裝置之間相 互通信;
[0033] 所述接收到多個(gè)應(yīng)用的訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求后,如果所述分布式緩存中 不存在所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),則向數(shù)據(jù)源獲取所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存 數(shù)據(jù),將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述多個(gè)應(yīng)用,并將所述多個(gè)應(yīng)用請(qǐng)求 訪問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存中包括:
[0034] 多個(gè)中央控制裝置分別接收到其所在的服務(wù)器上的應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪 問(wèn)請(qǐng)求后,如果所述分布式緩存中不存在所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),由其中一個(gè) 中央控制裝置從所述數(shù)據(jù)源獲取所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)后發(fā)送給所述其所在 的服務(wù)器上的應(yīng)用,并將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存中,以 及,將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述多個(gè)中央控制裝置中其他中央控制裝 置由所述其他中央控制裝置發(fā)送給各自所在的服務(wù)器上的應(yīng)用。
[0035] 本申請(qǐng)還提供一種緩存控制系統(tǒng),所述系統(tǒng)包括:集群以及中央控制裝置,所述中 央控制裝置包括配置模塊和更新模塊,其中:
[0036] 所述集群包括多個(gè)服務(wù)器,每一服務(wù)器包含本地緩存系統(tǒng);
[0037] 所述配置模塊用于,將所述集群的所述多個(gè)服務(wù)器形成層級(jí)網(wǎng)絡(luò)結(jié)構(gòu),記錄所述 層級(jí)網(wǎng)絡(luò)結(jié)構(gòu):其中,所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的每一層由多個(gè)節(jié)點(diǎn)以設(shè)定的第一結(jié)構(gòu)的形式連 接而成;每一包含多個(gè)節(jié)點(diǎn)的第一結(jié)構(gòu)構(gòu)成上一層網(wǎng)絡(luò)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);所述層級(jí)網(wǎng)絡(luò) 結(jié)構(gòu)的最底層包括一個(gè)或多個(gè)第一結(jié)構(gòu),所述集群中的每個(gè)服務(wù)器作為所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu) 的最底層的第一結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);所述第一結(jié)構(gòu)由每η個(gè)節(jié)點(diǎn)按預(yù)定規(guī)則形成,所述預(yù) 定規(guī)則包括:所述η個(gè)節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)和該η個(gè)節(jié)點(diǎn)中的k個(gè)節(jié)點(diǎn)相連,0 < k < η,η > 1 ;
[0038] 所述更新模塊用于:判斷緩存數(shù)據(jù)發(fā)生更新時(shí),發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié) 構(gòu)的頂層的第一結(jié)構(gòu),由所述頂層的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所 述最底層的第一結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)獲取所述更新通知,即所述集群中的各服務(wù)器獲取所述更 新通知,以使所述集群中的各服務(wù)器更新緩存數(shù)據(jù)。
[0039] 上述系統(tǒng)還可具有以下特點(diǎn),所述配置模塊還用于:在每個(gè)所述第一結(jié)構(gòu)中設(shè)定 一主節(jié)點(diǎn);
[0040] 所述更新模塊發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的頂層的第一結(jié)構(gòu),由所述頂層 的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最底層的第一結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)獲 取所述更新通知包括:
[0041] 將所述更新通知發(fā)送至所述頂層的第一結(jié)構(gòu)的主節(jié)點(diǎn);每個(gè)節(jié)點(diǎn)接收到所述更新 通知后,進(jìn)行如下轉(zhuǎn)發(fā)處理:將所述更新通知發(fā)送給處于同一第一結(jié)構(gòu)的相鄰節(jié)點(diǎn),以及, 如果所述節(jié)點(diǎn)非最底層節(jié)點(diǎn),將所述更新通知發(fā)送給該層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)中對(duì)應(yīng)的下一層第一 結(jié)構(gòu)中的主節(jié)點(diǎn)。
[0042] 上述系統(tǒng)還可具有以下特點(diǎn),所述更新模塊還用于:每個(gè)節(jié)點(diǎn)接收到所述更新通 知后,進(jìn)行所述轉(zhuǎn)發(fā)處理前,判斷是否已處理所述更新通知,如果已處理,則丟棄該更新通 知,如果沒(méi)有,才進(jìn)行所述轉(zhuǎn)發(fā)處理。
[0043] 上述系統(tǒng)還可具有以下特點(diǎn),所述服務(wù)器還用于:獲取所述更新通知并接收新的 緩存數(shù)據(jù)后,使用所述新的緩存數(shù)據(jù)更新原緩存數(shù)據(jù)。
[0044] 上述系統(tǒng)還可具有以下特點(diǎn),所述η為10,所述k為3,所述第一結(jié)構(gòu)為Petersen 圖。
[0045] 上述系統(tǒng)還可具有以下特點(diǎn),所述系統(tǒng)還包括:分布式緩存系統(tǒng);所述中央控制 裝置還包括存儲(chǔ)控制模塊和訪問(wèn)控制模塊,其中:
[0046] 所述存儲(chǔ)控制模塊用于,將應(yīng)用的緩存數(shù)據(jù)存儲(chǔ)到所述分布式緩存系統(tǒng)中,以及, 將使用頻率和/或大小滿(mǎn)足預(yù)定條件的緩存數(shù)據(jù)存儲(chǔ)到所述集群中的服務(wù)器的本地緩存 系統(tǒng)中;
[0047] 所述訪問(wèn)控制模塊用于,接收到一個(gè)或多個(gè)應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求 后,如果所述分布式緩存系統(tǒng)中不存在所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),則向數(shù) 據(jù)源獲取所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)后,將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的 緩存數(shù)據(jù)發(fā)送給所述一個(gè)或多個(gè)應(yīng)用,并將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)更新 到所述分布式緩存系統(tǒng)中。
[0048] 上述系統(tǒng)還可具有以下特點(diǎn),所述預(yù)定條件包括:
[0049] 使用頻率大于第一閾值且占用的緩存空間小于第二閾值;
[0050] 和/或,使用頻率大于第四閾值且占用的緩存空間大于第三閾值。
[0051] 上述系統(tǒng)還可具有以下特點(diǎn),所述訪問(wèn)控制模塊還用于,接收到應(yīng)用的緩存數(shù)據(jù) 訪問(wèn)請(qǐng)求后,如果所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)位于發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的服務(wù)器 的本地緩存系統(tǒng)或者位于所述分布式緩存系統(tǒng)中,則從所述本地緩存系統(tǒng)或所述分布式緩 存系統(tǒng)中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用。
[0052] 上述系統(tǒng)還可具有以下特點(diǎn),所述訪問(wèn)控制模塊從所述本地緩存系統(tǒng)或所述分布 式緩存系統(tǒng)中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用包括:
[0053] 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng) 求的服務(wù)器的本地緩存系統(tǒng)中存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)時(shí),從發(fā)起所述緩存數(shù) 據(jù)訪問(wèn)請(qǐng)求的服務(wù)器的本地緩存系統(tǒng)中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所述應(yīng) 用;
[0054] 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng) 求的服務(wù)器的本地緩存系統(tǒng)中不存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),或者,所述應(yīng)用請(qǐng)求 訪問(wèn)的緩存數(shù)據(jù)不滿(mǎn)足所述預(yù)定條件時(shí),判斷所述分布式緩存系統(tǒng)中是否存在所述應(yīng)用請(qǐng) 求訪問(wèn)的緩存數(shù)據(jù),如果存在,則從所述分布式緩存系統(tǒng)中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存 數(shù)據(jù),發(fā)送給所述應(yīng)用。
[0055] 上述系統(tǒng)還可具有以下特點(diǎn),每個(gè)所述服務(wù)器上布置有所述中央控制裝置,且不 同服務(wù)器上的所述中央控制裝置之間相互通信;
[0056] 所述訪問(wèn)控制模塊還用于,當(dāng)多個(gè)服務(wù)器上的中央控制裝置的訪問(wèn)控制模塊分別 接收到其所在的服務(wù)器上的應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求后,如果所述分布式緩存系 統(tǒng)中不存在所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),由其中一個(gè)中央控制裝置的訪問(wèn)控制模塊 從所述數(shù)據(jù)源獲取所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)后發(fā)送給所述其所在的服務(wù)器上的 應(yīng)用;并通知所述更新模塊將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存系 統(tǒng)中,以及,將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述多個(gè)中央控制裝置中其他中 央控制裝置的訪問(wèn)控制模塊,由所述其他中央控制裝置的訪問(wèn)控制模塊發(fā)送給各自所在的 服務(wù)器上的應(yīng)用。
[0057] 本申請(qǐng)包括以下優(yōu)點(diǎn):
[0058] 1、同時(shí)使用本地緩存和分布式緩存,提升系統(tǒng)性能,也避免本地內(nèi)存占用過(guò)多。
[0059] 2、數(shù)據(jù)除可存放在本地緩存中外,對(duì)于大數(shù)據(jù)也可存放于本地磁盤(pán)中,避免過(guò)多 占用本地內(nèi)存,另外,大數(shù)據(jù)直接從本地獲取,可以避免大對(duì)象數(shù)據(jù)網(wǎng)絡(luò)傳輸和序列化的損 耗。
[0060] 3、通過(guò)多個(gè)節(jié)點(diǎn)組成第一結(jié)構(gòu)進(jìn)行更新通知,實(shí)現(xiàn)P2P模式的集群內(nèi)本地緩存同 步,保證集群中的各服務(wù)器的本地緩存的及時(shí)更新和同步。相對(duì)于現(xiàn)有技術(shù)中的廣播式更 新通知方式,本申請(qǐng)中由于更新通知存在冗余(以Petersen圖為例,每個(gè)節(jié)點(diǎn)接收到3次 通知),可以避免僅通知1次時(shí)造成部分應(yīng)用服務(wù)器無(wú)法被通知到的問(wèn)題。另外,廣播式更 新通知方式中,發(fā)起更新通知的單個(gè)應(yīng)用服務(wù)器需要和集群中其余服務(wù)器之間進(jìn)行交互, 交互操作過(guò)多,對(duì)單個(gè)服務(wù)器性能要求高,本申請(qǐng)實(shí)施例中單個(gè)服務(wù)器只需接收三次更新 通知,發(fā)送三次更新通知,對(duì)單個(gè)服務(wù)器性能要求低。
[0061] 4、通過(guò)中央控制裝置的二段提交策略,控制同步的事務(wù)性。
[0062] 當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品并不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0063] 圖1是本申請(qǐng)實(shí)施例緩存控制系統(tǒng)示意圖;
[0064] 圖2是本申請(qǐng)實(shí)施例Petersen圖示意圖;
[0065] 圖3是本申請(qǐng)緩存控制系統(tǒng)框圖。
【具體實(shí)施方式】
[0066] 為使本申請(qǐng)的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本申請(qǐng) 的實(shí)施例進(jìn)行詳細(xì)說(shuō)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中 的特征可以相互任意組合。
[0067] 另外,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的 順序執(zhí)行所示出或描述的步驟。
[0068] 本申請(qǐng)中,通過(guò)中央控制裝置統(tǒng)一管理緩存數(shù)據(jù),應(yīng)用需要訪問(wèn)緩存數(shù)據(jù)時(shí),向中 央控制裝置發(fā)送訪問(wèn)請(qǐng)求,由中央控制裝置將緩存數(shù)據(jù)返回給應(yīng)用,以及,通過(guò)將集群中的 服務(wù)器組成層級(jí)網(wǎng)絡(luò)結(jié)構(gòu),實(shí)現(xiàn)P2P模式的集群內(nèi)本地緩存同步,保證集群中的各服務(wù)器 的本地緩存的及時(shí)更新和同步。
[0069] 本申請(qǐng)實(shí)施例提供一種緩存控制方法,包括:
[0070] 將包含多個(gè)服務(wù)器的集群形成層級(jí)網(wǎng)絡(luò)結(jié)構(gòu);
[0071 ] 其中,所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的每一層由多個(gè)節(jié)點(diǎn)以設(shè)定的第一結(jié)構(gòu)的形式連接而 成;每一包含多個(gè)節(jié)點(diǎn)的第一結(jié)構(gòu)構(gòu)成上一層網(wǎng)絡(luò)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu) 的最底層包括一個(gè)或多個(gè)第一結(jié)構(gòu),所述集群中的每個(gè)服務(wù)器作為所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的最 底層的第一結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);
[0072] 所述第一結(jié)構(gòu)由每η個(gè)節(jié)點(diǎn)按預(yù)定規(guī)則形成,所述預(yù)定規(guī)則包括:所述η個(gè)節(jié)點(diǎn)中 的每個(gè)節(jié)點(diǎn)和該η個(gè)節(jié)點(diǎn)中的k個(gè)節(jié)點(diǎn)相連,0 < k < η, η > 1 ;
[0073] 判斷緩存數(shù)據(jù)發(fā)生更新時(shí),發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的頂層的第一結(jié) 構(gòu),由所述頂層的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最底層的第一結(jié) 構(gòu)的每個(gè)節(jié)點(diǎn)獲取所述更新通知,即所述集群中的各服務(wù)器獲取所述更新通知,以使所述 集群中的各服務(wù)器更新緩存數(shù)據(jù)。
[0074] 在本實(shí)施例的一種備選方案中,層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的一種配置過(guò)程為:
[0075] 將集群中的每個(gè)應(yīng)用服務(wù)器作為一個(gè)節(jié)點(diǎn),每η個(gè)節(jié)點(diǎn)按預(yù)定規(guī)則進(jìn)行連接,生 成所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)中的最底層的第一結(jié)構(gòu),且每η個(gè)節(jié)點(diǎn)生成一個(gè)所述第一結(jié)構(gòu);
[0076] 如果所述最底層的第一結(jié)構(gòu)只有1個(gè),該層極網(wǎng)絡(luò)結(jié)構(gòu)的最底層即為最頂層,配 置結(jié)束;
[0077] 如果最底層的第一結(jié)構(gòu)大于1個(gè),則將最底層的每個(gè)第一結(jié)構(gòu)作為當(dāng)前層(即最 底層的上一層)中的一個(gè)節(jié)點(diǎn),所述當(dāng)前層網(wǎng)絡(luò)結(jié)構(gòu)的每η個(gè)節(jié)點(diǎn)按所述預(yù)定規(guī)則進(jìn)行連 接,生成新的第一結(jié)構(gòu);
[0078] 繼續(xù)判斷當(dāng)前層中的第一結(jié)構(gòu)數(shù)量是否大于1個(gè),如果只有1個(gè),則配置結(jié)束;如 果大于1個(gè),則將當(dāng)前層中的每個(gè)第一結(jié)構(gòu)作為當(dāng)前層的上一層網(wǎng)絡(luò)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn), 并將所述節(jié)點(diǎn)按所述預(yù)定規(guī)則進(jìn)行連接,生成新的第一結(jié)構(gòu);重復(fù)該步驟,直到所述層級(jí)網(wǎng) 絡(luò)結(jié)構(gòu)中的最頂層只有1個(gè)第一結(jié)構(gòu)生成;其中,生成每個(gè)第一結(jié)構(gòu)時(shí),如果剩余的節(jié)點(diǎn)數(shù) 少于η個(gè),則缺少的節(jié)點(diǎn)用空節(jié)點(diǎn)替代,以再生成第一結(jié)構(gòu)。
[0079] 在本實(shí)施例的一種備選方案中,所述發(fā)送更新通知至所述頂層的第一結(jié)構(gòu),由所 述頂層的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最底層的第一結(jié)構(gòu)的每個(gè) 節(jié)點(diǎn)獲取所述更新通知包括:
[0080] 所述發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的頂層的第一結(jié)構(gòu),由所述頂層的第一結(jié) 構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最底層的第一結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)獲取所述更 新通知包括:
[0081] 每個(gè)所述第一結(jié)構(gòu)中可以設(shè)定一主節(jié)點(diǎn);
[0082] 將所述更新通知發(fā)送至所述頂層的第一結(jié)構(gòu)的主節(jié)點(diǎn);
[0083] 每個(gè)節(jié)點(diǎn)接收到所述更新通知后,進(jìn)行如下轉(zhuǎn)發(fā)處理:
[0084] 將所述更新通知發(fā)送給處于同一第一結(jié)構(gòu)的相鄰節(jié)點(diǎn);以及,如果所述節(jié)點(diǎn)非最 底層節(jié)點(diǎn),將所述更新通知發(fā)送給該層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)中對(duì)應(yīng)的下一層第一結(jié)構(gòu)中的主節(jié)點(diǎn)。 [0085] 所述方法還包括:每個(gè)節(jié)點(diǎn)接收到所述更新通知后,進(jìn)行所述轉(zhuǎn)發(fā)處理前,還可判 斷是否已處理所述更新通知,如果已處理,則丟棄該更新通知,如果沒(méi)有,才進(jìn)行所述轉(zhuǎn)發(fā) 處理。
[0086] 在本實(shí)施例的一種備選方案中,還包括:所述服務(wù)器獲取所述更新通知并接收新 的緩存數(shù)據(jù)后,更新原緩存數(shù)據(jù)。
[0087] 在本實(shí)施例的一種備選方案中,在所述服務(wù)器獲取所述更新通知并接收新的緩存 數(shù)據(jù)后,通知所述服務(wù)器進(jìn)行變更生效,服務(wù)器接收到變更生效的指令后,使用所述新的緩 存數(shù)據(jù)更新原緩存數(shù)據(jù)。
[0088] 在本實(shí)施例的一種備選方案中,所述第一結(jié)構(gòu)為Petersen圖,所述η為10,所述k 為3。當(dāng)然,n,k也可以取其它值,第一結(jié)構(gòu)也可以是其他結(jié)構(gòu),比如,η = 5, k = 2,第一結(jié) 構(gòu)為一五邊形,等等。
[0089] 在本實(shí)施例的一種備選方案中,還包括:
[0090] 將應(yīng)用的緩存數(shù)據(jù)存儲(chǔ)到分布式緩存中,以及,將使用頻率和/或大小滿(mǎn)足預(yù)定 條件的緩存數(shù)據(jù)存儲(chǔ)到所述集群中的服務(wù)器的本地緩存中;
[0091] 接收到一個(gè)或多個(gè)應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求后,如果所述分布式緩存中 不存在所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),則向數(shù)據(jù)源獲取所述一個(gè)或多個(gè)應(yīng)用請(qǐng) 求訪問(wèn)的緩存數(shù)據(jù)后,將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述一個(gè)或多個(gè) 應(yīng)用,并將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存中。
[0092] 預(yù)定條件可以根據(jù)需要設(shè)定,在本實(shí)施例的一種備選方案中,所述預(yù)定條件包 括:
[0093] 使用頻率大于第一閾值且占用的緩存空間小于第二閾值;
[0094] 和/或,使用頻率大于第四閾值且占用的緩存空間大于第三閾值。
[0095] 在本實(shí)施例的一種備選方案中,還包括:
[0096] 接收到應(yīng)用的緩存數(shù)據(jù)訪問(wèn)請(qǐng)求后,如果所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)位于發(fā)起 所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的服務(wù)器的本地緩存或者位于所述分布式緩存中,則從所述本地緩 存或所述分布式緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用。
[0097] 在本實(shí)施例的一種備選方案中,所述從所述本地緩存或所述分布式緩存中獲取所 述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用包括:
[0098] 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng) 求的服務(wù)器的本地緩存中存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)時(shí),從發(fā)起所述緩存數(shù)據(jù)訪問(wèn) 請(qǐng)求的服務(wù)器的本地緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所述應(yīng)用;
[0099] 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng) 求的服務(wù)器的本地緩存中不存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),或者,所述應(yīng)用請(qǐng)求訪問(wèn) 的緩存數(shù)據(jù)不滿(mǎn)足所述預(yù)定條件時(shí),判斷所述分布式緩存中是否存在所述應(yīng)用請(qǐng)求訪問(wèn)的 緩存數(shù)據(jù),如果存在,則從所述分布式緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所 述應(yīng)用。
[0100] 在本實(shí)施例的一種備選方案中,還包括:
[0101] 每個(gè)所述服務(wù)器上布置有中央控制裝置,且不同服務(wù)器上的中央控制裝置之間相 互通信;
[0102] 所述接收到多個(gè)應(yīng)用的訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求后,如果所述分布式緩存中 不存在所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),則向數(shù)據(jù)源獲取所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存 數(shù)據(jù),將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述多個(gè)應(yīng)用,并將所述多個(gè)應(yīng)用請(qǐng)求 訪問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存中包括:
[0103] 多個(gè)中央控制裝置分別接收到其所在的服務(wù)器上的應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪 問(wèn)請(qǐng)求后,如果所述分布式緩存中不存在所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),由其中一個(gè) 中央控制裝置從所述數(shù)據(jù)源獲取所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)后發(fā)送給所述其所在 的服務(wù)器上的應(yīng)用,并將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存中,以 及,將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述多個(gè)中央控制裝置中其他中央控制裝 置由所述其他中央控制裝置發(fā)送給各自所在的服務(wù)器上的應(yīng)用。
[0104] 在本實(shí)施例的一種備選方案中,將滿(mǎn)足所述預(yù)定條件的數(shù)據(jù)存儲(chǔ)到所述應(yīng)用的應(yīng) 用服務(wù)器的本地緩存中包括:
[0105] 將滿(mǎn)足第一子條件的數(shù)據(jù)放入所述應(yīng)用的應(yīng)用服務(wù)器的本地緩存的第一區(qū)間中 存儲(chǔ);
[0106] 將所述滿(mǎn)足第二子條件的數(shù)據(jù)存入所述應(yīng)用的應(yīng)用服務(wù)器的或以文件方式存儲(chǔ), 將滿(mǎn)足第二子條件的數(shù)據(jù)的索引表存入所述應(yīng)用的應(yīng)用服務(wù)器的本地緩存的第二區(qū)間,所 述索引表指示滿(mǎn)足所述第二子條件的數(shù)據(jù)的存儲(chǔ)位置。
[0107] 中央控制裝置從所述本地緩存或分布式緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù) 據(jù)并發(fā)送給所述應(yīng)用分兩種情況,根據(jù)請(qǐng)求訪問(wèn)的數(shù)據(jù)是否滿(mǎn)足預(yù)定條件分別處理。由于 滿(mǎn)足預(yù)定條件的緩存數(shù)據(jù)也存儲(chǔ)在本地緩存中,因此,如果要求訪問(wèn)滿(mǎn)足預(yù)定條件的緩存 數(shù)據(jù),則中央控制裝置先查找本地緩存,如果本地緩存沒(méi)有要求訪問(wèn)的緩存數(shù)據(jù),則查找分 布式緩存,如果分布式緩存中也沒(méi)有要求訪問(wèn)的緩存數(shù)據(jù),則去數(shù)據(jù)源獲取要求訪問(wèn)的緩 存數(shù)據(jù)。如果要求訪問(wèn)不滿(mǎn)足預(yù)定條件的緩存數(shù)據(jù),則直接查找分布式緩存,如果分布式緩 存中沒(méi)有要求訪問(wèn)的緩存數(shù)據(jù),則去數(shù)據(jù)源獲取要求訪問(wèn)的緩存數(shù)據(jù),具體的:
[0108] 1)當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件時(shí),判斷發(fā)起所述緩存數(shù)據(jù) 訪問(wèn)請(qǐng)求的應(yīng)用服務(wù)器的本地緩存中是否存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),如果存在, 從發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的應(yīng)用服務(wù)器的本地緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存 數(shù)據(jù),發(fā)送給所述應(yīng)用;如果發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的應(yīng)用服務(wù)器的本地緩存中不存 在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),則判斷所述分布式緩存中是否存在所述應(yīng)用請(qǐng)求訪問(wèn)的 緩存數(shù)據(jù),如果存在,則從所述分布式緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所 述應(yīng)用;
[0109] 2)當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)不滿(mǎn)足所述預(yù)定條件時(shí),判斷所述分布式緩存 中是否存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),如果存在,則從所述分布式緩存中獲取所述應(yīng) 用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所述應(yīng)用。
[0110] 上述方案中,結(jié)合分布式緩存和本地緩存存儲(chǔ)所述緩存數(shù)據(jù),相對(duì)于只使用單一 緩存的方式,提升了系統(tǒng)性能,也避免過(guò)多占用本地內(nèi)存。另外,通過(guò)中央控制裝置統(tǒng)一管 理緩存數(shù)據(jù),應(yīng)用需要訪問(wèn)緩存數(shù)據(jù)時(shí),統(tǒng)一由中央控制裝置去獲取,避免多個(gè)服務(wù)器同時(shí) 訪問(wèn)數(shù)據(jù)源造成系統(tǒng)阻塞甚至雪崩。
[0111] 下面通過(guò)一具體實(shí)施例進(jìn)一步說(shuō)明本申請(qǐng)。
[0112] 除分布式緩存中存放全量的緩存數(shù)據(jù)外,對(duì)緩存數(shù)據(jù)進(jìn)行分類(lèi),按數(shù)據(jù)的大小和 使用頻率,把部分?jǐn)?shù)據(jù)在本地緩存中也存放一份,應(yīng)用運(yùn)行時(shí)對(duì)這部分?jǐn)?shù)據(jù)優(yōu)先從本地緩 存中獲取數(shù)據(jù)。
[0113] 本實(shí)施例中,將需緩存的數(shù)據(jù)分為如下四類(lèi):
[0114] A類(lèi):占用緩存空間大于第五閾值,但指定時(shí)段內(nèi)的使用頻率小于第六閾值的數(shù) 據(jù)。如:商品數(shù)據(jù)。
[0115] B類(lèi):使用頻率大于第一閾值,占用緩存空間小于第二閾值。如:系統(tǒng)運(yùn)行時(shí)的參 數(shù)數(shù)據(jù)。
[0116] C類(lèi):占用緩存空間大于第三閾值,使用頻率大于第四閾值。
[0117] D類(lèi):占用緩存空間大于第三閾值,使用頻率小于等于第四閾值。
[0118] 本實(shí)施例中,上述B類(lèi)和C類(lèi)數(shù)據(jù)為滿(mǎn)足前述預(yù)定條件的數(shù)據(jù),A類(lèi)和D類(lèi)數(shù)據(jù)為 不滿(mǎn)足預(yù)定條件的數(shù)據(jù),因此,A類(lèi)、D類(lèi)數(shù)據(jù)僅需存放在分布式緩存上,B類(lèi)和C類(lèi)除在分 布式緩存中存放外,同時(shí)需在本地緩存存放副本。
[0119] 本實(shí)施例的緩存控制系統(tǒng)基于圖2所示架構(gòu),如圖2所示,包括:中央控制裝置 101,分布式緩存102,應(yīng)用A集群103,數(shù)據(jù)源(Datastore) 104,以及應(yīng)用B105,中央控制裝 置101為邏輯實(shí)體,本實(shí)例中為了示意方便單獨(dú)繪出,物理上中央控制裝置101可以部署在 應(yīng)用A集群103中的各應(yīng)用服務(wù)器上,其中:
[0120] 中央控制裝置101 :用于對(duì)集群環(huán)境下的本地緩存進(jìn)行管理,對(duì)不同應(yīng)用間的共 享緩存數(shù)據(jù)進(jìn)行管理,對(duì)同一應(yīng)用的本地緩存和分布式緩存中的B、c類(lèi)數(shù)據(jù)進(jìn)行同步管 理。中央控制裝置可以與應(yīng)用一起部署在應(yīng)用服務(wù)器上,與應(yīng)用沒(méi)有網(wǎng)絡(luò)通信之類(lèi)的損耗。 該中央控制裝置可以是一個(gè)JAR (Java Archive, Java歸檔文件)包或者dll程序庫(kù)等。
[0121] 分布式緩存(center cache) 102,用于根據(jù)中央控制裝置的控制,存儲(chǔ)所有緩存 數(shù)據(jù),包括上述A、B、C、D四類(lèi)數(shù)據(jù);其中,可以基于分布式哈希表算法進(jìn)行分布緩存,如 memcache、tair 等。
[0122] 應(yīng)用A集群103 :是應(yīng)用A的一個(gè)集群環(huán)境,每一臺(tái)服務(wù)器上都部署應(yīng)用A,并且每 臺(tái)服務(wù)器上都含有一個(gè)本地緩存(如ehCache\googel MemCached)。應(yīng)用A集群內(nèi)各服務(wù) 器本地緩存中的數(shù)據(jù)都是分布式緩存中數(shù)據(jù)的子集,各服務(wù)器根據(jù)中央控制裝置的控制, 緩存上述B類(lèi)、C類(lèi)數(shù)據(jù)。
[0123] 數(shù)據(jù)源104中存儲(chǔ)應(yīng)用所需數(shù)據(jù)的真實(shí)來(lái)源,一般為數(shù)據(jù)庫(kù)或文件系統(tǒng),如 mysql、TFS(Taobao File System,淘寶文件系統(tǒng))。
[0124] 應(yīng)用B105 :也可是集群環(huán)境或單機(jī)環(huán)境,為方便描述,本實(shí)施例中為單機(jī)環(huán)境。
[0125] 應(yīng)用A與應(yīng)用B的場(chǎng)景關(guān)系:應(yīng)用A使用者是普通用戶(hù);應(yīng)用B是給管理員進(jìn)行使 用,用來(lái)配置應(yīng)用A運(yùn)行相關(guān)參數(shù)。
[0126] 該實(shí)施例中,應(yīng)用A集群中的各服務(wù)器中的本地緩存可以分為兩區(qū)間,第一區(qū)間 中存放中央控制裝置分發(fā)的B類(lèi)數(shù)據(jù);第二區(qū)間存放中央控制裝置分發(fā)的C類(lèi)數(shù)據(jù)的索引 表,C類(lèi)數(shù)據(jù)以文件方式或在內(nèi)存另外保存,索引表中指示C類(lèi)數(shù)據(jù)的存儲(chǔ)位置。
[0127] 中央控制裝置可以根據(jù)FIF0(First Input First Output,先入先出)和最多使用 次數(shù)等算法,把C類(lèi)數(shù)據(jù)放入第二區(qū)間進(jìn)行管理,從而避免大數(shù)據(jù)網(wǎng)絡(luò)傳輸和序列化的損 耗。
[0128] 中央控制裝置會(huì)管理一張應(yīng)用配置的第一區(qū)間數(shù)據(jù)表和第二區(qū)間數(shù)據(jù)表(比方 某個(gè)配置參數(shù)需經(jīng)常用,那么在表中配置此參數(shù)的名稱(chēng)),在表中標(biāo)記過(guò)的數(shù)據(jù)就會(huì)從本地 緩存中獲取,獲取不到時(shí),才會(huì)到分布式緩存102中獲取,在分布式緩存102中獲取不到時(shí) 則到數(shù)據(jù)源104獲取。
[0129] A、D類(lèi)數(shù)據(jù)都會(huì)由中央控制裝置直接到分布式緩存102中去獲取,在分布式緩存 102中獲取不到時(shí)則到數(shù)據(jù)源104獲取。
[0130] 應(yīng)用A集群環(huán)境第一次啟動(dòng)時(shí),第一臺(tái)啟動(dòng)的服務(wù)器會(huì)通過(guò)中央控制裝置陸續(xù)先 加載所有B、C類(lèi)數(shù)據(jù),放置到分布式緩存和本地緩存中,接下來(lái)其他服務(wù)器啟動(dòng)時(shí)通過(guò)中 央控制裝置就可以直接從分布式緩存中加載數(shù)據(jù)到本地緩存中了。
[0131] 外部應(yīng)用修改了 B、C類(lèi)數(shù)據(jù)時(shí),向中央控制裝置發(fā)送通知,觸發(fā)基于Petersen圖 算法的P2P模式數(shù)據(jù)同步過(guò)程,保證所有服務(wù)的本地緩存都是同一份鏡像。
[0132] 如圖2所示,為Petersen圖的結(jié)構(gòu),包括10個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都會(huì)與其他三個(gè)節(jié) 點(diǎn)連接。
[0133] 對(duì)應(yīng)用集群的本地緩存之間進(jìn)行同步管理的機(jī)制可以是P2P模式,基于Petersen 圖算法來(lái)實(shí)現(xiàn)。
[0134] 假設(shè)應(yīng)用A集群中包含N臺(tái)服務(wù)器。
[0135] 將所述集群按如下方式配置為基于Petersen圖的層級(jí)網(wǎng)絡(luò)結(jié)構(gòu):
[0136] 其中,所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的每一層由多個(gè)節(jié)點(diǎn)以Petersen圖的形式連接而成;每 一包含多個(gè)節(jié)點(diǎn)的Petersen圖構(gòu)成上一層網(wǎng)絡(luò)結(jié)構(gòu)中的節(jié)點(diǎn);所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的最底 層包括一個(gè)或多個(gè)Petersen圖,集群中的每個(gè)服務(wù)器作為最底層的Petersen圖中的一個(gè) 節(jié)點(diǎn)。
[0137] 在Petersen圖中,包含10個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)與同一 Petersen圖中的其他3個(gè)節(jié) 點(diǎn)連接。如果在同一層結(jié)構(gòu)中生成不止1個(gè)Petersen圖,把當(dāng)前生成的每個(gè)Petersen圖 當(dāng)作一個(gè)節(jié)點(diǎn),然后每10個(gè)節(jié)點(diǎn)再組成一個(gè)Petersen圖;重復(fù)執(zhí)行該步驟,直到最終生成 一個(gè)Petersen圖,在生成Petersen圖的過(guò)程中,如果生成某個(gè)Petersen圖時(shí),節(jié)點(diǎn)數(shù)少于 10個(gè),用特定的空節(jié)點(diǎn)(null)頂替,組成10個(gè)節(jié)點(diǎn)后再生成Petersen圖。
[0138] 其中,每個(gè)Petersen圖可以指定一個(gè)節(jié)點(diǎn)作為該P(yáng)etersen圖的主節(jié)點(diǎn)。
[0139] 通過(guò)上述步驟,生成了一個(gè)嵌套的Petersen圖,最底層的Petersen圖是由實(shí)際的 服務(wù)器節(jié)點(diǎn)構(gòu)成,最頂層是一個(gè)Petersen圖。上述生成的基于Petersen圖的層級(jí)網(wǎng)絡(luò)結(jié) 構(gòu)的方法也可應(yīng)用于生成具有非Petersen圖的第一結(jié)構(gòu)的層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)。
[0140] 基于上述Petersen圖的P2P模式的緩存同步步驟如下:
[0141] 步驟401,將緩存數(shù)據(jù)更新通知傳給所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的最頂層Petersen圖的主 節(jié)點(diǎn)。
[0142] 步驟402,每個(gè)節(jié)點(diǎn)收到更新通知后,先判斷是否處理過(guò)該更新通知,如果沒(méi)有處 理過(guò),將給更新通知轉(zhuǎn)發(fā)給同層的相鄰三個(gè)節(jié)點(diǎn)。
[0143] 具體的,頂層Petersen圖的主節(jié)點(diǎn)收到更新通知后,通知同層的相鄰節(jié)點(diǎn),同層 的相鄰節(jié)點(diǎn)接收到更新通知后,如果沒(méi)有處理過(guò),則繼續(xù)轉(zhuǎn)發(fā)更新通知給同層的相鄰三個(gè) 節(jié)點(diǎn),依次類(lèi)推,該更新通知會(huì)轉(zhuǎn)發(fā)到同層的所有節(jié)點(diǎn)。
[0144] 這樣同一層的每個(gè)節(jié)點(diǎn)最多會(huì)接到三次通知,但只需處理第一次通知。這樣的處 理方式,使得節(jié)點(diǎn)僅在第一次接收到更新通知的時(shí)候進(jìn)行處理,避免冗余操作。
[0145] 步驟403,如果節(jié)點(diǎn)還是Petersen圖,而不是服務(wù)器,那么再通知這個(gè)Petersen圖 的主節(jié)點(diǎn),直到通知到達(dá)最底層Petersen圖的服務(wù)器節(jié)點(diǎn);
[0146] 步驟404,服務(wù)器節(jié)點(diǎn)收到更新通知后,把newData讀到內(nèi)存中,并且通知中央控 制裝置已成功接收數(shù)據(jù)完成。
[0147] 步驟405,所有服務(wù)器都通知中央控制裝置接收數(shù)據(jù)成功后,中央控制裝置通知所 有服務(wù)器進(jìn)行變更生效,各服務(wù)器使用newData覆蓋原數(shù)據(jù),再通知中央控制裝置激活成 功。
[0148] 步驟406,所有服務(wù)器都通知激活成功時(shí),整個(gè)過(guò)程結(jié)束。
[0149] 除最底層的Petersen圖的節(jié)點(diǎn)為服務(wù)器外,其他節(jié)點(diǎn)均為邏輯節(jié)點(diǎn),邏輯節(jié)點(diǎn)處 理更新通知的操作由中央控制裝置完成,直到更新通知到達(dá)最底層的服務(wù)器節(jié)點(diǎn)。各服務(wù) 器上的中央控制裝置進(jìn)行交互,完成通知操作。
[0150] 現(xiàn)有技術(shù)中,對(duì)于集群環(huán)境,各服務(wù)器之間緩存數(shù)據(jù)同步一般是由一臺(tái)服務(wù)器廣 播消息通知其他服務(wù)器的緩存失效。其他服務(wù)器下次訪問(wèn)數(shù)據(jù)時(shí)先請(qǐng)求到緩存,如果未命 中,才到真實(shí)數(shù)據(jù)源獲取數(shù)據(jù)再同時(shí)更新緩存。該方法不能及時(shí)和保證事務(wù)(集群模式) 的同步。本實(shí)施例中,一個(gè)應(yīng)用服務(wù)器更新緩存數(shù)據(jù)后,通過(guò)基于Petersen圖的P2P模式 同步更新其他應(yīng)用服務(wù)器的緩存數(shù)據(jù),保證了緩存更新的效率。
[0151] 如果有應(yīng)用服務(wù)器同步更新未成功,可由中央控制裝置直接與失敗的服務(wù)器通 信,進(jìn)行更新;或者是直接把失敗的應(yīng)用服務(wù)器的本地緩存失效,依靠被動(dòng)模式更新,被動(dòng) 模式更新是指僅使數(shù)據(jù)失效,在后續(xù)需要用到失效的緩存數(shù)據(jù)時(shí),從數(shù)據(jù)源獲取新的緩存 數(shù)據(jù),更新失效的緩存數(shù)據(jù);或者由中央控制裝置通知所有應(yīng)用服務(wù)器進(jìn)行回滾操作,本實(shí) 施例中,回滾操作是指恢復(fù)到進(jìn)行緩存數(shù)據(jù)更新之前的狀態(tài),提供了滿(mǎn)足更多的業(yè)務(wù)特性 需求的選擇。
[0152] 上述方案具有如下優(yōu)點(diǎn):
[0153] 1、利用Petersen圖的特點(diǎn),使用P2P模式病毒式的傳播消息和新的緩存數(shù)據(jù)包。
[0154] 2、每臺(tái)服務(wù)器只會(huì)固定收到緩存更新的通知和發(fā)出緩存更新的通知三次,簡(jiǎn)單可 控。
[0155] 3、利用二段提交方式,本申請(qǐng)中的二段提交方式即服務(wù)器收到更新通知后,把新 的緩存數(shù)據(jù)讀到內(nèi)存中,并且通知中央控制裝置已成功接收數(shù)據(jù)完成,所有服務(wù)器都通知 中央控制裝置接收數(shù)據(jù)成功后,中央控制裝置通知所有服務(wù)器進(jìn)行變更生效,各服務(wù)器使 用新的緩存數(shù)據(jù)覆蓋原緩存數(shù)據(jù),各服務(wù)器再通知中央控制裝置激活成功,從而保證事務(wù) 的一致性,讓集群內(nèi)各服務(wù)器本地緩存中的數(shù)據(jù)都一致。相對(duì)于現(xiàn)有技術(shù)中,對(duì)于集群環(huán) 境,各服務(wù)器之間緩存數(shù)據(jù)同步一般是由一臺(tái)服務(wù)器廣播消息通知其他服務(wù)器的緩存失 效。其他服務(wù)器下次訪問(wèn)數(shù)據(jù)時(shí)先請(qǐng)求到緩存,如果未命中,才到數(shù)據(jù)源獲取數(shù)據(jù)并同時(shí)更 新緩存的方式,本申請(qǐng)能及時(shí)進(jìn)行緩存數(shù)據(jù)更新和并保證事務(wù)(集群模式)的同步。
[0156] 本申請(qǐng)實(shí)施例還提供一種緩存控制系統(tǒng),如圖3所示,包括:
[0157] 集群301以及中央控制裝置302,所述集群301包括多個(gè)服務(wù)器3011,每一服務(wù)器 包含本地緩存系統(tǒng)3012 ;所述中央控制裝置302包括配置模塊3021和更新模塊3022,其中
[0158] 所述配置模塊3021用于,將所述集群的所述多個(gè)服務(wù)器形成層級(jí)網(wǎng)絡(luò)結(jié)構(gòu),記錄 所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu):其中,所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的每一層由多個(gè)節(jié)點(diǎn)以設(shè)定的第一結(jié)構(gòu)的形 式連接而成;每一包含多個(gè)節(jié)點(diǎn)的第一結(jié)構(gòu)構(gòu)成上一層網(wǎng)絡(luò)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);所述層級(jí) 網(wǎng)絡(luò)結(jié)構(gòu)的最底層包括一個(gè)或多個(gè)第一結(jié)構(gòu),所述集群中的每個(gè)服務(wù)器作為所述層級(jí)網(wǎng)絡(luò) 結(jié)構(gòu)的最底層的第一結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);所述第一結(jié)構(gòu)由每η個(gè)節(jié)點(diǎn)按預(yù)定規(guī)則形成,所 述預(yù)定規(guī)則包括:所述η個(gè)節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)和該η個(gè)節(jié)點(diǎn)中的k個(gè)節(jié)點(diǎn)相連,0 < k < η, η > 1 ;
[0159] 所述更新模塊3022用于:判斷緩存數(shù)據(jù)發(fā)生更新時(shí),發(fā)送更新通知至所述層級(jí)網(wǎng) 絡(luò)結(jié)構(gòu)的頂層的第一結(jié)構(gòu),由所述頂層的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直 到所述最底層的第一結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)獲取所述更新通知,即所述集群中的各服務(wù)器獲取所 述更新通知,以使所述集群中的各服務(wù)器更新緩存數(shù)據(jù)。
[0160] 所述配置模塊3021還用于:在每個(gè)所述第一結(jié)構(gòu)中設(shè)定一主節(jié)點(diǎn);
[0161] 所述更新模塊3022發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的頂層的第一結(jié)構(gòu),由所 述頂層的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最底層的第一結(jié)構(gòu)的每個(gè) 節(jié)點(diǎn)獲取所述更新通知包括:
[0162] 將所述更新通知發(fā)送至所述頂層的第一結(jié)構(gòu)的主節(jié)點(diǎn);每個(gè)節(jié)點(diǎn)接收到所述更新 通知后,進(jìn)行如下轉(zhuǎn)發(fā)處理:將所述更新通知發(fā)送給處于同一第一結(jié)構(gòu)的相鄰節(jié)點(diǎn),以及, 如果所述節(jié)點(diǎn)非最底層節(jié)點(diǎn),將所述更新通知發(fā)送給該層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)中對(duì)應(yīng)的下一層第一 結(jié)構(gòu)中的主節(jié)點(diǎn)。
[0163] 在本實(shí)施例的一種備選方案中,所述更新模塊3022還用于:每個(gè)節(jié)點(diǎn)接收到所述 更新通知后,進(jìn)行所述轉(zhuǎn)發(fā)處理前,判斷是否已處理所述更新通知,如果已處理,則丟棄該 更新通知,如果沒(méi)有,才進(jìn)行所述轉(zhuǎn)發(fā)處理。
[0164] 在本實(shí)施例的一種備選方案中,所述服務(wù)器3011還用于:獲取所述更新通知并接 收新的緩存數(shù)據(jù)后,使用所述新的緩存數(shù)據(jù)更新原緩存數(shù)據(jù)。
[0165] 在本實(shí)施例的一種備選方案中,所述η為10,所述k為3,所述第一結(jié)構(gòu)為 Petersen 圖。
[0166] 在本實(shí)施例的一種備選方案中,所述系統(tǒng)還包括:分布式緩存系統(tǒng)303 ;所述中央 控制裝置302還包括存儲(chǔ)控制模塊3023和訪問(wèn)控制模塊3024,其中:
[0167] 所述存儲(chǔ)控制模塊3023用于,將應(yīng)用的緩存數(shù)據(jù)存儲(chǔ)到所述分布式緩存系統(tǒng)303 中,以及,將使用頻率和/或大小滿(mǎn)足預(yù)定條件的緩存數(shù)據(jù)存儲(chǔ)到所述集群中的服務(wù)器的 本地緩存系統(tǒng)3012中;
[0168] 所述訪問(wèn)控制模塊3024用于,接收到一個(gè)或多個(gè)應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn) 請(qǐng)求后,如果所述分布式緩存系統(tǒng)303中不存在所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù) 據(jù),則向數(shù)據(jù)源獲取所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)后,將所述一個(gè)或多個(gè)應(yīng)用 請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述一個(gè)或多個(gè)應(yīng)用,并將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩 存數(shù)據(jù)更新到所述分布式緩存系統(tǒng)303中。
[0169] 在本實(shí)施例的一種備選方案中,所述預(yù)定條件包括:
[0170] 使用頻率大于第一閾值且占用的緩存空間小于第二閾值;
[0171] 和/或,使用頻率大于第四閾值且占用的緩存空間大于第三閾值。
[0172] 在本實(shí)施例的一種備選方案中,所述訪問(wèn)控制模塊3024還用于,接收到應(yīng)用的緩 存數(shù)據(jù)訪問(wèn)請(qǐng)求后,如果所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)位于發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的 服務(wù)器的本地緩存系統(tǒng)3012或者位于所述分布式緩存系統(tǒng)303中,則從所述本地緩存系統(tǒng) 3012或所述分布式緩存系統(tǒng)303中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用。
[0173] 在本實(shí)施例的一種備選方案中,所述訪問(wèn)控制模塊3024從所述本地緩存系統(tǒng) 3012或所述分布式緩存系統(tǒng)303中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用 包括:
[0174] 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng) 求的服務(wù)器的本地緩存系統(tǒng)中存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)時(shí),從發(fā)起所述緩存數(shù)據(jù) 訪問(wèn)請(qǐng)求的服務(wù)器的本地緩存系統(tǒng)3012中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所 述應(yīng)用;
[0175] 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng) 求的服務(wù)器的本地緩存系統(tǒng)3012中不存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),或者,所述應(yīng)用 請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)不滿(mǎn)足所述預(yù)定條件時(shí),判斷所述分布式緩存系統(tǒng)303中是否存在所 述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),如果存在,則從所述分布式緩存系統(tǒng)303中獲取所述應(yīng)用請(qǐng) 求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所述應(yīng)用。
[0176] 在本實(shí)施例的一種備選方案中,每個(gè)所述服務(wù)器3011上布置有所述中央控制裝 置302,且不同服務(wù)器上的所述中央控制裝置302之間相互通信;
[0177] 所述訪問(wèn)控制模塊3024還用于,當(dāng)多個(gè)服務(wù)器上的中央控制裝置302的訪問(wèn)控制 模塊3024分別接收到其所在的服務(wù)器上的應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求后,如果所 述分布式緩存系統(tǒng)303中不存在所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),由其中一個(gè)中央控制 裝置302的訪問(wèn)控制模塊3024從所述數(shù)據(jù)源獲取所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)后發(fā) 送給所述其所在的服務(wù)器上的應(yīng)用,并通知所述更新模塊3022將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn) 的緩存數(shù)據(jù)更新到所述分布式緩存系統(tǒng)303中,以及,將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù) 據(jù)發(fā)送給所述多個(gè)中央控制裝置中剩余其他中央控制裝置的訪問(wèn)控制模塊,由所述其他中 央控制裝置的訪問(wèn)控制模塊發(fā)送給各自所在的服務(wù)器上的應(yīng)用。
[0178] 本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過(guò)程序來(lái)指令 相關(guān)硬件完成,所述程序可以存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如只讀存儲(chǔ)器、磁盤(pán)或光盤(pán) 等??蛇x地,上述實(shí)施例的全部或部分步驟也可以使用一個(gè)或多個(gè)集成電路來(lái)實(shí)現(xiàn)。相應(yīng) 地,上述實(shí)施例中的各模塊/單元可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的 形式實(shí)現(xiàn)。本申請(qǐng)不限制于任何特定形式的硬件和軟件的結(jié)合。
【權(quán)利要求】
1. 一種緩存控制方法,其特征在于,包括: 將包含多個(gè)服務(wù)器的集群形成層級(jí)網(wǎng)絡(luò)結(jié)構(gòu); 其中,所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的每一層由多個(gè)節(jié)點(diǎn)以設(shè)定的第一結(jié)構(gòu)的形式連接而成;每 一包含多個(gè)節(jié)點(diǎn)的第一結(jié)構(gòu)構(gòu)成上一層網(wǎng)絡(luò)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的最底 層包括一個(gè)或多個(gè)第一結(jié)構(gòu),所述集群中的每個(gè)服務(wù)器作為所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的最底層的 第一結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn); 所述第一結(jié)構(gòu)由每η個(gè)節(jié)點(diǎn)按預(yù)定規(guī)則形成,所述預(yù)定規(guī)則包括:所述η個(gè)節(jié)點(diǎn)中的每 個(gè)節(jié)點(diǎn)和該η個(gè)節(jié)點(diǎn)中的k個(gè)節(jié)點(diǎn)相連,0 < k < η, η > 1 ; 判斷緩存數(shù)據(jù)發(fā)生更新時(shí),發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的頂層的第一結(jié)構(gòu),由 所述頂層的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最底層的第一結(jié)構(gòu)的每 個(gè)節(jié)點(diǎn)獲取所述更新通知,即所述集群中的各服務(wù)器獲取所述更新通知,以使所述集群中 的各服務(wù)器更新緩存數(shù)據(jù)。
2. 如權(quán)利要求1所述的方法,其特征在于,所述發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的 頂層的第一結(jié)構(gòu),由所述頂層的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最 底層的第一結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)獲取所述更新通知包括: 每個(gè)所述第一結(jié)構(gòu)中設(shè)定一主節(jié)點(diǎn); 將所述更新通知發(fā)送至所述頂層的第一結(jié)構(gòu)的主節(jié)點(diǎn); 每個(gè)節(jié)點(diǎn)接收到所述更新通知后,進(jìn)行如下轉(zhuǎn)發(fā)處理: 將所述更新通知發(fā)送給處于同一第一結(jié)構(gòu)的相鄰節(jié)點(diǎn);以及,如果所述節(jié)點(diǎn)非最底層 節(jié)點(diǎn),將所述更新通知發(fā)送給該層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)中對(duì)應(yīng)的下一層第一結(jié)構(gòu)中的主節(jié)點(diǎn)。
3. 如權(quán)利要求2所述的方法,其特征在于,所述方法還包括:每個(gè)節(jié)點(diǎn)接收到所述更新 通知后,進(jìn)行所述轉(zhuǎn)發(fā)處理前,判斷是否已處理所述更新通知,如果已處理,則丟棄該更新 通知,如果沒(méi)有,才進(jìn)行所述轉(zhuǎn)發(fā)處理。
4. 如權(quán)利要求1所述的方法,其特征在于,所述方法還包括:所述服務(wù)器獲取所述更新 通知并接收新的緩存數(shù)據(jù)后,更新原緩存數(shù)據(jù)。
5. 如權(quán)利要求1至4任一所述的方法,其特征在于,所述η為10,所述k為3,所述第一 結(jié)構(gòu)為Petersen圖。
6. 如權(quán)利要求1至4任一所述的方法,其特征在于,所述方法還包括: 將應(yīng)用的緩存數(shù)據(jù)存儲(chǔ)到分布式緩存中,以及,將使用頻率和/或大小滿(mǎn)足預(yù)定條件 的緩存數(shù)據(jù)存儲(chǔ)到所述集群中的服務(wù)器的本地緩存中; 接收到一個(gè)或多個(gè)應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求后,如果所述分布式緩存中不 存在所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),則向數(shù)據(jù)源獲取所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求 訪問(wèn)的緩存數(shù)據(jù)后,將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述一個(gè)或多個(gè)應(yīng) 用,并將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存中。
7. 如權(quán)利要求6所述的方法,其特征在于,所述預(yù)定條件包括: 使用頻率大于第一閾值且占用的緩存空間小于第二閾值; 和/或,使用頻率大于第四閾值且占用的緩存空間大于第三閾值。
8. 如權(quán)利要求6所述的方法,其特征在于,所述方法還包括: 接收到應(yīng)用的緩存數(shù)據(jù)訪問(wèn)請(qǐng)求后,如果所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)位于發(fā)起所述 緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的服務(wù)器的本地緩存或者位于所述分布式緩存中,則從所述本地緩存或 所述分布式緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用。
9. 如權(quán)利要求8所述的方法,其特征在于,所述從所述本地緩存或所述分布式緩存中 獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用包括: 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的 服務(wù)器的本地緩存中存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)時(shí),從發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求 的服務(wù)器的本地緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所述應(yīng)用; 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的 服務(wù)器的本地緩存中不存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),或者,所述應(yīng)用請(qǐng)求訪問(wèn)的緩 存數(shù)據(jù)不滿(mǎn)足所述預(yù)定條件時(shí),判斷所述分布式緩存中是否存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存 數(shù)據(jù),如果存在,則從所述分布式緩存中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所述應(yīng) 用。
10. 如權(quán)利要求6所述的方法,其特征在于,所述方法還包括: 每個(gè)所述服務(wù)器上布置有中央控制裝置,且不同服務(wù)器上的中央控制裝置之間相互通 信; 所述接收到多個(gè)應(yīng)用的訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求后,如果所述分布式緩存中不 存在所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),則向數(shù)據(jù)源獲取所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù) 據(jù),將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述多個(gè)應(yīng)用,并將所述多個(gè)應(yīng)用請(qǐng)求訪 問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存中包括: 多個(gè)中央控制裝置分別接收到其所在的服務(wù)器上的應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng) 求后,如果所述分布式緩存中不存在所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),由其中一個(gè)中央 控制裝置從所述數(shù)據(jù)源獲取所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)后發(fā)送給所述其所在的服 務(wù)器上的應(yīng)用,并將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存中,以及,將 所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述多個(gè)中央控制裝置中其他中央控制裝置由 所述其他中央控制裝置發(fā)送給各自所在的服務(wù)器上的應(yīng)用。
11. 一種緩存控制系統(tǒng),其特征在于,所述系統(tǒng)包括:集群以及中央控制裝置,所述中 央控制裝置包括配置模塊和更新模塊,其中: 所述集群包括多個(gè)服務(wù)器,每一服務(wù)器包含本地緩存系統(tǒng); 所述配置模塊用于,將所述集群的所述多個(gè)服務(wù)器形成層級(jí)網(wǎng)絡(luò)結(jié)構(gòu),記錄所述層級(jí) 網(wǎng)絡(luò)結(jié)構(gòu):其中,所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的每一層由多個(gè)節(jié)點(diǎn)以設(shè)定的第一結(jié)構(gòu)的形式連接而 成;每一包含多個(gè)節(jié)點(diǎn)的第一結(jié)構(gòu)構(gòu)成上一層網(wǎng)絡(luò)結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu) 的最底層包括一個(gè)或多個(gè)第一結(jié)構(gòu),所述集群中的每個(gè)服務(wù)器作為所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的最 底層的第一結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn);所述第一結(jié)構(gòu)由每η個(gè)節(jié)點(diǎn)按預(yù)定規(guī)則形成,所述預(yù)定規(guī) 則包括:所述η個(gè)節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)和該η個(gè)節(jié)點(diǎn)中的k個(gè)節(jié)點(diǎn)相連,0 < k < η, η > 1 ; 所述更新模塊用于:判斷緩存數(shù)據(jù)發(fā)生更新時(shí),發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的 頂層的第一結(jié)構(gòu),由所述頂層的第一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最 底層的第一結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)獲取所述更新通知,即所述集群中的各服務(wù)器獲取所述更新通 知,以使所述集群中的各服務(wù)器更新緩存數(shù)據(jù)。
12. 如權(quán)利要求11所述的系統(tǒng),其特征在于, 所述配置模塊還用于:在每個(gè)所述第一結(jié)構(gòu)中設(shè)定一主節(jié)點(diǎn); 所述更新模塊發(fā)送更新通知至所述層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)的頂層的第一結(jié)構(gòu),由所述頂層的第 一結(jié)構(gòu)逐層轉(zhuǎn)發(fā)至所述最底層的第一結(jié)構(gòu),直到所述最底層的第一結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)獲取所 述更新通知包括: 將所述更新通知發(fā)送至所述頂層的第一結(jié)構(gòu)的主節(jié)點(diǎn);每個(gè)節(jié)點(diǎn)接收到所述更新通知 后,進(jìn)行如下轉(zhuǎn)發(fā)處理:將所述更新通知發(fā)送給處于同一第一結(jié)構(gòu)的相鄰節(jié)點(diǎn),以及,如果 所述節(jié)點(diǎn)非最底層節(jié)點(diǎn),將所述更新通知發(fā)送給該層級(jí)網(wǎng)絡(luò)結(jié)構(gòu)中對(duì)應(yīng)的下一層第一結(jié)構(gòu) 中的主節(jié)點(diǎn)。
13. 如權(quán)利要求12所述的系統(tǒng),其特征在于,所述更新模塊還用于:每個(gè)節(jié)點(diǎn)接收到所 述更新通知后,進(jìn)行所述轉(zhuǎn)發(fā)處理前,判斷是否已處理所述更新通知,如果已處理,則丟棄 該更新通知,如果沒(méi)有,才進(jìn)行所述轉(zhuǎn)發(fā)處理。
14. 如權(quán)利要求11所述的系統(tǒng),其特征在于,所述服務(wù)器還用于:獲取所述更新通知并 接收新的緩存數(shù)據(jù)后,使用所述新的緩存數(shù)據(jù)更新原緩存數(shù)據(jù)。
15. 如權(quán)利要求11至14任一所述的系統(tǒng),其特征在于,所述η為10,所述k為3,所述 第一結(jié)構(gòu)為Petersen圖。
16. 如權(quán)利要求11至14任一所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括:分布式緩存 系統(tǒng);所述中央控制裝置還包括存儲(chǔ)控制模塊和訪問(wèn)控制模塊,其中: 所述存儲(chǔ)控制模塊用于,將應(yīng)用的緩存數(shù)據(jù)存儲(chǔ)到所述分布式緩存系統(tǒng)中,以及,將使 用頻率和/或大小滿(mǎn)足預(yù)定條件的緩存數(shù)據(jù)存儲(chǔ)到所述集群中的服務(wù)器的本地緩存系統(tǒng) 中; 所述訪問(wèn)控制模塊用于,接收到一個(gè)或多個(gè)應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求后,如 果所述分布式緩存系統(tǒng)中不存在所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),則向數(shù)據(jù)源獲 取所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)后,將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù) 據(jù)發(fā)送給所述一個(gè)或多個(gè)應(yīng)用,并將所述一個(gè)或多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)更新到所述 分布式緩存系統(tǒng)中。
17. 如權(quán)利要求16所述的系統(tǒng),其特征在于,所述預(yù)定條件包括: 使用頻率大于第一閾值且占用的緩存空間小于第二閾值; 和/或,使用頻率大于第四閾值且占用的緩存空間大于第三閾值。
18. 如權(quán)利要求16所述的系統(tǒng),其特征在于,所述訪問(wèn)控制模塊還用于,接收到應(yīng)用的 緩存數(shù)據(jù)訪問(wèn)請(qǐng)求后,如果所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)位于發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求 的服務(wù)器的本地緩存系統(tǒng)或者位于所述分布式緩存系統(tǒng)中,則從所述本地緩存系統(tǒng)或所述 分布式緩存系統(tǒng)中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用。
19. 如權(quán)利要求18所述的系統(tǒng),其特征在于,所述訪問(wèn)控制模塊從所述本地緩存系統(tǒng) 或所述分布式緩存系統(tǒng)中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)并發(fā)送給所述應(yīng)用包括: 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的 服務(wù)器的本地緩存系統(tǒng)中存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)時(shí),從發(fā)起所述緩存數(shù)據(jù)訪問(wèn) 請(qǐng)求的服務(wù)器的本地緩存系統(tǒng)中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),發(fā)送給所述應(yīng)用; 當(dāng)所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)滿(mǎn)足所述預(yù)定條件且發(fā)起所述緩存數(shù)據(jù)訪問(wèn)請(qǐng)求的 服務(wù)器的本地緩存系統(tǒng)中不存在所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),或者,所述應(yīng)用請(qǐng)求訪問(wèn) 的緩存數(shù)據(jù)不滿(mǎn)足所述預(yù)定條件時(shí),判斷所述分布式緩存系統(tǒng)中是否存在所述應(yīng)用請(qǐng)求訪 問(wèn)的緩存數(shù)據(jù),如果存在,則從所述分布式緩存系統(tǒng)中獲取所述應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù), 發(fā)送給所述應(yīng)用。
20.如權(quán)利要求16所述的系統(tǒng),其特征在于, 每個(gè)所述服務(wù)器上布置有所述中央控制裝置,且不同服務(wù)器上的所述中央控制裝置之 間相互通信; 所述訪問(wèn)控制模塊還用于,當(dāng)多個(gè)服務(wù)器上的中央控制裝置的訪問(wèn)控制模塊分別接收 到其所在的服務(wù)器上的應(yīng)用訪問(wèn)同一緩存數(shù)據(jù)的訪問(wèn)請(qǐng)求后,如果所述分布式緩存系統(tǒng)中 不存在所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù),由其中一個(gè)中央控制裝置的訪問(wèn)控制模塊從所 述數(shù)據(jù)源獲取所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)后發(fā)送給所述其所在的服務(wù)器上的應(yīng)用; 并通知所述更新模塊將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)更新到所述分布式緩存系統(tǒng)中, 以及,將所述多個(gè)應(yīng)用請(qǐng)求訪問(wèn)的緩存數(shù)據(jù)發(fā)送給所述多個(gè)中央控制裝置中其他中央控制 裝置的訪問(wèn)控制模塊,由所述其他中央控制裝置的訪問(wèn)控制模塊發(fā)送給各自所在的服務(wù)器 上的應(yīng)用。
【文檔編號(hào)】G06F12/08GK104142896SQ201310172568
【公開(kāi)日】2014年11月12日 申請(qǐng)日期:2013年5月10日 優(yōu)先權(quán)日:2013年5月10日
【發(fā)明者】楊琦 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司