CDN 即內容分發網絡(Content Delivery Network)的簡稱,是創建在承載網基礎上的虛擬分佈式網絡,可以將源站內容(包括各種動靜態資源)智能緩存到全球各節點服務器上。這樣不只方便了用戶就近獲取內容,提升了資源的訪問速度,也分擔了源站壓力。html
DNS ( Domain Name System,域名系統)提供了將域名轉換爲 IP 地址的服務。爲了完成這個轉化工做,DNS 的數據庫中須要維護相關的數據,這些數據被叫作 RR(Resource Record,資源記錄)。資源記錄有不少種類型,好比 A、NS、SOA、CNAME 和 PTR 記錄。數據庫
你們接觸最多的就是 A(Address)記錄。A 記錄是一條從域名到 IP 地址的映射記錄。而 CNAME(Canonical Name)記錄是一條從域名到域名的映射記錄。它在 CDN 技術中有舉足輕重的做用,很好地實現了業務域名與 CDN 系統域名的解耦。簡單理解,若是一個域名配置了 A 記錄,DNS 就會把它解析成 A 記錄指定的 IP 地址;若是一個域名配置了 CNAME 記錄,DNS 就會把它解析成 CNAME 記錄指定的另一個域名;A 記錄和 CNAME 記錄是互斥的,不能同時存在。緩存
NS (Name Server)記錄是和 DNS 服務器相關的一條記錄,它指定該域名應該由哪一臺 DNS 服務器進行解析。通常把經過 NS 記錄指定的 DNS 服務器叫作該域名的權威 DNS 服務器。服務器
加速域名指須要使用 CDN 加速的域名。加速域名也是一個域名。加速域名通常配置 CNAME 記錄,指向 CDN 網絡節點。普通域名通常配置 A 記錄,指向提供服務的業務服務器。markdown
提供原始資源(使用 CDN 加速的資源)的業務服務器,能夠指定爲域名或 IP 地址。網絡
CDN 節點未緩存資源,或者緩存資源已過時時,回到源站獲取資源,返回給客戶端。架構
假設我創建了一個網站,域名爲 www.tt.com
,用戶訪問的主頁連接爲 www.tt.com/idx.html
。爲了緩解服務端壓力和加快訪問速度,決定使用阿里雲 CDN
服務。 爲了更好地理解工做原理,先了解一下 CDN 的接入流程。負載均衡
主要接入步驟以下:分佈式
js.tt.com
。js.tt.com
,同時設置其源站域名爲 www.tt.com
。CNAME
域名:js.tt.com.ali.com
。js.tt.com
添加 CNAME
記錄,其值爲上一步獲得的 CNAME
域名:js.tt.com.ali.com
。對以上步驟作進一步說明:網站
CNAME
記錄,值爲 CDN 平臺提供的 CNAME
域名,該 CNAME
域名指向 CDN 系統節點。從功能上看,典型的 CDN 系統由分發服務系統、負載均衡系統和運營管理系統組成。分發服務系統主要負責資源的響應、緩存和同步。負載均衡系統主要負責對用戶請求進行調度。運營管理系統則負責運營需求管理和網絡系統管理。
從節點分佈上看,CDN 系統主要分爲 邊緣層 和 中心層。邊緣層分佈在 CDN 網絡的邊緣位置,給用戶提供就近訪問服務。中心層則負責完成資源同步和運營管理等功能。中心層保存了加速域名的相關配置信息,好比源站域名,也緩存了加速域名下的各類資源。在邊緣層節點未命中緩存時,須要向中心層節點發起請求;而中心層節點未能命中緩存時,須要查找對應的源站域名,並向該源站域名發起請求。而後再逐層返回並緩存用戶請求的資源。
用戶 A 的第一次訪問流程以下圖所示:
js.tt.com/idx.html
。用戶 A 第二次訪問流程如圖 2 所示:
須要進一步說明的是:
用戶 B 第一次訪問流程如圖 3 所示:
須要進一步說明的是:
CDN 系統是如何實現就近訪問的呢?
CNAME
域名是 CDN 供應商提供的,CDN 供應商擁有對 CNAME
域名的配置權。CDN 供應商會把 CNAME
域名的 NS 記錄設置爲本身搭建的 DNS
服務器。這樣一來,解析 CNAME
域名的時候就會請求 CDN
供應商搭建的 DNS
服務器。而 CDN
供應商在 DNS
服務器中實現了負載均衡,會返回離用戶較近的邊緣層節點的 IP 地址。如此便實現了就近訪問。 在圖 1 中,第 4 步是向阿里雲 DNS
服務器查詢的,該 DNS
服務器會根據地理位置和健康狀態等信息返回多個較近的可用的 CDN
邊緣節點的 IP 地址。DNS
客戶端會選擇其中一個 IP
地址做爲解析結果,通常是第一個。