三种CDN调度系统实现原理详解
1. 調(diào)度系統(tǒng)是什么?
調(diào)度系統(tǒng)是指CDN廠家有能力通過(guò)各種機(jī)制將客戶域名的所有現(xiàn)網(wǎng)請(qǐng)求引導(dǎo)到合適的目標(biāo)機(jī)房,從而實(shí)現(xiàn)流量控制、質(zhì)量控制、成本控制以及故障處理。
2. 接入CDN的方式
在講解調(diào)度原理之前,我們先來(lái)看看客戶是怎么接入CDN的,或者說(shuō)客戶的流量是如何切往CDN的。(假設(shè)客戶的域名為:www.test.com,大概有以下幾種方式:)
【1】CNAME方式
CNAME方式是最常見的接入方式,即CDN廠家向客戶提供一個(gè)調(diào)度域名,客戶將自己業(yè)務(wù)域名的CNAME指向這個(gè)調(diào)度域名,從而實(shí)現(xiàn)將請(qǐng)求引導(dǎo)到CDN上來(lái)。
騰訊云向客戶提供的CDN是 $domain.cdn.dnsv1.com ,客戶的域名 www.test.com 如果需要將請(qǐng)求切到騰訊云CDN上,只需要將 www.test.com 的CNAME 設(shè)置為 www.test.com.cdn.dnsv1.com 即可。
CNAME方式的背后,又分為以下幾種模式:
01
CDN廠家提供基于DNS的調(diào)度,最終客戶的域名經(jīng)CDN的調(diào)度域名解析出CDN節(jié)點(diǎn)的IP。騰訊云CDN即采用這種模式。
02
CDN廠家提供基于302的調(diào)度,給的CNAME不是真正CDN節(jié)點(diǎn),而是一個(gè)調(diào)度集群,真正的CDN IP地址是通過(guò)在調(diào)度集群上向請(qǐng)求響應(yīng)302跳轉(zhuǎn)實(shí)現(xiàn)的。騰訊云為一些手機(jī)廠家的下載業(yè)務(wù)提供過(guò)這種模式
03
再有一種,是Anycast CDN。從DNS層面上看,CDN廠家提供給你的CNAME的解析結(jié)果只有全球固定的一兩個(gè)IP地址,不像方式1中不同地區(qū)的解析結(jié)果IP不同。這種場(chǎng)景下的流量調(diào)度,不是靠DNS解析,而是Anycast BGP路由的調(diào)整,通過(guò)調(diào)整Anycast的路由來(lái)調(diào)度各地區(qū)的流量到哪個(gè)機(jī)房。
【2】調(diào)度域名深度定制方式
這種模式主要是一些代理商客戶,即使用騰訊云CDN來(lái)接客戶,又想在DNS層面隱藏他們使用的CDN廠商。一般做法是客戶提供一個(gè)自己的域名比如:gslb.mycdn.com,騰訊云也提供一個(gè)中性的且不備案的平臺(tái)調(diào)度域名glsb.mycdn-platform.com。真正的客戶域名 www.test.com CNAME到 gslb.mycdn.com ,后者CNAME到騰訊云的調(diào)度域名 gslb.mycdn-platform.com。這樣整個(gè)解析環(huán)節(jié)都沒(méi)有騰訊云的痕跡。
【3】域名托管方式
這種模式不太常見。以域名 www.test.com 為例,如果客戶要將請(qǐng)求切往CDN,需要將 test.com 的NS記錄改為 CDN廠商提供的NS 權(quán)威服務(wù)器。這時(shí)CDN廠商同時(shí)擔(dān)當(dāng)了DNS服務(wù)商和CDN服務(wù)商的角色。
3. 調(diào)度形式詳解
| DNS調(diào)度 | 基于請(qǐng)求端local dns的出口IP歸屬地及運(yùn)營(yíng)商屬性的DNS調(diào)度 |
| 302調(diào)度 | 基于客戶端IP歸屬地及運(yùn)營(yíng)商屬性的302跳轉(zhuǎn)調(diào)度 |
| 路由調(diào)度 | 基于Anycast技術(shù)(BGP路由)的機(jī)房流量調(diào)度 |
【1】DNS調(diào)度
CDN的調(diào)度服務(wù)器是調(diào)度域名的NS權(quán)威服務(wù)器,調(diào)度域名的TTL被故意設(shè)置成很短(比如3分鐘),這樣所有請(qǐng)求都會(huì)較頻繁地觸發(fā)客戶端的local DNS重新到CDN調(diào)度服務(wù)器解析新的IP地址。此時(shí)CDN的調(diào)度服務(wù)器依據(jù)是local DNS的出口地址。DNS調(diào)度流程如下:
01
客戶端DNS TTL過(guò)期無(wú)首次訪問(wèn),向local DNS發(fā)起DNS查詢
02
local DNS在遞歸解析過(guò)程中,向CDN的調(diào)度服務(wù)器發(fā)起解析請(qǐng)求
03
CDN調(diào)度服務(wù)器可以看到local DNS的出口ip(有時(shí)還有基于EDNS的客戶端ip)
04
通過(guò)IP庫(kù)獲取上一步IP的地理及運(yùn)營(yíng)商屬性,從當(dāng)前調(diào)度域名的策略規(guī)則中匹配,同時(shí)結(jié)合其它的因素(比如質(zhì)量監(jiān)控、機(jī)房成本因素等)得到最佳的一組IP
以上是DNS調(diào)度的基本流程,下面將舉個(gè)實(shí)際場(chǎng)景中的例子:
| 測(cè)試機(jī)出口IP | 113.87.117.154 (中國(guó) 廣東 深圳 電信 中國(guó)電信);出口IP會(huì)變化,但大概率穩(wěn)定在深圳電信 |
| DNS服務(wù)器 | 202.96.134.133 / 202.96.128.166 (中國(guó) 廣東 深圳 電信 中國(guó)電信),中國(guó)電信DHCP自動(dòng)配置 |
| DNS出口地址 | 202.96.136.240 (中國(guó) 廣東 深圳 電信),多次測(cè)試結(jié)果會(huì)發(fā)生變化,但大概率穩(wěn)定在深圳電信 |
| 目標(biāo)域名解析 | p73.ping.dnsv1.com 的DNS解析情況如下:p73.ping.dnsv1.com;p73.ping.dnsv1.com.cdn.dnsv1.com;388957.p23.tc.cdntip.com;113.96.154.108 等十多個(gè)IP |
DNS調(diào)度原理
01
瀏覽器首次請(qǐng)求目標(biāo)URL,本地?zé)op73.ping.dnsv1.com 解析記錄,向DNS服務(wù)器(也稱為 local DNS)202.96.134.133發(fā)起查詢請(qǐng)求
02
202.96.134.133(此IP背后的真實(shí)服務(wù)器)若本地?zé)o緩存,發(fā)起遞歸解析,最終解析到388957.p23.tc.cdntip.com,解析請(qǐng)求被發(fā)往cdntip.com的權(quán)威服務(wù)器 ns-open3.qq.com
ns-open3.qq.com并非一臺(tái)實(shí)體服務(wù)器,而是網(wǎng)絡(luò)的虛擬IP,先避開復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),其背后有一臺(tái)或多臺(tái)真實(shí)DNS權(quán)威服務(wù)器(或集群),為描述方便假設(shè)其IP為10.1.1.1
03
10.1.1.1 目前有的信息包括域名 388957.p23.tc.cdntip.com、local DNS ip 202.96.136.240。如果local DNS支持EDNS,那此時(shí)還能看到客戶端IP 113.87.117.154。
有了以上3個(gè)信息,調(diào)度服務(wù)器,就能通過(guò)算法得出結(jié)果了
04
202.96.134.133 將IP結(jié)果返回給客戶端,瀏覽器按自己的策略從中選擇一個(gè)IP發(fā)起HTTP請(qǐng)求
DNS調(diào)度的優(yōu)缺點(diǎn):
| 缺點(diǎn) | 調(diào)度策略非實(shí)時(shí)生效(DNS是樹型分布式系統(tǒng),所有節(jié)點(diǎn)上都會(huì)按域名的TTL來(lái)做緩存) |
| 調(diào)度不夠精確(大量的local DNS不支持edns協(xié)議,拿不到客戶的真實(shí)IP,CDN絕大多數(shù)時(shí)候只能通過(guò)local DNS ip來(lái)做決策,而local DNS ip有時(shí)候不太靠譜) |
【2】302調(diào)度
先看下302模式下與前面的DNS調(diào)度有什么不同。
(http://p73.ping.dnsv1.com/a.php)
在DNS解析調(diào)度模式下,瀏覽器訪問(wèn)上面的URL時(shí),正常情況下會(huì)收到CDN節(jié)點(diǎn)的返回碼200和文件內(nèi)容,即DNS解析到的IP會(huì)直接做為文件服務(wù)器響應(yīng)瀏覽器請(qǐng)求。類似于:
HTTP/1.1 200 OK
Server: NWS_S1
Connection: keep-alive
Date: Sun, 11 Dec 2018 19:44:02 GMT
Transfer-Encoding: chunked
Keep-Alive: timeout=120
X-Daa-Tunnel: hop_count=2
X-NWS-LOG-UUID:750246221628030518 0be2170ce2df3d9f634cd70470120401
\r\r\r\n文件內(nèi)容
但在302跳轉(zhuǎn)模式下,上述URL的訪問(wèn),瀏覽會(huì)收到一個(gè)狀態(tài)碼為302的響應(yīng):
HTTP/1.1 302 Moved Temporarily
Server: stgw/1.3.6.2_1.13.5
Date: Sun, 16 Dec 2018 19:38:58 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive
Location: http://61.142.166.245/p73.ping.dnsv1.com/a.php
意思是告訴瀏覽器,你需要繼續(xù)訪問(wèn)Location中的URL去請(qǐng)求實(shí)際的文件內(nèi)容。所以瀏覽器又發(fā)起了第2次請(qǐng)求:
http://61.142.166.245/p73.ping.dnsv1.com/a.php
這個(gè)URL中的IP地址,就是CDN調(diào)度系統(tǒng)為我們分配的CDN節(jié)點(diǎn),我們來(lái)看這個(gè)IP是怎么拿到的。
域名解析的過(guò)程和基于DNS的調(diào)度一樣,最終都會(huì)拿到一組IP,目標(biāo)IP有兩種情況:
◎目標(biāo)IP并不是CDN的實(shí)際邊緣節(jié)點(diǎn),而是302調(diào)度集群的IP;
◎IP是CDN的普通邊緣節(jié)點(diǎn)IP
01
瀏覽器向第一次拿到的IP發(fā)起http請(qǐng)求
02
如果這個(gè)IP實(shí)際上是CDN的邊緣節(jié)點(diǎn),它會(huì)從本機(jī)的配置文件中讀取信息:
◎若請(qǐng)求Host不是IP,URL形式為:http://p73.ping.dnsv1.com/a.php,則將請(qǐng)求轉(zhuǎn)發(fā)到后端調(diào)度集群;
◎若請(qǐng)求Host為IP,URL形式為:http://61.142.166.245/p73,ping.dnsv1.com/a.php,則讀取緩存提供文件服務(wù)
03
此時(shí)請(qǐng)求到了調(diào)度群集上,我們能拿到的客戶端信息有客戶端的出口IP(絕大多情況下是相同的)
04
接下來(lái)算法和基于DNS的調(diào)度可以是一樣的,只是判斷依據(jù)由local DNS出口IP變成了客戶端的出口IP(調(diào)度集群畢竟不是CDN節(jié)點(diǎn),無(wú)法向客戶端提供實(shí)際的文件內(nèi)容,此時(shí)它只能通過(guò)302報(bào)文告知客戶端)
05
瀏覽器收到302回應(yīng),跟隨Location中的URL,繼續(xù)發(fā)起http請(qǐng)求,這次請(qǐng)求的目標(biāo)IP是CDN邊緣節(jié)點(diǎn),且Host是IP,CDN節(jié)點(diǎn)會(huì)響應(yīng)實(shí)際的文件內(nèi)容
302調(diào)度的優(yōu)缺點(diǎn):
| 準(zhǔn)確性高(可以拿到請(qǐng)求的出口IP,在不考慮NAT或小運(yùn)營(yíng)商出口飄移時(shí),客戶端歸屬地更貼近真實(shí)情況,不受用戶的DNS配置影響) | |
| 缺點(diǎn) | 業(yè)務(wù)兼容性(要求客戶業(yè)務(wù)的客戶端必須支持302跟隨,比如手機(jī)固定或應(yīng)用下載,如果下載客戶端不識(shí)別http 302響應(yīng)碼,那下載就會(huì)失敗) |
| 不適用于延時(shí)敏感業(yè)務(wù)(每個(gè)請(qǐng)求都會(huì)多出一次http交互,加載時(shí)間會(huì)成倍增加,對(duì)于web靜態(tài)小資源不合適) |
因此,302只適用于客戶端兼容性好的大文件下載業(yè)務(wù)哦~
實(shí)時(shí)調(diào)度的好處:
◎快速隔離故障設(shè)備
◎精確控制節(jié)點(diǎn)于機(jī)房的帶寬和資源負(fù)載
◎快速應(yīng)對(duì)業(yè)務(wù)突發(fā),尤其適合大文件加載類突發(fā)場(chǎng)景,例如:手機(jī)固件、游戲安裝包、大體積資源分發(fā)
【3】路由調(diào)度
Anycast路由技術(shù)使得物理分布在全球/全球不同區(qū)域的不同服務(wù)器具有相同的IP地址,客戶端對(duì)這個(gè)IP的請(qǐng)求會(huì)在路由層面引導(dǎo)到最近的物理服務(wù)器上。
Anycast BGP路由調(diào)度模式在表現(xiàn)形式上和DNS調(diào)度一樣:
◎業(yè)務(wù)域名通過(guò)CNAME解析到CDN的調(diào)度域名
◎CDN的調(diào)度域名解析出的IP即邊緣節(jié)點(diǎn)IP,請(qǐng)求不會(huì)發(fā)生302跳轉(zhuǎn)
但也有特殊之處:
◎解析結(jié)果的全球IP數(shù)量極少,通常只有1-2個(gè),或者一個(gè)大洲或大片區(qū)域1~2個(gè)
◎DNS的TTL通常極大,經(jīng)常配置成2小時(shí)甚至更長(zhǎng)
Anycast路由調(diào)度的優(yōu)缺點(diǎn):
| 比DNS抗干擾,比302兼容性好(在路由層面完成了就近接入CDN) | |
| 路由策略變動(dòng)生效時(shí)間快,優(yōu)于DNS調(diào)度 | |
| 受DDOS攻擊時(shí),只需調(diào)整路由,將攻擊流量引導(dǎo)到高帶寬清洗機(jī)房,無(wú)需從現(xiàn)網(wǎng)剔除IP | |
| 缺點(diǎn) | 方案復(fù)雜(全網(wǎng)網(wǎng)絡(luò)復(fù)雜,BGP路由優(yōu)化繁瑣,容易造成網(wǎng)絡(luò)不通,請(qǐng)求延時(shí)較長(zhǎng)) |
| 成本高(Anycast實(shí)施需要整個(gè)完整的IPC段,IP浪費(fèi)嚴(yán)重,為達(dá)到好的效果和扛攻擊,全球機(jī)房都要有足夠的帶寬) |
關(guān)注騰訊云CDN公眾號(hào),技術(shù)干貨一手掌握!
總結(jié)
以上是生活随笔為你收集整理的三种CDN调度系统实现原理详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IPv6下CDN和网络的最佳实践
- 下一篇: 应用于CDN的GSLB系统