CDN—ContentDeliveryNetwork,即內容分發網絡。CDN是構建在網絡之上的內容分發網絡,依靠部署在各地的邊緣服務器,通過中心平台的分布式緩存、負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,降低網絡擁塞,提高用戶訪問響應速度和命中率。CDN的關鍵技術主要有內容存儲和分發技術。
目的:解決因分布、帶寬、服務器性能帶來的訪問延遲問題,適用於站點加速、點播、直播等場景。
使用戶可就近取得所需內容,解決 Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度和成功率。同時,緩解中心源服務器的負荷壓力,降低了骨干網絡的負載流量,也降低了端到端時延,提高了服務質量和用戶使用體驗。
控制時延無疑是現代信息科技的重要指標,CDN的意圖就是盡可能的減少資源在轉發、傳輸、鏈路抖動等情況下順利保障信息的連貫性。
- 內容緩存為CDN網絡節點,位於用戶接入點,是面向最終用戶的內容提供設備,可緩存靜態Web內容和流媒體內容,實現內容的邊緣傳播和存儲,以便用戶的就近訪問.
- 內容交換機處於用戶接入集中點,可以均衡單點多個內容緩存設備的負載,並對內容進行緩存負載平衡及訪問控制.
- 內容路由通常通過負載均衡系統來實現,動態均衡各個內容緩存站點的載荷分配,為用戶的請求選擇最佳的訪問站點,同時提高網站的可用性。
- 內容管理系統負責整個CDN的管理,是可選部件,作用是進行內容管理,如內容的注入和發布、內容的分發、內容的審核、內容的服務等
流程圖
DNS 服務器根據用戶 IP 地址,將域名解析成相應節點的緩存服務器IP地址,實現用戶就近訪問。使用 CDN 服務的網站,只需將其域名解析權交給 CDN 的全局負載均衡(GSLB)設備,將需要分發的內容注入 CDN,就可以實現內容加速了。
https://segmentfault.com/a/1190000010631404 |
|
![]() |
|
CDN節點的緩存內容不實時更新,只有當緩存內容到期后才能回源拉取最新的內容。當您的源站內容更新后,如果希望用戶可以獲取到最新內容,您可以通過緩存刷新功能將CDN緩存強制過期;如果CDN邊緣節點需要及時更新此內容,先將此內容刷新,再將此內容預熱到CDN節點。
緩存刷新:提交緩存刷新請求后,CDN節點的緩存內容將會被強制過期。當用戶向CDN節點請求資源時,CDN會直接回源站拉取對應的資源返回給用戶,並將其緩存。
緩存預熱:提交緩存預熱請求后,源站將會主動將對應的資源緩存到CDN節點。當用戶首次請求時,就能直接從CDN節點緩存中獲取到最新的請求資源,無需再回源站拉取。
優點:將需要預熱的資源推送到CDN邊緣節點,用戶訪問時將不需要再回源站,可以直接命中緩存。這樣可加快資源的首次訪問,同時緩解突增回源流量給源站造成的壓力。
金山雲:https://www.ksyun.com/developer/article/6938.html
1:什么是刷新?淘汰cdn節點上的舊文件,重新獲取文件的新版本。
什么是預熱?首次發布的文件,主動從源站推送到CDN,讓用戶訪問到CDN時不用回客戶的源站命中。
2:為什么要刷新?
CDN節點緩存的資源沒有過期,但是基於客戶的業務要求,需要更新CDN節點上緩存資源,刷新就是強制刪除CDN節點緩存內容。用戶請求這些資源時,CDN節點需要重新回源拉取資源,保證響應的資源與源站一致。
常見的場景:比如A公司游戲包發布后,發現有bug需要修復,為了降低影響,需要把CDN節點上緩存的舊游戲安裝包都刪除。
刷新類型分為目錄刷新和URL刷新。URL刷新是直接將節點上緩存的資源刪除。對於目錄刷新,會將節點上的文件資源過期,會同源站對比Last-Modified時間,比如節點上的目錄文件的Last-Modified為:Mon, 26 Dec 2018 11:11:00 GMT ,源站文件的Last-Modified為Mon, 28 Dec 2018 11:11:00 GMT.則此時源站會告訴節點:你的文件比我的文件老,我已經更新文件了,快來取最新的資源吧,此時會將源站新的資源更新到節點上,否則,源站返回304,告訴節點,你節點上的資源已經和我源站上的資源是一致,為最新的了,無需更新。
3:為什么要預熱?
主動從源站推送到CDN,讓用戶訪問到CDN時不用回客戶的源站命中。
xx游戲在9月12日首次開發,游戲玩家搶着開服的時候趕緊下載游戲客戶端(3GB)。如果沒有預熱,第一批玩家在訪問官網下載時,官網CNME記錄解析到CDN。由於是第一次訪問,CDN中緩存也沒有,因此需要回源站去獲取游戲客戶端(3GB)。
影響:
首批下載的用戶體驗很差,因為都集中訪問源站主機,源站主機的CPU利用率和帶寬會跑的很高。第一批玩家下載完成后,CDN中也能夠緩存了一份,第二批玩家下載就直接在CDN中命中,速度比第一批快得多。
但是等CDN緩存好完整一份游戲客戶端,可能半天到1天的時間就過去了。因為第一批下載時,源站壓力非常大,CDN回源的帶寬可能只有幾KB,幾KB的速度下載2GB的文件,可能要好幾天了。那么游戲開服的頭幾天連游戲客戶端都下載不了。
在開服前,通過預熱功能,將游戲安裝包(3GB)從源站推送到各CDN節點,提前先緩存起來。等開服的時候,第一個玩家也能從CDN中快速獲取到游戲安裝包。
CDN 常用的防盜鏈方式包含IP黑白名單、Referer、時間戳以及中心鑒權進行防盜鏈等方式。
一、IP黑白名單:
這個比較簡單,直接配置請求者的IP黑白名單,設置黑名單之后,除了黑名單的用戶都能訪問;反之設置了白名單,只有白名單的用戶都可以訪問。這個方法直接有效,但必須知道請求者的具體IP信息,所以適用的場景比較有限。
二、Referer防盜鏈:
在http請求時,Referer里記錄的是請求的來路,所以通過設置Referer黑白名單,可以控制哪個頁面或者域名過來的請求是可以訪問的。這個方法比較簡單,因為你很清楚想讓哪個網站或者不想讓哪個網站訪問,但是缺點就是Referer信息可以偽造。
三、時間戳防盜鏈:
時間戳防盜鏈主要是在url請求里,通過增加時間戳的信息來對url加上時間的因素,盜鏈者如果不及時更新url,那么就會無法訪問。這個比較常見,但是如果盜鏈者定期的過來更新url,這種方法也會失效。
四、中心鑒權
中心鑒權的方式等於在源站增加一層驗證,這個方法會對防盜鏈有效,但會增加請求的時間成本,一般用於有對內容進行完全保護的,比如有些視頻網站,需要會員身份才能看的內容,對於這些網站,一般都會做中心鑒權。
CDN常用調度類型
1、DNS調度:智能計算,就近最佳節點為網民提供服務。
2、httpdns:客戶端直接調用HttpDNS接口獲取緩存服務器IP組,再擇優向IP組中的緩存服務器發送請求,替代常規DNS調度策略,適用於客戶端,且客戶端需稍作修改進行HttpDNS接口調用。
3、邊緣302調度:針對因用戶LocalDNS配置錯誤引起的解析錯誤,緩存服務器可根據終端IP進行判斷,並通過302方式響應終端最優緩存服務器IP供終端訪問。適用於大文件下載(因多一次302跳轉網絡延時,對小文件下載不適用)
4、中央302調度:調度服務器接受終端Http請求,可根據終端IP及url請求熱度,將用戶請求通過302方式調度至最優的緩存服務器上進行響應。適用於大文件下載(因多一次302跳轉的網絡延時,對小文件不適用),且需與一致性hash、冷熱分離配合使用。
注:一致性hash、冷熱分離:指同一地區多節點情況下,對文件進行一致性hash,可以將冷文件hash至一個節點集中訪問,提高命中率,將熱文件hash至各個節點,進行熱度均攤。其中,冷熱文件可按比例設置。
融合CDN
融合CDN是將業務統一起來分別解析到不同的雲平台中,根據業務情況自行進行內容解析與調度。內容解析調度是融合CDN的核心。解決多CDN備災、帶寬用量。
融合CDN基本是通過實時獲知雲平台的網絡質量,在根據質量反饋進行合理的內容的調度處理。