本文是Web前端性能優化系列文章中的第二篇,主要講述CDN的原理及簡單應用。完整教程可查看:Web前端性能優化
基礎知識
服務器離用戶越近,HTTP請求的響應時間將更短。
CNAME:別名記錄,當多個域名需要指向同一服務器IP,可以使用一個域名做A記錄指向該服務器IP,然後讓多個域名指向該A記錄。
ICP:Internet Content Providor。
DNS:Domain Name System。
什麼是內容分發網絡?
CDN(Content Deliver Network)是一組分布在多個不同地理位置的Web服務器,通過將網站的資源發布到最接近用戶的網絡”邊緣“,供用戶就近取得所需內容。CDN可以看作一種緩存代理,主要用於對靜態資源(如圖片,css,js等)的緩存。
CDN的網絡架構
CDN的網絡架構主要分為中心和邊緣兩個部分,中心服務器主要負責DNS解析和全局負載均衡;而邊緣服務器指異地節點,作為CDN分發的載體,包括負載均衡和高速緩存。邊緣服務器的負載均衡負責緩存內容的負載均衡,保證節點的工作效率,同時還負責與中心服務器通信,實現整個系統的負載均衡。邊緣服務器的高速緩存負責存儲從客戶源服務器獲取的資源,並提供給本地用戶訪問。
CDN的工作原理
除了一些大型互聯網公司擁有自己的CDN,其他公司基本都會選擇CDN運營商合作。
所以作為ICP,需要把域名解釋權交給CDN運營商,操作時ICP修改自己的域名解析部分,一般用CNAME的方式,將自己的靜態資源域名指向一個CDN提供的CNAME。
而作為CDN運營商,需要對CNAME提供專用DNS解析,同時需要維護客戶服務器的域名和IP地址映射列表。
CDN工作流程如下:
1.浏覽器獲得需要訪問的資源的域名;
2.通過域名解析得到該域名指向CDN的一個CNAME;
3.為了獲得IP地址,需要對CNAME進行域名解析,這時請求就會被發送到CDN的中心服務器,全局負載均衡通過預先設定的規則,同時根據用戶訪問的地理位置信息,把最合適的邊緣服務器IP地址返回;
4.浏覽器獲得IP地址後,就向邊緣服務器發出請求;
5.邊緣服務器根據訪問域名,首先搜索緩存,查看資源是否存在,存在則直接返回資源給浏覽器,直接完成整個資源請求過程,否則就根據緩存內部的DNS解析得到資源實際IP地址(即客戶的服務器IP地址),向該IP地址發起資源請求;
6.邊緣服務器向客戶服務器請求資源成功後,就把該資源加入本身的高速緩存中,並把資源發送給用戶。
CDN的簡單應用
其實CDN的使用並沒有和我們想象中那麼遙遠,JQuery應該是當今Web開發領域使用最為廣泛的js框架之一,很多時候我們的網站都需要引用一個jquery.min.js的引用,我們可以將這個js文件存儲在自己的服務器,或者更好的選擇:使用大公司的CDN服務提供的jquery.min.js. 微軟和google都提供了jquery的CDN免費服務,你只需做的事情就是在項目中引用它們,就能享受CDN帶來的便利。