2011-04-30 81 views
2

在亞馬遜失敗並閱讀了許多關於實踐中冗餘/分佈式方法的文章之後,DNS似乎成了一個弱點。例如,如果將DNS設置爲數據中心之間的循環,並且其中一個數據中心出現故障,則似乎許多瀏覽器都會緩存該DNS並繼續點擊失敗的節點。當頁面加載失敗時,瀏覽器是否重新嘗試DNS?

我明白生存時間(TTL),但當然這可能會設置很長一段時間。

所以我的問題是,如果瀏覽器沒有得到來自IP的響應,是否足夠聰明地刷新DNS,希望被路由到另一個節點?

回答

1

循環法DNS是一個瀏覽器的東西。 This is how mozilla does it

單個主機名可能會解決多個IP地址,每個存儲在 主機實體成功後,查找返回。 Netlib保留dns服務器返回IP地址的順序。如果在連接期間的任何時候,當前用於主機名稱的IP地址 失敗,netlib將使用存儲在主機實體 中的下一個IP地址。如果那個失敗了,下一個被查詢,依此類推。這個通過 可用的IP地址的進展是在NET_FinishConnect()函數中完成的。在url加載 被認爲是完整的,因爲它的連接發生了犯規,它的主機實體被諮詢到 確定是否應該爲給定主機嘗試另一個ip地址。一旦IP地址失敗,它就會出現,從緩存中的主機實體中刪除。如果 中的所有IP地址主機實體出現故障,則netlib會發出「服務器未響應」錯誤,以備份呼叫 鏈。

至於亞馬遜的失敗,在亞馬遜的宕機期間DNS沒有任何問題。 DNS服務器正確報告了IP地址,瀏覽器使用了這些IP地址。這個問題在亞馬遜一邊。他們將流量重新路由到一個不堪重負的集羣。 DNS已經無法使用,但集羣本身無法處理巨大的流量負載。

Amazon says it best themself

EC2提供了兩個非常重要的可用性積木:地區和可用性 區。按照設計,Regions是完全獨立的基礎設施部署。 區域彼此完全隔離,並提供最高程度的獨立性。許多用戶使用多個EC2區域來實現極高的容錯水平。但是,如果您要在區域之間移動數據,則需要通過您的應用程序執行此操作,因爲我們不代表用戶之間在區域之間複製任何數據。

換句話說,「記得我們告訴過你的所有高可用性嗎?是的,這真的取決於你。」由於他們自己的笨拙,他們拿出了集羣中的主要節點和次要節點,並且沒有什麼可以故障轉移到。然後,當他們把這一切都帶回來時,隨着節點試圖同步同步,突然出現「重新映射風暴」,導致更多的拒絕服務。 DNS與它沒有任何關係。

相關問題