在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作為cacheGSLB暴露給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調度相結合的方式實現智能化調度。
推薦閱讀: