華為云計(jì)算 云知識(shí) 如何提高CDN緩存命中率
如何提高CDN緩存命中率

 【最新活動(dòng)】

CDN緩存命中率低,會(huì)導(dǎo)致源站壓力大,靜態(tài)資源訪問效率低。您可以針對(duì)導(dǎo)致CDN緩存命中率低的具體原因,選擇對(duì)應(yīng)的優(yōu)化策略,來提高CDN的緩存命中率。CDN緩存命中率包括流量命中率和請(qǐng)求命中率。

 

流量命中率 = 命中緩存產(chǎn)生的流量 / 請(qǐng)求總流量

請(qǐng)求命中率 = 命中緩存的請(qǐng)求數(shù) / 請(qǐng)求總數(shù)

說明:流量命中率越低,回源流量越大,源站的流出流量越大,源站帶寬資源占用越大,其代表了源站服務(wù)器收到的負(fù)載壓力,請(qǐng)重點(diǎn)關(guān)注流量命中率。

 

查看緩存命中率

您可以登錄CDN控制臺(tái)查看流量命中率和請(qǐng)求命中率。

登錄華為云控制臺(tái),在控制臺(tái)首頁中選擇“CDN與智能邊緣 > CDN”,進(jìn)入CDN控制臺(tái)。

在左側(cè)菜單欄中,選擇“統(tǒng)計(jì)分析”。

分別選擇“使用量統(tǒng)計(jì)”和“訪問情況統(tǒng)計(jì)”查看“流量命中率”和“請(qǐng)求命中率”。

圖1 流量命中率

圖2 請(qǐng)求命中率

 

優(yōu)化緩存命中率

1.理設(shè)置緩存過期時(shí)間

CDN加速 的本質(zhì)是緩存加速,把源站資源緩存在遍布全球的節(jié)點(diǎn)上,用戶可以就近從邊緣節(jié)點(diǎn)獲取資源,從而達(dá)到加速的效果。您可以通過CDN控制臺(tái)合理設(shè)置緩存過期時(shí)間來提高緩存命中率,建議如下:

對(duì)于不經(jīng)常更新的靜態(tài)文件(如圖片類型、應(yīng)用下載類型等),建議您將緩存時(shí)間設(shè)置為1個(gè)月以上。

對(duì)于頻繁更新的靜態(tài)文件(如JS、CSS等),您可以根據(jù)實(shí)際業(yè)務(wù)情況設(shè)置。

對(duì)于動(dòng)態(tài)文件(如PHP、JSP、ASP等),建議您將緩存時(shí)間設(shè)置為0,即不緩存。

說明:如果源站設(shè)置了s-maxage=0、max-age=0、no-cache、no-store、private,CDN側(cè)同時(shí)開啟了“緩存遵循源站”功能(此功能默認(rèn)關(guān)閉),CDN節(jié)點(diǎn)將無法緩存源站資源,導(dǎo)致頻繁回源。

如果您的源站有多個(gè)主機(jī),某個(gè)相同的資源在多個(gè)主機(jī)中的Last-modified、Etag、Content-Length不一致,CDN節(jié)點(diǎn)將無法緩存該資源,導(dǎo)致重復(fù)回源。

如果源站資源更新,請(qǐng)刷新資源對(duì)應(yīng)的URL,以保證用戶可以獲得最新的資源。

如果您修改了緩存規(guī)則:

新的規(guī)則僅對(duì)后面緩存的資源生效,已經(jīng)緩存的資源需要等緩存過期后,再次緩存才會(huì)遵循新的緩存規(guī)則。

如果您想要立即生效,請(qǐng)?jiān)谛薷木彺嬉?guī)則后執(zhí)行緩存刷新操作。

 

2.開啟過濾URL參數(shù)

目前大多數(shù)的網(wǎng)頁請(qǐng)求都攜帶URL參數(shù)信息,參數(shù)以“?”開始,如果參數(shù)沒有包含重要信息(如版本信息等),是否攜帶該參數(shù)訪問不會(huì)影響用戶獲得正確的資源,可以選擇開啟“忽略URL參數(shù)”功能,提高緩存命中率,提升分發(fā)效率。

典型應(yīng)用:

終端用戶首次訪問URL“http://www.example.com/1.txt?test1”時(shí),CDN無緩存,回源請(qǐng)求資源;第二次訪問“http://www.example.com/1.txt?test2”時(shí),由于開通了“忽略URL參數(shù)”功能,所以“?”之后的參數(shù)不匹配,直接命中緩存“http://www.example.com/1.txt”。

終端用戶首次訪問URL“http://www.example.com/1.txt?test1”時(shí),CDN無緩存,回源請(qǐng)求資源;第二次訪問“http://www.example.com/1.txt?test2”時(shí),由于沒有開通“忽略URL參數(shù)”功能,所以“?”之后的參數(shù)也需要匹配,要重新回源請(qǐng)求“http://www.example.com/1.txt?test2”。

 

3.預(yù)熱URL

CDN可以通過緩存預(yù)熱將源站資源主動(dòng)緩存到CDN節(jié)點(diǎn),用戶訪問時(shí)就能直接從CDN節(jié)點(diǎn)獲取到最新的資源。

當(dāng)您的域名初次接入CDN加速、活動(dòng)發(fā)布時(shí)您可以將源站資源預(yù)熱到CDN節(jié)點(diǎn),用戶訪問資源時(shí)直接從CDN節(jié)點(diǎn)獲取,從而提升CDN的緩存命中率。

典型場景:

初次接入CDN:域名初次接入CDN時(shí),節(jié)點(diǎn)暫未緩存源站資源,此時(shí),您可以將源站資源預(yù)熱至CDN節(jié)點(diǎn)。后續(xù)用戶訪問資源將直接從就近的CDN節(jié)點(diǎn)獲取資源,提升訪問速度。

安裝包發(fā)布:新版本安裝包或是升級(jí)包發(fā)布前,提前將資源預(yù)熱至CDN節(jié)點(diǎn)。正式上線后,海量用戶的下載請(qǐng)求將直接由 全球加速 節(jié)點(diǎn)響應(yīng),提升下載速度的同時(shí),大幅度降低源站壓力。

運(yùn)營活動(dòng):運(yùn)營活動(dòng)發(fā)布前,提前將活動(dòng)頁涉及到的靜態(tài)資源預(yù)熱至CDN節(jié)點(diǎn)?;顒?dòng)開始后,用戶訪問中所有靜態(tài)資源均由加速節(jié)點(diǎn)響應(yīng),海量帶寬儲(chǔ)備保障用戶服務(wù)可用性,提升用戶體驗(yàn)。

 

4.開啟Range回源

Range回源是指源站在收到CDN節(jié)點(diǎn)回源請(qǐng)求時(shí),根據(jù)HTTP請(qǐng)求頭中的Range信息返回指定范圍的數(shù)據(jù)給CDN節(jié)點(diǎn)。Range回源能有效縮短大文件的分發(fā)時(shí)間,提升回源效率,提高緩存命中率,詳見Range回源。

典型場景:

未開通Range時(shí),用戶想觀看指定片段的視頻,而CDN回源時(shí)需要獲取整個(gè)視頻,所以回源流量大于響應(yīng)給用戶的流量,從而造成緩存命中率降低。開啟Range回源后,CDN將分片回源獲取資源返回給用戶,從而提升緩存命中率。

 

5.其它

緩存資源需要更新時(shí),盡量避免刷新目錄

當(dāng)源站某個(gè)資源更新時(shí),一般需要通過刷新相應(yīng)的URL來強(qiáng)制節(jié)點(diǎn)緩存資源過期。刷新目錄會(huì)將目錄內(nèi)所有的資源全部置為過期,用戶下次訪問時(shí)將無法命中緩存,全部回源站請(qǐng)求資源,因此盡量避免刷新整個(gè)目錄,尤其慎重刷新根目錄。

避免在URL中攜帶動(dòng)態(tài)參數(shù)

如果您的URL中包含動(dòng)態(tài)參數(shù),如時(shí)間戳,CDN無法緩存該資源,導(dǎo)致頻繁回源。

 

判斷URL是否命中緩存

在瀏覽器Chrome上,按F12。

選擇“Network”。

查看指定URL的響應(yīng)頭,查看頭部信息,進(jìn)行如下判斷:

如果有“x-hcs-proxy-type”頭部,值為“1”即命中緩存,值為“0”即未命中緩存,不再查看其它頭部;

如果無“x-hcs-proxy-type”頭部,而有“X-Cache-Lookup”頭部,值為“Hit From MemCache”、“Hit From Disktank”或“Hit From Upstream”即為命中緩存,其它值表示未命中緩存,不再查看其它頭部;

如果同時(shí)無“x-hcs-proxy-type”、“X-Cache-Lookup”頭部,有“age”頭部,則值大于“0”即命中緩存,值為“0”即未命中緩存。