標籤:

在CDN中,302調度和DNS調度的有什麼區別,各有什麼優劣勢?


一般是兩者結合,DNS做省市級別和跨運營商的調度, 302做基於內容和精確IP的精確調度

DNS的優點:

DNS系統是天然的分散式結構

客戶端本機,LDNS都可以實現cache,架構本身就能實現高的伸縮性和性能

---------------------------------------------------------

DNS的缺點:

DNS並不是為GSLB設計的

GSLB 基於 local DNS的地址判斷,粒度較粗。而且LDNS可能和end user網路距離很遠。

用戶可能會設置錯誤的Local DNS,該伺服器和用戶實際距離較遠,比如8.8.8.8等(edns-client-subnet可以部分解決該問題)

DNS請求裡面不會帶有內容信息,GSLB只能擁有LDNS ip信息,無法針對內容作出更加靈活的判斷

因為DNS reply TTL,所以某個用戶一段時間內的請求都會導向同一個site (解決:趨向於較短的TTL)

因為local dns緩存和TTL的存在,你很難判斷某次的返回會對負載有多大影響

某些Local DNS會忽略DNS TTL信息,而採用固定的TTL時間,對此我們無能為力

電信系統傾向於直接使用ip地址訪問,不使用域名

---------------------------------------------------------

302的優點:

可以直接得到end user ip和內容的地址,可以做出精確的redirect

每個請求都需要訪問GSLB,可以做出單獨的處理

可以在一個點方便的作出統計和認證

---------------------------------------------------------

302的缺點:

需要應用層協議支持(http / rtsp)

一般有重定向次數限制

GSLB需要處理較多的請求,卻沒有LDNS作為cache

GSLB暴露給end user , 容易遭受攻擊

用戶訪問GSLB本身就會帶來時延,可能深圳的用戶需要訪問北京的GSLB

單點故障(可以通過GSLB服務群集解決)

某些應用對URL變化敏感,比如WEB

某些客戶端支持不好(中文字符集等問題)


優勢和缺點大家都說過了,我說一下場景吧

dns 調度默認做了一個假設,即大家都使用localdns,localdns替你去訪問全局負載均衡,但dns 大多數情況下是不支持ip透傳的,只能根據查詢的源ip進行調度,所以當你使用了一個其他省市的dns很可能被調度到其他省市的節點。

假設你身在北京,使用了成都的dns,通常你的請求會被調度到了成都周邊的節點,但顯然從北京訪問成都的效果並不會特別的好,所以為了消除localdns調度帶來的偏差,會做一次重分配,通過你的接入ip判斷,哎呀這貨來自北京,我是成都唉,訪問我肯定慢啊,然他去訪問北京附近的節點吧,於是,產生了一個302調度。會給你一個北京附近的節點。

同時這裡也產生了一個問題,當一個文件比較小的時候一個302的延時甚至可能大於直接從一個較遠的節點獲取文集的延時,所以通常大文件會做302調度,具體判斷標準一般來說視頻壓縮包,默認就會被認為是大文件,即使他很小,因為是基於後綴判斷的。

還有一種情況也是會使用302的,比如北京附近一共有8個節點被劃為一組節點,但是面對動不動就是幾個G的視頻文件,為了節約資源,減少冗餘,通常只有少數節點會緩存該視頻,而dns通常會返回幾個可用的節點ip但是當訪問的節點不存在該視頻的時候,會產生一個302調轉,到一個存在該視頻的節點,這個是從提高設備利用率的角度去解釋302的合理性。


GitHub - dale-di/ipdispatch: 基於IP的調度器

一個開源的IP調度器,就是基於302的調度。qps能達到4萬。


DNS調度:性能好,但是害怕運營商劫持、害怕local dns不支持ecs,從而不能達到精準調度。

302跳轉:可以精準調度,但性能略差,如果是https,效果會更差。


302調度, 調度精確, 性能差

DNS調度, 調度精度差, 性能好

所以,一般CDN業務中,都會採用DNS 與 302調度相結合的方式實現智能化調度。


推薦閱讀:

TAG:互聯網 | CDN |