CDN緩存那些事
1 CDN是什么?
談到CDN的作用,可以用買火車票來形象比喻:
幾年前,還沒有火車票代售點(diǎn)一說,12306.cn更是無從說起。那時(shí)候火車票還只能在火車站的售票大廳購買,而我所住的小縣城并不通火車,火車票都要去市里的火車站購買,而從縣城到市里,來回就是4個(gè)小時(shí)車程,簡直就是浪費(fèi)生命。后來就好了,小縣城里出現(xiàn)了火車票代售點(diǎn),可以直接在代售點(diǎn)購買火車,方便了不少,全市人民再也不用在一個(gè)點(diǎn)苦逼的排隊(duì)買票了。
CDN就可以理解為分布在每個(gè)縣城的火車票代售點(diǎn),用戶在瀏覽網(wǎng)站的時(shí)候,CDN會選擇一個(gè)離用戶最近的CDN邊緣節(jié)點(diǎn)來響應(yīng)用戶的請求,這樣海南移動用戶的請求就不會千里迢迢跑到北京電信機(jī)房的服務(wù)器(假設(shè)源站部署在北京電信機(jī)房)上了。
2.CDN的優(yōu)勢很明顯:
(1)CDN節(jié)點(diǎn)解決了跨運(yùn)營商和跨地域訪問的問題,訪問延時(shí)大大降低
(2)大部分請求在CDN邊緣節(jié)點(diǎn)完成,CDN起到了分流作用,減輕了源站的負(fù)載?
3.緩存是什么?
這里不深究CDN背后高大上的架構(gòu),也不討論CDN如何做到全局流量調(diào)度策略,本文著?討論在有了CDN后,數(shù)據(jù)是如何被緩存的。緩存是一個(gè)到處都存在的用空間換時(shí)間的例子。通過使用多余的空間,我們能夠獲取更快的速度。
(1)首先,看看網(wǎng)站沒有接入CDN時(shí),用戶瀏覽器與服務(wù)器是如何交?的:
(2)戶在瀏覽網(wǎng)站的時(shí)候,瀏覽器能夠在本地保存網(wǎng)站中的圖片或者其他文件的副本,這樣用戶再次訪問該網(wǎng)站的時(shí)候,瀏覽器就不用再下載全部的文件,減少了下載量意味著提高了頁面加載的速度。
如果中間加上一層CDN,那么用戶瀏覽器與服務(wù)器的交互如下:
客戶端瀏覽器先檢查本地緩是否過期,如果過期,則向CDN邊緣節(jié)點(diǎn)發(fā)起請求,CDN邊緣節(jié)點(diǎn)會檢測用戶請求數(shù)據(jù)的緩存是否過期:
如果沒有過期,則直接響應(yīng)用戶請求,此時(shí)一個(gè)完成http請求結(jié)束;
如果數(shù)據(jù)已經(jīng)過期,那么CDN還需要向源站發(fā)出回源請求(back to the source request),來拉取最新的數(shù)據(jù)。
4.客戶端(?覽器)緩存
客戶端緩存減少了的服務(wù)器請求,避免了文件重復(fù)加載,顯著地提升了用戶地方。但是當(dāng)網(wǎng)站發(fā)生了更新的時(shí)候(如替換了css、js以及圖片文件),瀏覽器本地仍保存著舊版本的文件,從而導(dǎo)致無法預(yù)料后果。
曾幾何?,一個(gè)頁面加載出來,頁面各元素位置亂飄,按鈕點(diǎn)擊失效,前端GG都會習(xí)慣性地問一句:“緩存清了沒?”,然后Ctrl+F5 ,Everything is OK。
5.我司CDN加速主要針對云南沒有雙線/多線機(jī)房的網(wǎng)絡(luò)現(xiàn)狀,部署了昆明電信/移動/聯(lián)通節(jié)點(diǎn),加速后云南電信、移動、聯(lián)通用戶客戶端上ping目標(biāo)站點(diǎn)都小于10MS(各地區(qū)情況不同,昆明?般在5MS以內(nèi),其他州市在15MS以內(nèi))。針對動態(tài)內(nèi)容網(wǎng)站,部署了中轉(zhuǎn)優(yōu)化有點(diǎn),針對各行業(yè)(電子商務(wù)、醫(yī)療網(wǎng)站、旅游)做特殊優(yōu)化,滿足各行業(yè)需求。