CDN 加速原理
熱衷京東平臺的朋友大部分是被他極致的物流體驗折服的,因為京東買東西經常第二天就到了,更有甚者上午買下午就到。而同樣知名的淘寶則很難做到這點,這是由于京東在全國的各個城市都有自己的倉庫系統,可以做到就近配送,而淘寶上都是獨立的商家,每件商品都得從原廠地發貨過來。CDN 全稱 Content Delivery Network 即內容分發網絡,它就類似京東的物流配送體系,通過智能分配算法,讓用戶最近最快速的獲取到他們想要訪問的資源。
1. 基礎原理
八秒定律是在互聯網領域存在的一個定律,即指用戶訪問一個網站時,如果等待網頁打開的時間超過八秒,會有超過 70% 的用戶放棄等待。而網絡環境越來越復雜,傳輸數據越來越豐富,對網站的訪問響應時間帶來了一個比較大的挑戰,CDN 就是誕生在這樣一個環境中,通過負載均衡算法,為請求提供最靠近的響應資源,達到網站的內容加速。
2. 系統架構
CDN 節點主要是分布在各省各城市的運營商機房里面,詳細的實現過程如下:
- 用戶請求一個域名地址;
- 瀏覽器對域名進行解析;
- 由于域名被 CDN 接管了,對域名的解析后只能獲取到 CNAME,CDN 就是借助 CNAME 將訪問的地址代理到對應的 CDN 服務器,而不是域名對應的原站;
- 瀏覽器通過 CNAME 獲取到最近的 CDN 服務器的 Ip 地址,然后直接訪問 CDN 緩存服務器;
- CDN 緩存服務器根據策略判斷請求的資源緩存里面有沒有,需不需要回原站更新,并將資源返回給用戶。
2.1 dig 命令
dig
是一個查詢 DNS 解析詳情的命令工具(在 window 的 cmd 終端或者Linux Shell 命令中執行),網宿科技是國內最大的 CDN 廠商,下面我們 dig
下網宿的官網看下解析詳情。
adeMacBook-Pro:~ zhourj$ dig www.wangsu.com
; <<>> DiG 9.10.6 <<>> www.wangsu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27326
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.wangsu.com. IN A
;; ANSWER SECTION:
www.wangsu.com. 2988 IN CNAME www.wangsu.com.wscdns.com.
www.wangsu.com.wscdns.com. 30 IN A 112.5.63.200
;; Query time: 20 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Wed Apr 01 10:15:00 CST 2020
;; MSG SIZE rcvd: 84
- 通過 dig 命令我們查詢到
www.wangsu.com
對應的 cname 是www.wangsu.com.wscdns.com
; - cname 對應的 A 記錄即 Ip 地址是
112.5.63.200
; - 所以最終是
112.5.63.200
這臺緩存服務器給我們提供了服務,它不止起到緩存加速的作用,還保護了原站的真實 Ip。
3. CDN 應用場景
3.1 網頁加速
網頁加速是最早期也是最普遍的 CDN 應用,主要 緩存(加速) 了靜態 Html,Js,Css 或者圖片等不變的資源。
3.2 流媒體加速
4G 的到來帶火了短視頻,流媒體這種資源對帶寬要求也是很高的,所以將一部分的媒體資源提前放置在 CDN 服務器也是很有必要的。
3.3 文件下載加速
冠狀病毒迫使企業和學生在家辦公和學習,釘釘的下載量暴增,我們能夠順利的從各個 APP 商店下載到,也是歸功于 CDN 的加速。提前把對應的安裝包放到了各個地方的近端的 CND 服務器。
3.4 邊緣計算
CDN 的發展不斷在變更,從早期的靜態內容,到后面的支持動態內容的加速,再到后面有了邊緣計算的概念(CDN 和邊緣計算是一種很好的結合,但是邊緣計算的概念不限于此)。
早期可能是簡單的把視頻內容緩存到 CDN 服務器,如借助邊緣計算可以實現在近端對視頻的壓縮和解壓縮等操作,就可以進一步降低傳輸到網絡帶寬,達到加速的目的。
3.5 網格化計算
通過智能的優化網絡傳輸路徑,達到加速。優化的方式主要有:
- 智能選擇最優傳輸路線;
- 借助 CDN 廠商的服務器資源,開辟私有的專線路線。
4. 小結
CDN 是一種提升網站響應速度的技術,主要是用了緩存的原理,將原站中的資源提前放置到了各個城市靠近當地用戶的某些節點服務器上面。實現上是借助了 DNS 的 Cname 技術,將原本要訪問的某個原站域名,重定向到另一個靠近的 CDN 節點上面。