互聯網應用返回的網絡流量80%來自于它?
什么是 CDN?
內容分發網絡(CDN,Content Distribution Network 或 Content Delivery Network)是指一種透過互聯網互相連接的電腦網絡系統,利用最靠近每位用戶的服務器,更快、更可靠地將音樂、圖片、視頻、應用程序及其他文件發送給用戶,來提供高性能、可擴展性及低成本的網絡內容傳遞給用戶。
CDN名稱解析
內容
在 CDN 領域里,“內容”其實就是 HTTP 協議里的“資源”,比如超文本、圖片、視頻、應用程序安裝包等等。
- 資源按照是否可緩存又分為“靜態資源”和“動態資源”。所謂的“靜態資源”是指數據內容“靜態不變”,任何時候來訪問都是一樣的,比如圖片、音頻。所謂的“動態資源”是指數據內容是“動態變化”的,也就是由后臺服務計算生成的,每次訪問都不一樣,比如商品的庫存、微博的粉絲數等。很顯然,只有靜態資源才能夠被緩存加速、就近訪問,而動態資源只能由源站實時生成,即使緩存了也沒有意義。不過,如果動態資源指定了“Cache-Control”,允許緩存短暫的時間,那它在這段時間里也就變成了“靜態資源”,可以被 CDN 緩存加速。
網絡
CDN 的最核心原則是“就近訪問”。我們知道訪問網絡的速度慢,忽略其他影響服務質量的因素,僅從網絡傳輸的角度來看,一個互聯網系統的速度快慢,主要取決于以下四點因素:
網站服務器接入網絡運營商的鏈路所能提供的出口帶寬。
用戶客戶端接入網絡運營商的鏈路所能提供的入口帶寬。
從網站到用戶之間,經過的不同運營商之間互聯節點的帶寬。一般來說,兩個運營商之間只有固定的若干個點是互通的,所有跨運營商之間的交互都要經過這些點。
從網站到用戶之間的物理鏈路傳輸時延。你要是愛打游戲的話,應該就很清楚了,延遲(Ping 值)通常比帶寬更重要。
那如果用戶能夠在本地幾十公里的距離之內獲取到數據,那么時延就基本上變成 0 了。
分發
用戶在上網的時候就不直接訪問源站,而是訪問離他“最近的”一個 CDN 節點,術語叫“邊緣節點”(edge node),其實就是緩存了源站內容的代理服務器,這樣一來就省去了“長途跋涉”的時間成本,實現了“網絡加速”。
- 被動回源:就是指由用戶訪問所觸發的全自動、雙向透明的資源緩存過程。當某個資源首次被用戶請求的時候,CDN 緩存節點如果發現自己沒有該資源,就會實時從源站中獲取。這時資源的響應時間可粗略認為是資源從源站到 CDN 緩存節點的時間,再加上資源從 CDN 發送到用戶的時間之和。
- 主動分發:源站主動發起,將內容從源站或者其他資源庫推送到用戶邊緣的各個 CDN 緩存節點上。這個推送的操作沒有什么業界標準可循,我們可以采用任何傳輸方式(如 HTTP、FTP、P2P 等)、任何推送策略(如滿足特定條件、定時、人工等)、任何推送時間,只要與我后面要說的更新策略相匹配即可。
- CDN 如何管理(更新)資源:最常見的管理(更新)資源的做法是超時被動失效與手工主動失效相結合。超時失效是指給予緩存資源一定的生存期,超過了生存期就在下次請求時重新被動回源一次。而手工失效是指,CDN 服務商一般會給程序調用提供失效緩存的接口,在網站更新時,由持續集成的流水線自動調用該接口來實現緩存更新。
簡介
CDN(Content Delivery Network)是指內容分發網絡,也稱為內容傳送網絡,這個概念始于1996年,是美國麻省理工學院的一個研究小組為改善互聯網的服務質量而提出的。為了能在傳統IP網上發布豐富的寬帶媒體內容,他們提出在現有互聯網基礎上建立一個內容分發平臺專門為網站提供服務,并于1999年成立了專門的CDN服務公司,為Yahoo提供專業服務。由于CDN是為加快網絡訪問速度而被優化的網絡覆蓋層,因此被形象地稱為“網絡加速器”。CDN網絡的誕生大大地改善了互聯網的服務質量,因此傳統的大型網絡運營商紛紛開始建設自己的CDN網絡,如AT&T、德國電信、中國電信等。隨著市場需求的不斷增加,甚至出現了純粹的CDN網絡運營商,美國的Akamai就是其中最大的一個,擁有分布在世界各地的1000多個節點。我國第一家純粹的CDN網絡服務公司是北京藍汛公司,已從2000年開始建立了一個專門的CDN服務網絡一ChinaCache。目前CDN網絡已經突破50個節點,覆蓋中國六大骨干網絡一中國電信、中國網通、中國移動、中國聯通、中國鐵通網絡以及中國教育網,帶寬資源儲備超過35G,服務的客戶數量達到300多家。
功能
歸納起來,CDN具有以下主要功能:(1)節省骨干網帶寬,減少帶寬需求量 (2)提供服務器端加速,解決由于用戶訪問量大造成的服務器過載問題 (3)服務商能使用Web Cache技術在本地緩存用戶訪問過的Web頁面和對象,實現相同對象的訪問無須占用主干的出口帶寬,并提高用戶訪問因特網頁面的相應時間的需求 (4)能克服網站分布不均的問題,并且能降低網站自身建設和維護成本 (5)降低“通信風暴”的影響,提高網絡訪問的穩定性
路由解析
CNAME
- CNAME記錄:CNAME(Canonical Name)記錄即別名記錄,用來把一個域名解析成另一個域名,再由另一個域名提供源站服務。例如,您在一臺服務器上存放了很多資料,使用docs.example.com訪問服務器上的資源,但又希望通過documents.example.com也能訪問,您可以在您的DNS解析服務商,添加一條CNAME記錄,將documents.example.com指向docs.example.com,所有訪問documents.example.com的請求都會被轉發到docs.example.com。
- CNAME域名:在CDN控制臺添加加速域名后,系統會給對應的域名分配一個*.kunlun.com形式的CNAME域名。您需要在您的DNS解析服務商處添加一條CNAME記錄,將加速域名指向CNAME域名。記錄生效后域名解析就正式轉向CDN服務,該域名所有的請求都將轉向CDN的邊緣節點,達到加速效果。
解析流程
我們來看有CDN的介入,整個DNS解析過程是怎么樣的?通過訪問www.huaweicloud.com來看看怎么給華為云的靜態頁面加速的。通過 dig 或者 host 命令,我們就能很方便地得到 DNS 服務器的返回結果(結果中頭 4 個 IP 的城市地址是我手工加入的,后面的其他記錄就不一個一個查了),如下所示:
- ~# dig www.huaweicloud.com
- ; <<>> DiG 9.10.6 <<>> www.huaweicloud.com
- ;; global options: +cmd
- ;; Got answer:
- ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59710
- ;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 0
- ;; QUESTION SECTION:
- ;www.huaweicloud.com. IN A
- ;; ANSWER SECTION:
- www.huaweicloud.com. 29 IN CNAME www.huaweicloud.com.cdn.dnsv1.com.
- www.huaweicloud.com.cdn.dnsv1.com. 29 IN CNAME cdn-koa8myv3.sched.s2.tdnsv5.com.
- cdn-koa8myv3.sched.s2.tdnsv5.com. 29 IN A 110.185.117.243
- cdn-koa8myv3.sched.s2.tdnsv5.com. 29 IN A 118.112.23.208
- cdn-koa8myv3.sched.s2.tdnsv5.com. 29 IN A 110.185.115.189
- cdn-koa8myv3.sched.s2.tdnsv5.com. 29 IN A 110.185.117.191
- cdn-koa8myv3.sched.s2.tdnsv5.com. 29 IN A 182.150.11.59
- ;; Query time: 3 msec
- ;; SERVER: 223.5.5.5#53(223.5.5.5)
- ;; WHEN: Fri Sep 17 11:03:53 CST 2021
- ;; MSG SIZE rcvd: 204
那么,根據這個解析信息,我們可以知道,DNS 服務為“www.huaweicloud.com”的查詢結果先返回了一個CNAME 記錄“www.huaweicloud.com.cdn.dnsv1.com”,服務器在遞歸查詢該 CNAME 時候,返回了另一個看起來更奇怪的 CNAME“cdn-koa8myv3.sched.s2.tdnsv5.com”。繼續查詢后,這個 CNAME 返回了幾個位于不同的 A 記錄。很明顯,這些 A 記錄就是分布在全國各地、存有本站緩存的 CDN 節點。由此,我們就能清晰地了解到 CDN 路由解析的具體工作過程了:
- 架設好“www.huaweicloud.com”的服務器后,將服務器的 IP 地址在你的 CDN 服務商上注冊為“源站”,注冊后你會得到一個 CNAME,也就是這個例子當中的“www.huaweicloud.com.cdn.dnsv1.com”。
- 接著,將得到的 CNAME 在你購買域名的 DNS 服務商上,注冊為一條 CNAME 記錄。
- 當第一位用戶來訪問你的站點時,會首先發生一次未命中緩存的 DNS 查詢,域名服務商解析出 CNAME 后,會返回給本地 DNS。到這里,后續的鏈路解析的主導權就開始由內容分發網絡的調度服務接管了。
- 本地 DNS 查詢 CNAME 時,由于能解析該 CNAME 的權威服務器,只有 CDN 服務商所架設的權威 DNS,這個 DNS 服務會根據一定的均衡策略和參數,比如拓撲結構、容量、時延等等,在全國各地能提供服務的 CDN 緩存節點中挑選一個最適合的,把它的 IP 替換成源站的 IP 地址,然后返回給本地 DNS。
- 瀏覽器從本地 DNS 拿到了 IP 地址后,就會把該 IP 當作源站服務器來進行訪問,此時該 IP 的 CDN 節點上可能有,也可能沒有緩存過源站的資源。最后,經過內容分發后的 CDN 節點,就有能力代替源站向用戶提供所請求的資源了。
cdn解析.png
內容存儲
“內容源的存儲”與“內容在 Cache節點中的存儲”
- 對于CDN系統而言,需要考慮兩個方面的內容存儲問題。一個是內容源的存儲,一個是內容在 Cache節點中的存儲。
- 對于內容源的存儲,由于內容的規模比較大(通常可以達到幾個甚至幾十個TB),而且內容的吞吐量較大,因此,通常采用海量存儲架構,如NAS和SON。對于在 Cache節點中的存儲,是 Cache設計的一個關鍵問題。需要考慮的因素包括功能和性能兩個方面:功能上包括對各種內容格式的支持,對部分緩存的支持;在性能上包括支持的容量、多文件吞吐率、可靠性、穩定性。
- 其中,多種內容格式的支持要求存儲系統根據不同文件格式的讀寫特點進行優化,以提高文件內容讀寫的效率。特別是對針對流媒體文件的讀寫。部分緩存能力指流媒體內容可以以不完整的方式存儲和讀取。部分緩存的需求來自用戶訪問行為的隨機性,因為許多用戶并不會完整地收看整個流媒體節目。事實上,許多用戶訪問單個流媒體節目的時間不超過10分鐘。因此,部分緩存能力能夠大大提高存儲空間的利用率,并有效提高用戶請求的響應時間。但是部分緩存可能導致內容的碎片問題,需要進行良好的設計和控制。
- Cache存儲的另一個重要因素是存儲的可靠性,目前,多數存儲系統都采用了獨立磁盤冗余陣列(RAID)技術進行可靠存儲。但是不同設備使用的RAID方式各有不同。
內容管理
“命中”和“回源”
這里就有兩個 CDN 的關鍵概念:“命中”和“回源”。
- “命中”就是指用戶訪問的資源恰好在緩存系統里,可以直接返回給用戶;“回源”則正相反,緩存里沒有,必須用代理的方式回到源站取。
- 相應地,也就有了兩個衡量 CDN 服務質量的指標:“命中率”和“回源率”。命中率就是命中次數與所有訪問次數之比,回源率是回源次數與所有訪問次數之比。顯然,好的 CDN 應該是命中率越高越好,回源率越低越好。現在的商業 CDN 命中率都在 90% 以上,相當于把源站的服務能力放大了 10 倍以上。
資源更新與失效
更令人感到無奈的是,由于大多數網站的開發和運維人員并不十分了解 HTTP 緩存機制,所以就導致了,如果 CDN 完全照著 HTTP Headers 來控制緩存失效和更新,效果反而會更差,而且還可能會引發其他的問題。所以,CDN 緩存的管理沒有通用的準則。現在,最常見的管理(更新)資源的做法是超時被動失效與手工主動失效相結合。超時失效是指給予緩存資源一定的生存期,超過了生存期就在下次請求時重新被動回源一次。而手工失效是指,CDN 服務商一般會給程序調用提供失效緩存的接口,在網站更新時,由持續集成的流水線自動調用該接口來實現緩存更新。
額外能力
高效的傳輸協議
- 不少 CDN 提供商都同時對接(代售 CA 的)SSL 證書服務,這樣就可以實現源站是 HTTP 協議的,而對外開放的網站是基于 HTTPS 的。
- 同理,這樣的做法也可以實現源站到 CDN 是 HTTP/1.x 協議,而 CDN 提供的外部服務是 HTTP/2 或 HTTP/3 協議;或者是實現源站是基于 IPv4 網絡的,CDN 提供的外部服務支持 IPv6 網絡,等等。
可靠的安全防護能力
CDN通過可靠的安全防護措施,幫助您規避業務上的安全風險。
- 防盜鏈:用戶可以選擇通用的Refer、UA、URL、IP等通用鑒權方式,也可以用EdgeScript來定制鑒權方式,以防止源站資源被盜用;支持遠程鑒權功能實現二次鑒權。
- DNS防劫持:HTTPDNS技術使用HTTP協議訪問的服務端,獲得域名解析結果,繞過運營商的Local DNS,避免域名劫持。
- HTTPS傳輸加密:支持采用TLS協議來加密HTTP協議內容,防止明文數據暴露在互聯網上,并且可以設置TLS1.3、HSTS、keyless等高級功能。
- 源站保護:CDN產品自身具備一定的安全防護能力,也可以配置SCDN產品來提供更強的安全防護能力。
總結
CDN 發展到現在已經有二十來年的歷史了,早期的 CDN 功能比較簡單,只能加速靜態資源。隨著這些年 Web 2.0、HTTPS、視頻、直播等新技術、新業務的崛起,它也在不斷進步,增加了很多的新功能,比如 SSL 加速、內容優化(數據壓縮、圖片格式轉換、視頻轉碼)、資源防盜鏈、WAF 安全防護等等。網站只安心生產優質的內容,其他的“雜事”都由它去代勞。
- 由于客觀地理距離的存在,直連網站訪問速度會很慢,所以就出現了 CDN;
- CDN 構建了全國、全球級別的專網,讓用戶就近訪問專網里的邊緣節點,降低了傳輸延遲,實現了網站加速;
- GSLB 是 CDN 的“大腦”,使用 DNS 負載均衡技術,智能調度邊緣節點提供服務;
- 緩存系統是 CDN 的“心臟”,使用 HTTP 緩存代理技術,緩存命中就返回給用戶,否則就要回源。
本文轉載自微信公眾號「運維開發故事」