本文章以比較通俗的語言講述下 CDN 是什么,CDN 為什么能加速網(wǎng)站訪問,為什么大部分網(wǎng)站都要使用 CDN厦酬,涉及細節(jié)部分并不需要我們用戶了解,所以不會詳細描述瘫想。文章如有錯誤仗阅,歡迎指出,也歡迎一起探討国夜。
1减噪、CDN 是什么
CDN即內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network)的簡稱。簡單地說就是 CDN 廠商在全國甚至全球各地车吹,都部署了機房筹裕,每個機房就是一個 CDN 節(jié)點,然后節(jié)點自身也做了一定的優(yōu)化窄驹。然后北京的用戶訪問就會分配到北京或者北京周邊的節(jié)點朝卒,深圳的用戶訪問就會分配到深圳或者深圳周邊的節(jié)點,就近原則乐埠;如果你的網(wǎng)站流量很大抗斤,這種策略也類似于負載均衡(一對一、一對多)丈咐,一萬個人同時訪問你的網(wǎng)站瑞眼,分配到全國各個節(jié)點肯定比只分配到一臺服務(wù)器是要好的。
2负拟、為什么 CDN 能夠加速網(wǎng)站訪問
首先說下最常見的網(wǎng)站架構(gòu),最常見的網(wǎng)站是搭建在一臺服務(wù)器上的歹河,服務(wù)器上配置好 nginx掩浙、mysql花吟、php 等網(wǎng)站運行的必備環(huán)境,然后網(wǎng)站就可以運行起來厨姚,可以通過 IP 地址訪問衅澈,如果你有域名的話,可以通過把域名解析到這個 IP 地址谬墙,然后用戶輸入域名就可以訪問你的網(wǎng)站了今布。
2.1、沒有 CDN 之前訪問情況
比如你的服務(wù)器在北京拭抬,這時候北京的用戶訪問你的網(wǎng)站部默,離服務(wù)器近,訪問速度當然也快造虎;深圳的用戶訪問你的網(wǎng)站傅蹂,由于離北京比較遠,訪問速度相對于北京用戶來說會稍慢算凿,但是由于都在國內(nèi)份蝴,差異不大;如果這時候美國的用戶訪問你的網(wǎng)站氓轰,由于這時候?qū)儆诳鐕L問婚夫,訪問網(wǎng)站的速度就會大大下降,嚴重影響用戶體驗署鸡。
2.1案糙、使用 CDN 之后訪問情況
當你的網(wǎng)站使用 CDN 后,北京的用戶訪問你的網(wǎng)站靴庆,會分配到北京或者北京周邊的節(jié)點侍筛;深圳的用戶訪問會分配到深圳或者深圳周邊的節(jié)點;美國的用戶訪問會分配到美國或者美國周邊的節(jié)點撒穷。當訪問人數(shù)很多的時候,還能夠減小你北京服務(wù)器(源站)的壓力裆熙,因為這時候用戶訪問的請求其實沒有到服務(wù)器端礼,全部在 CDN 節(jié)點上。
并且當該節(jié)點收到請請求后入录,會把該請求內(nèi)容緩存到 CDN 節(jié)點上蛤奥,后續(xù)還有用戶訪問到該 CDN 節(jié)點,則直接返回僚稿,訪問速度大大提高凡桥,所以有時候會發(fā)現(xiàn)用了 CDN,但是請求還是慢蚀同,一般是因為是初次訪問缅刽,該 CDN 節(jié)點沒有該內(nèi)容的緩存啊掏,也就是沒有命中緩存,后續(xù)再次訪問的話就會很快衰猛。
3迟蜜、使用 CDN 后的利弊
3.1、利
- 加速網(wǎng)站訪問啡省,就近分配節(jié)點娜睛,實現(xiàn)跨運營商,跨區(qū)域全網(wǎng)覆蓋卦睹。
- 隱藏服務(wù)器真實 IP 地址
- 可以使用各 CDN 產(chǎn)商的功能畦戒,比如防盜鏈,不同資源的針對性加速等等
- 節(jié)約服務(wù)器成本结序。即使購買 1 核 1 G 1M 的服務(wù)器也能應(yīng)對大部分場景障斋,因為只有第一次才需要回源,后續(xù)訪問的壓力都在 CDN 節(jié)點
3.2笼痹、弊
- 當一個文件名相同的文件配喳,文件的內(nèi)容發(fā)生了變化,由于之前已經(jīng)有用戶訪問了該文件凳干,文件就被緩存到 CDN 節(jié)點中晴裹,這時候你即使已經(jīng)上傳了新的文件,用戶訪問的還是舊文件救赐,這時候就需要手動刷新 CDN 緩存或者帶 query 參數(shù)請求涧团,CDN 節(jié)點才會再次回到原站請求最新的文件。有時候開發(fā)過程中沒注意這個問題會非尘酰苦惱泌绣。
- 一不小心一棟樓就沒了,使用 CDN 記得配置到防盜鏈等訪問控制预厌,不然很容易被盜刷阿迈。
4、CDN常用名詞解釋
- 加速域名:也就是你在 CDN 廠商后臺添加的域名轧叽,比如你添加了一個域名苗沧,cdn.timhbw.com,那么這個就是加速域名炭晒,并不是說你現(xiàn)在網(wǎng)站的域名(timhbw.com)
- CNAME 記錄:在你的域名解析商待逞,點擊【添加解析】的時候,會讓你選擇記錄類型网严,用的最多的是 A识樱,就是指向 IP。CNAME 也是記錄類型的一種,Canonical Name 翻譯為中文也就是別名怜庸。比如 cdn.timhbw.com 你添加了一個 CNAME 記錄当犯,記錄值是:timhbw.com,那么訪問 cdn.timhbw.com的時候休雌,所有的請求會轉(zhuǎn)到 timhbw.com灶壶。
- CNAME 域名:你在 CDN 廠商添加加速域名 cdn.timhbw.com,就會自動分配一個 CNAME 域名杈曲,比如七牛云是 xxx.qiniudns.com驰凛,騰訊云是:xxx.cdn.dnsv1.com,阿里云是:xxx.kunlun.com 類似這種担扑。
- 動態(tài)內(nèi)容:是指多次訪問同一內(nèi)容恰响,響應(yīng)返回的數(shù)據(jù)是不是相同的,比如API 接口涌献、.jsp胚宦、.aps、.php等
- 靜態(tài)內(nèi)容:是指多次訪問同一內(nèi)容燕垃,響應(yīng)返回的數(shù)據(jù)是相同的枢劝,比如圖片、html卜壕、js您旁、css、apk轴捎、ipa等
- DNS:也就是域名解析服務(wù)鹤盒。作用就是你輸入 timhbw.com 后,會自動把域名轉(zhuǎn)換為網(wǎng)絡(luò)可以識別的 IP 地址侦副,經(jīng)過一系列處理后侦锯,瀏覽器上就可以服務(wù)器返回的內(nèi)容。
- 邊緣節(jié)點(CDN 節(jié)點):也就是前面提到的 CDN 節(jié)點
- 命中率:用戶請求的時候秦驯,如果該節(jié)點已緩存訪問的內(nèi)容尺碰,則直接返回給客戶,則是HIT(命中)译隘,如果 CDN 節(jié)點沒有該內(nèi)容緩存亲桥,就需要回到源站獲取,成為 MISS(未命中)细燎。命中的請求數(shù)占總請求數(shù)的百分比就是命中率。
- 中間源:位于源站 和 邊緣節(jié)點 中間的一個回源服務(wù)器皂甘。中間源服務(wù)器可緩存多個邊緣節(jié)點的回源請求玻驻,對同一內(nèi)容的請求,中間源服務(wù)器只需進行一次回源即可將內(nèi)容分發(fā)至各邊緣節(jié)點,可以降低源站的壓力璧瞬。
- 源站:就是實際的業(yè)務(wù)服務(wù)器户辫,比如你的云主機,或者各大廠商的對象存儲等
- 回源:當用戶發(fā)起一個請求嗤锉,邊緣節(jié)點發(fā)現(xiàn)沒有緩存該內(nèi)容渔欢,則會回到源站去請求該內(nèi)容。
- 冷資源:如前面所說瘟忱,CDN 是利用緩存加速奥额,會把資源存儲在 CDN 節(jié)點,但是由于 CDN 節(jié)點的存儲容量有限访诱,當存儲容量不夠后垫挨,會按照“最近最少使用”原則,將最近訪問的資源中訪問頻率最低的資源從節(jié)點中清除触菜。
- range 回源(分片緩存):一般用在點播和下載平臺等大文件分發(fā)九榔,將一份文件拆分成若干個小文件回源,減少回源消耗流量涡相。比如一個 500MB 的文件哲泊,當開啟 range 回源后,客戶端發(fā)起的請求中含有 range催蝗,則源站收到 CDN 的請求中也帶有 range切威,客戶端請求多少數(shù)據(jù)就響應(yīng)多少數(shù)據(jù),對應(yīng)的 HTTP 狀態(tài)碼是 206生逸,請求中斷后也不會再請求牢屋。當沒有開啟 range 回源的時候,客戶端發(fā)起的請求中含有 range槽袄,但是源站收到 CDN 的請求沒有帶 range烙无,源站會返回完整的 500MB 的數(shù)據(jù),會導(dǎo)致回源放大問題遍尺,就是 CDN只請求了 10MB 數(shù)據(jù)截酷,但是源站卻返回了 500MB 數(shù)據(jù)。
- 回源 HOST:回源 HOST 決定了 CDN 節(jié)點在回源站請求資源的時候乾戏,在源站訪問的站點域名迂苛,也就是訪問到該 IP 上的哪個站點,也就是 nginx 配置中的 server_name鼓择。
- 回源協(xié)議(協(xié)議回源):比如客戶端使用 HTTPS方式請求資源三幻,當 CDN 節(jié)點上沒有緩存該資源,就會以相同的 HTTPS 方式請求源站獲取內(nèi)容呐能。同理如果是客戶端是 HTTP 請求念搬,則 CDN 節(jié)點也以 HTTP 方式請求源站獲取內(nèi)容抑堡。
- 去參數(shù)回源(過濾參數(shù)):比如你使用兩種方式訪問同一個資源:https://static.timhbw.com/logo.jpg?test、https://static.timhbw.com/logo.jpg?cdn朗徊,可以看到鏈接后面有?test首妖,這個叫 query 參數(shù)
- 如果這個功能開啟,則 CDN 節(jié)點會使用 https://static.timhbw.com/logo.jpg 向源站發(fā)起請求爷恳,然后緩存
- 如果這個功能關(guān)閉有缆,則 CDN 節(jié)點會使用 https://static.timhbw.com/logo.jpg?test 、https://static.timhbw.com/logo.jpg?cdn 分別向源站發(fā)起請求温亲,然后分別緩存棚壁。
原文鏈接:點我