Anycast
AliDNS(www.alidns.com) 近期上線??吹酵抡f更換 local DNS 后,訪問淘寶明顯快了。以我當前的理解能力,認為無非是快在 DNS 解析這一步上,縮短的時間應該在毫秒級別,而 瀏覽器 與 淘寶 集群之間的延時應該不會有變化。但試了后,果然明顯感覺變快了。好奇心驅使,學習了下 Anycast 技術。當然,AliDNS 還采用了集群緩存共享的設計(memcached or tair) 以減少 cache miss,能縮短 IP 解析的延時,這也是訪問變快的原因之一。
學習 IPv4 的時候接觸過 Unicast 和 Multicast(這個好理解),而學習 IPv6 的時候多了個 Anycast 的概念,但說實話,當時并沒有真正理解啥叫 Anycast。好吧,不管怎樣,概念性的東西先來上一段。
“在 IP 網絡上,通過一個 Anycast 地址標識一組提供特定服務的主機,同時服務訪問方并不關心提供服務的具體是哪一臺主機(比如 DNS 或者鏡像服務),訪問該地址的報文可以被 IP 網絡路由到這一組目標中的任何一臺主機上,它提供的是一種無狀態的、盡力而為的服務。”
如果上面這段話需要看兩遍以上才能理解,那我可以說得簡單一點,比如說 VIP。VIP 集群內是一組“提供特定服務的主機”,瀏覽器并不關心具體是哪臺服務器在提供服務,報文被 LB 設備分發到其中某一臺服務器上(對應:報文可以被 IP 網絡路由到這一組目標中的任何一臺主機上)。
不同點有2:
1. VIP 依靠 LB 設備實現分發,Anycast 依靠路由器
2. VIP 帶狀態,同一個連接必須分發到同一臺后端服務器,而路由器目前無法做到,所以僅適合 DNS 這類無狀態的協議
正是因為依靠路由器就能實現 Anycast,所以無需購買額外的硬件設備。但是玩過 Anycast 的人很少,是因為Anycast 必須配合 BGP,而有能力玩 BGP 的可都是高富帥??!
既然在玩 BGP,那就肯定有多個 AS。在每個 AS 內部署相同的集群,對外提供相同的服務,且各個 AS 對外宣告相同的 IP。如此配置之后,用戶就會優先訪問離自己路由最近的節點。之前必須到 3 個路口之外的店里買水果,現在變成了每個路口都有一個一模一樣的水果店,能不快嗎?
當然,回到 AliDNS,使用 Anycast 僅能確保用戶找到最近的 DNS 服務器,再加上集群緩存共享的因素,無疑會縮短了 DNS 解析的延時,但并不能確保訪問 淘寶 變快。實際上,這里有另外一段邏輯:
1. 一級 cache 集群由對外做 Anycast 發布一對vip(這里是223.5.5.5 和223.6.6.6),用戶配置此 vip 為自己的 local dns 服務器。
2. 一級 cache 得到用戶請求后,先從自己的內存里面查看是否有結果,如果沒有則將請求按照用戶所屬網絡運營商類別,將請求轉發到該運營商網絡的二級 cache 服務器集群的 vip 上。
3. 接下來二級 cache 服務器在自己所在集群中查找是否已經緩存結果,如果整個二級 cache 服集群都沒有有效的緩存結果,則由此 cache DNS 服務器發起遞歸請求,等到結果返回后,存入此二級 cache 集群里面,由于此 cache dns 和用戶屬于同一個運營商,從而得到的結果是 CDN 友好的結果,然后此結果返回給一級 cache dns,一級 cache dns 進行本機緩存后再返回給客戶端,客戶端就得到了cdn 友好的結果。
http://www.alidns.com/tech/ali-pub-dns-introl.html
因此,關鍵的原因,在于得到了 CDN 友好的 IP。
再補充一些 Anycast 的優缺點:
1. Anycast 地址不能作為源地址。顯然,不能保證回復報文能原路返回。
2. 安全性問題,非法服務器可以使用假的 Anycast 地址聲明服務,而實際上并不提供服務,也就造成了 DOS。
優點:
1. DDOS。當某個 AS 提供的服務被***時,路由器可以將報文路由到其它的 AS 上。
2. 故障 or 網絡擁塞。同上。
不過我的疑問是,路由器如何得知服務出現異常? LB 設備都有的健康檢查服務,難道路由器上也有?
補充 Anycast 的實現:
轉載于:https://blog.51cto.com/wilber1202/1424134
總結
 
                            
                        - 上一篇: 关于SAP CRM中间件系统搭建中遇到的
- 下一篇: 让图片居中的css_css 图片居中(怎
