一種可配置的緩存系統(tǒng)和方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)領(lǐng)域,尤其涉及一種前端緩存系統(tǒng)和方法。
【背景技術(shù)】
[0002]緩存技術(shù)在計(jì)算機(jī)系統(tǒng)中無處不在,從計(jì)算機(jī)到各種路由設(shè)備、從軟件實(shí)現(xiàn)到硬件實(shí)現(xiàn),設(shè)計(jì)良好的緩存系統(tǒng),可以大大提高系統(tǒng)的響應(yīng)速度,提高了用戶體驗(yàn)?;ヂ?lián)網(wǎng)應(yīng)用中,緩存系統(tǒng)又分為memcache、redis等后端緩存,以及Squid、Varnish、Nginx、ApacheTraffic Server等前端緩存系統(tǒng)。不論前端緩存還是后端緩存,適應(yīng)業(yè)務(wù)需求,提尚緩存命中率是最重要的追求。
[0003]前端緩存服務(wù),在此指使用⑶N技術(shù),利用Squid、Varnish、Nginx、Apache TrafficServer等做前端緩沖,提供HTTP協(xié)議所描述的緩存服務(wù)。
[0004]HTTP協(xié)議詳細(xì)定義了前端緩存服務(wù)、以及瀏覽器本地緩存的支持細(xì)節(jié),緩存與否受url、多個(gè)http header域值影響。現(xiàn)實(shí)業(yè)務(wù)場(chǎng)景中,瀏覽器、操作系統(tǒng)、url重定向、get參數(shù)、cookie值等眾多因素變化,均可能導(dǎo)致緩存無效。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是為了解決現(xiàn)有技術(shù)的不足,提供一種可配置的緩存系統(tǒng)和方法。
[0006]本發(fā)明的第一個(gè)目的是提供一種可配置的緩存系統(tǒng),包括前端調(diào)度器、前端緩存服務(wù)器,所述前端調(diào)度器中配置有相關(guān)的locat1n規(guī)則和嵌入式腳本Lua語(yǔ)言,所述前端調(diào)度器通過判斷訪問請(qǐng)求,根據(jù)url是否匹配自定義的header參數(shù)作相關(guān)判斷,并將最終執(zhí)行完的參數(shù)傳遞給前端緩存服務(wù)器。
[0007]本發(fā)明的第二個(gè)目的是提供一種可配置的緩存方法,通過上述的可配置的緩存系統(tǒng)實(shí)現(xiàn),包括至少以下步驟:
(O前端調(diào)度器轉(zhuǎn)發(fā)請(qǐng)求,判斷此次請(qǐng)求,并確保只匹配GET請(qǐng)求;
(2)前端調(diào)度器檢測(cè)請(qǐng)求參數(shù),通過url重寫,消除無關(guān)邏輯的參數(shù),確保請(qǐng)求中帶有無關(guān)邏輯的參數(shù)都命中同一個(gè)緩存結(jié)果;
(3)前端調(diào)度器檢測(cè)此次請(qǐng)求的cookie內(nèi)容,提取與執(zhí)行邏輯相關(guān)的cookie值;
(4)前端調(diào)度器檢測(cè)此次請(qǐng)求的其他header內(nèi)容,提取與執(zhí)行邏輯相關(guān)的域值,并把域值傳遞給一個(gè)配置的變量flang ;
(5)前端調(diào)度器判斷變量flang是否匹配預(yù)設(shè)的值,如果匹配,就把值傳遞都給默認(rèn)的變量deflang,生成正確的header域值;
(6)前端調(diào)度器把最終的header域值傳遞給前端緩存服務(wù)器。
[0008]上述的一種可配置的緩存方法,其中于,所述步驟(2)中,通過前端代理層中的locat1n規(guī)則,判斷請(qǐng)求參數(shù),若可緩存,則進(jìn)行url重寫。
[0009]上述的一種可配置的緩存系統(tǒng),其中,所述前端調(diào)度器采用Nginx代理服務(wù)器。
[0010]綜上所述,由于采用上述技術(shù)方案,本發(fā)明在前端調(diào)度器中通過url重寫技術(shù)和自定義header域值,排除可能干擾緩存的因素,最大程度保障緩存的命中率。確保不同URL按統(tǒng)一邏輯緩存,同時(shí)確保同一 URL為登陸用戶提供各自獨(dú)立的緩存邏輯。
【附圖說明】
[0011]圖1是本發(fā)明一種可配置的緩存系統(tǒng)和方法的流程圖。
【具體實(shí)施方式】
[0012]下面結(jié)合附圖對(duì)本發(fā)明的【具體實(shí)施方式】作詳細(xì)介紹。
[0013]實(shí)施例1
請(qǐng)參見圖1,本發(fā)明的一種可配置的緩存系統(tǒng),包括前端調(diào)度器、前端緩存服務(wù)器,前端調(diào)度器,在此指廣泛應(yīng)用于Web開發(fā)中的七層應(yīng)用代理軟件,包括nginx、haproxy等都是非常高效的前端調(diào)度器,本發(fā)明優(yōu)選nginx。
[0014]在前端調(diào)度器中配置有相關(guān)的locat1n規(guī)則和嵌入式腳本Lua語(yǔ)言,本發(fā)明借助嵌入式腳本Lua語(yǔ)言編程,在前端調(diào)度器中通過url重寫技術(shù)和自定義header域值,排除可能干擾緩存的因素,最大程度保障緩存的命中率。
[0015]本發(fā)明的可配置的緩存方法,通過上述的可配置的緩存系統(tǒng)實(shí)現(xiàn),包括至少以下步驟:
(1)前端調(diào)度器轉(zhuǎn)發(fā)請(qǐng)求,判斷此次請(qǐng)求,通過^111681:_1]16〖110(1 = GET參數(shù)使得本身只匹配GET請(qǐng)求。
[0016](2)前端調(diào)度器檢測(cè)請(qǐng)求參數(shù),通過前端代理層中的locat1n規(guī)則,判斷請(qǐng)求參數(shù),若可緩存,則進(jìn)行url重寫。通過url重寫,消除無關(guān)邏輯的參數(shù),確保請(qǐng)求中帶有無關(guān)邏輯的參數(shù)都命中同一個(gè)緩存結(jié)果。
[0017]例如,“rewrite /dem0.php?test=abc /demo, php last; ”,不例中參數(shù) test=abc與執(zhí)行邏輯無關(guān),不影響最終結(jié)果,通過此重寫,確保'/dem0.php?test=abc'與“/demo,php”命中冋一緩存結(jié)果。
[0018](3)前端調(diào)度器檢測(cè)此次請(qǐng)求的cookie內(nèi)容,提取與執(zhí)行邏輯相關(guān)的cookie值。
[0019]例如,用戶cookie中的語(yǔ)言版本檢查,設(shè)定一個(gè)默認(rèn)值的變量deflang,如果cookie中存在其他值,就把變量的內(nèi)容改成對(duì)應(yīng)的值。
[0020]set $deflang en;
If ( $cookie_defIang ) {
set $defIang $cookie_defIang;
}o
[0021](4)前端調(diào)度器檢測(cè)此次請(qǐng)求的其他header內(nèi)容,提取與執(zhí)行邏輯相關(guān)的域值,并把域值傳遞給一個(gè)配置的變量flang。
[0022]例如,用戶瀏覽器語(yǔ)言環(huán)境的檢查: set_by_lua $fIang ^
local I = ngx.req.get_headers()[ iAccept-Language,]return I
o
[0023](5)前端調(diào)度器判斷變量flang是否匹配預(yù)設(shè)的值,如果匹配,就把值傳遞都給默認(rèn)的變量deflang,生成正確的header域值;并通過nginx的Fastcig_param把默認(rèn)的變量傳遞給前端緩存服務(wù)器。
[0024]例如,針對(duì)語(yǔ)言版本檢測(cè): if ( $fIang ~ ‘zh’ ) {
set $defIang zh;
}
Fastcgi_param HTTP_VARY_DEFLANG Sdeflang0
[0025](6)前端調(diào)度器把最終的header域值傳遞給前端緩存服務(wù)器。
[0026]經(jīng)過上述步驟(I) ~ (6),確保不同URL按統(tǒng)一邏輯緩存,同時(shí)確保同一 URL為登陸用戶提供各自獨(dú)立的緩存邏輯。
[0027]實(shí)施例2
以登陸用戶語(yǔ)言版本區(qū)分為示例,本發(fā)明分為代理服務(wù)配置邏輯、和響應(yīng)匹配邏輯構(gòu)成。
[0028]代理服務(wù)配置邏輯示例如下:
rewrite /dem0.php?test=abc /demo, php last; #使用內(nèi)部跳轉(zhuǎn)達(dá)到修改url 的目的
set $deflang en;# 默認(rèn)值
set_by_lua $fIang '
local I = ngx.req.get_headers () [' Accept-Language'] return I
> ■
j
if ( Sflang ~ ’zh’){#瀏覽器邏輯一請(qǐng)求頭
Accept-Language
set $defIang zh;
}
if ( $cookie—deflang ) {#cookie 邏輯一deflang
set $defIang $cookie—deflang;
}
fastcgi—param HTTP—VARY—DEFLANG $deflang; # 生成請(qǐng)求頭 Vary-DefIang。
[0029]響應(yīng)匹配邏輯如下: header (J Vary: Vary-Deflang O。
[0030]以上示例只展示了一個(gè)特定url的匹配與重寫,以及針對(duì)用戶語(yǔ)言版本的檢測(cè)區(qū)分,通過簡(jiǎn)單擴(kuò)展,可以進(jìn)一步應(yīng)用于任何Iirl匹配重寫過程,以及其他參數(shù)的檢測(cè)實(shí)現(xiàn)。
[0031]以上所述的實(shí)施例僅用于說明本專利的技術(shù)思想及特點(diǎn),其目的在于使本領(lǐng)域內(nèi)的技術(shù)人員能夠了解本專利的內(nèi)容并據(jù)以實(shí)施,不能僅以本實(shí)施例來限定本專利的專利范圍,即凡依本專利所揭示的精神所作的同等變化或修飾,仍落在本專利的專利范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種可配置的緩存系統(tǒng),其特征在于,包括前端調(diào)度器、前端緩存服務(wù)器,所述前端調(diào)度器中配置有相關(guān)的locat1n規(guī)則和嵌入式腳本Lua語(yǔ)言,所述前端調(diào)度器通過判斷訪問請(qǐng)求,根據(jù)url是否匹配自定義的header參數(shù)作相關(guān)判斷,并將最終執(zhí)行完的參數(shù)傳遞給前端緩存服務(wù)器。2.—種可配置的緩存方法,其特征在于,通過權(quán)利要求1所述的可配置的緩存系統(tǒng)實(shí)現(xiàn),包括至少以下步驟: (O前端調(diào)度器轉(zhuǎn)發(fā)請(qǐng)求,判斷此次請(qǐng)求,并確保只匹配GET請(qǐng)求; (2)前端調(diào)度器檢測(cè)請(qǐng)求參數(shù),通過url重寫,消除無關(guān)邏輯的參數(shù),確保請(qǐng)求中帶有無關(guān)邏輯的參數(shù)都命中同一個(gè)緩存結(jié)果; (3)前端調(diào)度器檢測(cè)此次請(qǐng)求的cookie內(nèi)容,提取與執(zhí)行邏輯相關(guān)的cookie值; (4)前端調(diào)度器檢測(cè)此次請(qǐng)求的其他header內(nèi)容,提取與執(zhí)行邏輯相關(guān)的域值,并把域值傳遞給一個(gè)配置的變量flang ; (5)前端調(diào)度器判斷變量flang是否匹配預(yù)設(shè)的值,如果匹配,就把值傳遞都給默認(rèn)的變量deflang,生成正確的header域值; (6)前端調(diào)度器把最終的header域值傳遞給前端緩存服務(wù)器。3.根據(jù)權(quán)利要求2所述的一種可配置的緩存方法,其特征在于,所述步驟(2)中,通過前端代理層中的locat1n規(guī)則,判斷請(qǐng)求參數(shù),若可緩存,則進(jìn)行url重寫。4.根據(jù)權(quán)利要求1所述的一種可配置的緩存系統(tǒng),其特征在于,所述前端調(diào)度器采用Nginx代理服務(wù)器。
【專利摘要】一種可配置的緩存系統(tǒng)和方法,包括前端調(diào)度器、前端緩存服務(wù)器,所述前端調(diào)度器中配置有相關(guān)的location規(guī)則和嵌入式腳本Lua語(yǔ)言,本發(fā)明在前端調(diào)度器中通過url重寫技術(shù)和自定義header域值,排除可能干擾緩存的因素,最大程度保障緩存的命中率。確保不同URL按統(tǒng)一邏輯緩存,同時(shí)確保同一URL為登陸用戶提供各自獨(dú)立的緩存邏輯。
【IPC分類】G06F12/08, H04L29/06
【公開號(hào)】CN105117350
【申請(qǐng)?zhí)枴緾N201510526584
【發(fā)明人】文軍
【申請(qǐng)人】摩貝(上海)生物科技有限公司
【公開日】2015年12月2日
【申請(qǐng)日】2015年8月25日