緩存健康度檢測方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機領(lǐng)域,尤其是涉及一種緩存健康度檢測方法及裝置。
【背景技術(shù)】
[0002] 分布式緩存在當(dāng)今互聯(lián)網(wǎng)中有著廣泛的運用。常見的分布式緩存,如:Redis, MemcacheJair等,在對于并發(fā)查詢壓力較大的應(yīng)用場景,分布式緩存發(fā)揮了極其重要的作 用。但是,在一些對緩存一致性要求特別高的場合,如:用戶在支付寶的賬務(wù)流水交易記錄 等場景中,如果緩存的數(shù)據(jù)與實際不一致,會導(dǎo)致用戶從緩存中返回的查詢數(shù)據(jù)不完整或 不準(zhǔn)確,從而引起用戶的疑惑或用戶投訴等。
[0003] 目前,通常在更新緩存和數(shù)據(jù)庫時,僅僅從保存緩存和數(shù)據(jù)庫的源頭保證數(shù)據(jù)的 一致性來保證兩者更新完全一致。相應(yīng)的,當(dāng)緩存操作失敗,采用數(shù)據(jù)庫對應(yīng)的本地事務(wù)回 滾來解決緩存與數(shù)據(jù)庫一致性的問題。然而,該種方式在出現(xiàn)不可預(yù)見因素時,無法保證緩 存與數(shù)據(jù)庫的數(shù)據(jù)一致性。例如:緩存服務(wù)器意外重啟或者緩存數(shù)據(jù)被意外踢出等情況,都 會使得查詢請求從緩存中得到的數(shù)據(jù)不完整或與實際數(shù)據(jù)存在一定差異,此種差異的出現(xiàn) 對緩存一致性要求很高的應(yīng)用場合,是無法接受的。
[0004] 然而,現(xiàn)有技術(shù)無法對緩存健康度做有效地實時監(jiān)控,進(jìn)而當(dāng)出現(xiàn)類似上述不可 預(yù)見因素發(fā)生時,無法及時解決發(fā)現(xiàn)問題,導(dǎo)致整個系統(tǒng)出錯概率很高,嚴(yán)重影響用戶使 用。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的目的之一在于提供一種緩存健康度檢測方法及裝置。
[0006] 為實現(xiàn)上述發(fā)明目的之一,本發(fā)明一實施方式提供了一種緩存健康度檢測方法, 其包括:
[0007] 每一預(yù)設(shè)周期,若服務(wù)器未處于滿負(fù)載狀態(tài),則在服務(wù)器的訪問請求中抽取至少 一個作為抽樣請求;
[0008] 將抽樣請求通過異步線程查詢服務(wù)器的數(shù)據(jù)庫和緩存中的數(shù)據(jù),得到相對應(yīng)的原 始數(shù)據(jù)和緩存數(shù)據(jù);
[0009] 比對上述緩存數(shù)據(jù)和原始數(shù)據(jù),并根據(jù)比對結(jié)果判斷緩存健康度。
[0010] 作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述"每一預(yù)設(shè)周期,若服務(wù)器未處于滿負(fù) 載狀態(tài),則在服務(wù)器的訪問請求中抽取至少一個作為抽樣請求"具體包括:
[0011] 每一預(yù)設(shè)周期,根據(jù)所述服務(wù)器的負(fù)載獲取對應(yīng)所述負(fù)載的抽樣比例,并根據(jù)所 述抽樣比例以及訪問的請求數(shù)量計算抽樣請求的數(shù)量;其中,服務(wù)器負(fù)載越高,抽樣比例越 低;服務(wù)器負(fù)載越低,抽樣比例越高。
[0012] 作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),抽樣請求的數(shù)量=所述抽樣比例*訪問請 求的數(shù)量;
[0013] 所述抽樣比例=1-服務(wù)器當(dāng)前負(fù)載百分比,若所述服務(wù)器當(dāng)前負(fù)載百分比大于 或等于1,則表示所述服務(wù)器處于滿負(fù)載狀態(tài),不進(jìn)行抽樣。
[0014] 作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述服務(wù)器的當(dāng)前負(fù)載百分比=R1*CPU 負(fù)載+R2*內(nèi)存負(fù)載+R3*I0負(fù)載+R4*網(wǎng)絡(luò)負(fù)載,其中,R1、R2、R3、R4為相應(yīng)參數(shù)的權(quán)重值, 所述 R1>R2>R3。
[0015] 作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述CPU負(fù)載為:服務(wù)器當(dāng)前的CPU負(fù)載/ (服務(wù)器的CPU核數(shù)*單核CPU的負(fù)載基準(zhǔn)值);
[0016] 所述內(nèi)存負(fù)載為:服務(wù)器當(dāng)前的內(nèi)存負(fù)載/內(nèi)存的負(fù)載基準(zhǔn)值;
[0017] 所述10負(fù)載為:服務(wù)器當(dāng)前的10負(fù)載/10的負(fù)載基準(zhǔn)值;
[0018] 所述網(wǎng)絡(luò)負(fù)載為:服務(wù)器當(dāng)前的網(wǎng)絡(luò)負(fù)載/網(wǎng)絡(luò)的負(fù)載基準(zhǔn)值。
[0019] 作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述方法還包括:
[0020] 若所述緩存數(shù)據(jù)和所述原始數(shù)據(jù)相同,則表示緩存健康度良好;
[0021] 若所述緩存數(shù)據(jù)和所述原始數(shù)據(jù)不相同,則依據(jù)所述原始數(shù)據(jù)更新所述緩存數(shù) 據(jù)。
[0022] 為實現(xiàn)上述發(fā)明目的之一,本發(fā)明一實施方式提供了一種緩存健康度檢測裝置, 其包括:
[0023] 抽樣模塊,用于在每一預(yù)設(shè)周期,若服務(wù)器未處于滿負(fù)載狀態(tài),則在服務(wù)器的訪問 請求中抽取至少一個作為抽樣請求;
[0024] 查詢模塊,用于將抽樣請求通過異步線程查詢服務(wù)器的數(shù)據(jù)庫和緩存中的數(shù)據(jù), 得到相對應(yīng)的原始數(shù)據(jù)和緩存數(shù)據(jù);
[0025] 比對模塊,用于比對上述緩存數(shù)據(jù)和原始數(shù)據(jù),并根據(jù)比對結(jié)果判斷緩存健康度。
[0026] 作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述抽樣模塊用于:每一預(yù)設(shè)周期,根據(jù)所 述服務(wù)器的負(fù)載獲取對應(yīng)所述負(fù)載的抽樣比例,并根據(jù)所述抽樣比例以及訪問請求的數(shù)量 計算抽樣請求的數(shù)量;其中,服務(wù)器負(fù)載越高,抽樣比例越低;服務(wù)器負(fù)載越低,抽樣比例 越1?。
[0027] 作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),抽樣請求的數(shù)量=所述抽樣比例*訪問請 求的數(shù)量;
[0028] 所述抽樣比例=1-服務(wù)器當(dāng)前負(fù)載百分比,若所述服務(wù)器當(dāng)前負(fù)載百分比大于 或等于1,則表示所述服務(wù)器處于滿負(fù)載狀態(tài),不進(jìn)行抽樣。
[0029] 作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述服務(wù)器的當(dāng)前負(fù)載百分比=R1*CPU 負(fù)載+R2*內(nèi)存負(fù)載+R3*I0負(fù)載+R4*網(wǎng)絡(luò)負(fù)載,其中,R1、R2、R3、R4為相應(yīng)參數(shù)的權(quán)重值, 所述 R1>R2>R3。
[0030] 作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述CPU負(fù)載為:服務(wù)器當(dāng)前的CPU負(fù)載/ (服務(wù)器的CPU核數(shù)*單核CPU的負(fù)載基準(zhǔn)值);
[0031] 所述內(nèi)存負(fù)載為:服務(wù)器當(dāng)前的內(nèi)存負(fù)載/內(nèi)存的負(fù)載基準(zhǔn)值;
[0032] 所述10負(fù)載為:服務(wù)器當(dāng)前的10負(fù)載/10的負(fù)載基準(zhǔn)值;
[0033] 所述網(wǎng)絡(luò)負(fù)載為:服務(wù)器當(dāng)前的網(wǎng)絡(luò)負(fù)載/網(wǎng)絡(luò)的負(fù)載基準(zhǔn)值。
[0034] 作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述比對模塊還用于判斷所述緩存數(shù)據(jù)和 所述原始數(shù)據(jù)是否相同,
[0035] 若所述緩存數(shù)據(jù)和所述原始數(shù)據(jù)相同,則表示緩存健康度良好;
[0036] 若所述緩存數(shù)據(jù)和所述原始數(shù)據(jù)不相同,則依據(jù)所述原始數(shù)據(jù)更新所述緩存數(shù) 據(jù)。
[0037] 與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:本發(fā)明的緩存健康度檢測方法及裝置,在 高并發(fā)查詢請求且不改變系統(tǒng)整體負(fù)載的前提下,可實時的進(jìn)行抽樣,并根據(jù)抽樣請求獲 取數(shù)據(jù)庫和緩存中的數(shù)據(jù),以判斷緩存的健康度,如此,即可在緩存和數(shù)據(jù)庫中數(shù)據(jù)不一致 時,即時發(fā)現(xiàn)問題。
【附圖說明】
[0038] 圖1是本發(fā)明一實施方式中緩存健康度檢測方法的流程圖;
[0039] 圖2是本發(fā)明一實施方式中影響服務(wù)器當(dāng)前負(fù)載百分比的各種主要的參數(shù)列表;
[0040] 圖3是本發(fā)明一實施方式的緩存健康度檢測裝置的模塊圖。
【具體實施方式】
[0041] 以下將結(jié)合附圖所示的各實施方式對本發(fā)明進(jìn)行詳細(xì)描述。但這些實施方式并不 限制本發(fā)明,本領(lǐng)域的普通技術(shù)人員根據(jù)這些實施方式所輕易做出的結(jié)構(gòu)、方法、或功能上 的變換均包含在本發(fā)明的保護(hù)范圍內(nèi)。
[0042] 一般地,緩存是將數(shù)據(jù)以key-value的形式存儲在相對較高訪問速度存儲介質(zhì)的 Hash表中,以便于在查詢數(shù)據(jù)時,只需要從存儲介質(zhì)中根據(jù)Key獲取對應(yīng)的Value。存儲于 緩存中的數(shù)據(jù)具有訪問速度快、數(shù)據(jù)易丟失等特點。
[0043] 所述健康度指緩存中的數(shù)據(jù)與實際數(shù)據(jù)庫的數(shù)據(jù)一致性的比例。當(dāng)緩存中的數(shù)據(jù) 與實際數(shù)據(jù)庫的數(shù)據(jù)完全一致時,則健康度為百分之百,相應(yīng)的,所述緩存的健康度是衡量 緩存數(shù)據(jù)有效性的重要指標(biāo)。
[0044] 如圖1所示,在本發(fā)明一實施方式中,所述緩存健康度檢測方法包括:
[0045] 每一預(yù)設(shè)周期,若服務(wù)器未處于滿負(fù)載狀態(tài),則在服務(wù)器的訪問請求中抽取至少 一個作為抽樣請求。
[0046] 優(yōu)選的,可動態(tài)獲取服務(wù)器當(dāng)前負(fù)載下合理的抽樣比例。在服務(wù)器集群環(huán)境下,每 臺服務(wù)器的負(fù)載和內(nèi)存占用都是各不相同的,因此,需要一種集群動態(tài)分配策略將抽樣請 求按照負(fù)載的不同分布到不同的服務(wù)器上。如:若某一服務(wù)器當(dāng)前負(fù)載很高,則這臺服務(wù)器 當(dāng)前可能不會分配到抽樣請求,而當(dāng)前負(fù)載較低的服務(wù)器就會分配到較多的抽樣請求,以 實現(xiàn)對服務(wù)器資源充分利用,且這種基于負(fù)載的抽樣不會影響到服務(wù)器的整體性能,實現(xiàn) 資源的最大化利用和功能最大化。
[0047] 相應(yīng)的,在本發(fā)明一實施方式中,可動態(tài)地獲取服務(wù)器當(dāng)前合理的抽樣比例,并根 據(jù)抽樣比例隨機抽取訪問請求中特定的請求作為健康度抽樣請求。
[0048] 具體的,每一預(yù)設(shè)周期,根據(jù)所述服務(wù)器的負(fù)載獲取對應(yīng)所述負(fù)載的抽樣比例,并 根據(jù)所述抽樣比例以及訪問請求的數(shù)量計算抽樣請求的數(shù)量;其中,服務(wù)器負(fù)載越高,抽樣 比例越低;服務(wù)器負(fù)載越低,抽樣比例越高。
[0049] 進(jìn)一步的,抽樣請求的數(shù)量=所述抽樣比例*訪問請求的數(shù)量;
[0050] 所述抽樣比例=1-服務(wù)器當(dāng)前負(fù)載百分比