輕鬆應對雙十一零點的DNS流量洪峰

ifghd發表於2017-09-20

首次披露阿里巴巴DNS系統遇到的極端挑戰。

    每年雙十一,對阿里巴巴的各種技術都是一個挑戰。DNS也不例外。

    DNS協議從最早的hosts檔案,到RFC 1034、RFC 1035把DNS協議標準化,已經有四十年的歷史了,是TCP/IP協議族中最古老的協議之一。到現在為止,有上百篇RFC對DNS進行了各種擴充和加固。使得DNS成為最常用,最不可缺少的網際網路基礎設施之一。大多數網路程式啟動後,發出的第一個資料包即是gethostbyname()呼叫產生的DNS請求包。因為網路上的程式通訊,早已拋棄了通過IP直連的方式,轉而由域名相互呼叫。好處很多:方便除錯、維護,易於人類理解。在IPv6網路中,更難以直接引用IP地址,必須轉化成簡單易讀的域名形式。

    在DNS系統中,主要角色有:DNS解析器、遞迴DNS、權威DNS。DNS解析器是Windows、Linux上的一段DNS程式碼,也就是glibc對gethostbyname()實現,作用是接收上層應用的呼叫,在網路上發出一個DNS請求包,接收應答,提取解析結果返回給上層應用。

未命名.png

    遞迴DNS部署在離PC機、伺服器很近的網路位置。遞迴DNS的服務IP是Windows配置的DNS伺服器IP、Linux的/etc/resolv.conf中的NS IP。遞迴DNS接收DNS解析器發來的請求,去各級權威DNS做遞迴請求。遞迴DNS會把遞迴結果快取在本地,下次收到同樣的請求,就不再去遞迴了。遞迴DNS本身是一個快取,不儲存權威的資料。

    權威DNS儲存了域名和IP的對應關係,由根到各種頂級域,一級級授權。例如根的權威DNS儲存了.com .net .cn等等各個頂級域的權威DNS的IP。.com的權威DNS儲存了taobao.com.的權威DNS的IP。www.taobao.com.的域名和IP地址的對應關係,就存在taobao.com.的權威DNS伺服器。遞迴DNS一級級查詢,從taobao.com.的權威DNS拿到www.taobao.com.的IP,返回給使用者。

    從以上系統能看出來,複雜、耗時的遞迴邏輯由遞迴DNS完成,DNS客戶端只是簡單的發出DNS請求。DNS系統把複雜的邏輯包裹在系統內,對使用者提供了簡單清晰的邏輯。遞迴DNS是對使用者提供服務的視窗,也是請求壓力非常大的一個模組。在阿里巴巴內網,由於以下幾個原因,遞迴DNS收到的請求的qps非常高。

  1. 各種良莠不齊的應用程式碼產生的大量無效DNS請求
  2. 各個業務方的壓力測試帶來的突發DNS請求
  3. 低版本OS/glibc帶來的多餘的主機名正反解請求
  4. 海量伺服器帶來的DNS請求,積少成多,匯聚到DNS伺服器成為巨大的流量
  5. DNS攻擊,這裡具體指標對遞迴DNS、權威DNS的攻擊

雙十一的DNS技術挑戰
    集團內部各個系統間的呼叫,是通過域名呼叫,而不是IP。一次淘寶天貓網頁的點選,從多臺伺服器發出幾十個DNS請求到DNS伺服器。每年雙十一零點時,海量的使用者請求來到阿里巴巴網路內部,一石激起千層浪,阿里內部各個系統被啟用,海量的相互呼叫導致了DNS請求的峰值。為了應對這麼大量的DNS請求,傳統的堆機器的方式已不再有效。

    在雙十一零點峰值場景下,遞迴DNS的流量是平常的許多倍。而權威DNS的流量上漲不如遞迴DNS明顯。因為在雙十一時,被請求量很大的都是重複的域名。一個使用者的購買請求,可能觸發A、B……Z系統間相互呼叫。另一個購買請求還是會請求這幾個域名。這就使得遞迴DNS的快取命中率很高,請求不會到權威DNS。

    導致這麼多的DNS請求的原因除了雙十一,還有作業系統的域名機制的原因。

    Windows作業系統自身提供了DNS快取功能,通過ipconfig /displaydns可以檢視系統當前快取。Linux預設是沒有DNS快取的,但有類似於Windows下的DNS快取軟體nscd。只要啟動了nscd服務,就能使用DNS快取。一般Linux本機是不做DNS快取的。如果Linux本地快取了DNS,一旦這個域名對應的IP失效或變更了,本地應用程式就無法立即感知到變化,導致故障。
除了作業系統的快取之外,應用本身一般也會設計DNS快取以實現效率的最大化,以JVM為例,JVM對於正常域名的快取為30秒。

    還有一個較大的問題。很多系統使用DNS實現負載均衡,一個域名配置了多個IP。gethostbyname()返回給上層應用的,是第一個IP。這要求遞迴DNS將多條IP的順序打亂,隨機返回。如果不同IP對應的叢集服務能力不同,還需要遞迴DNS按照權重返回IP。

阿里巴巴的自研DNS解決方案
    阿里巴巴DNS團隊自研了一套DNS系統——DNS Mega,輕鬆應對雙十一零點的DNS流量洪峰。

    DNS Mega是一套遞迴DNS系統,可以應對大流量的DNS請求。使用單臺物理伺服器,即可獲得非常高的QPS能力。以往需要水平擴充套件伺服器臺數,以提高DNS的系統容量,這種方式比較原始,擴容縮容都很慢。有了DNS Mega,一套叢集裡只需要部署不多的幾臺伺服器,即可滿足大量業務伺服器的DNS需求。DNS Mega在域名快取即將過期時,會重新請求這個域名,使得DNS Mega系統中的域名始終反應權威DNS的最新狀態。

    在應對DNS攻擊方面,DNS Mega有一套獨特的邏輯。針對遞迴DNS比較多的攻擊是泛域名攻擊,也就是請求a.taobao.com b.taobao.com。字首不斷變化的域名請求。一般的遞迴DNS系統,收到這些請求都不會命中快取,會到權威DNS遞迴。佔用大量的遞迴DNS資源。DNS Mega能區分出正常請求和攻擊請求,將更多的資源分配給正常請求。

    值得高興的是,包括DNS Mega在內的阿里公共DNS,已經對廣大網際網路使用者提供服務了。PC、移動裝置、伺服器等各種終端,都可以免費使用阿里公共DNS。使用者只需要把本機的DNS地址設定成223.5.5.5和223.6.6.6,即可用到完全免費、快速的公共DNS服務。

     想更深入的瞭解阿里巴巴的DNS系統嗎?2017年10月13日上午,杭州雲棲小鎮,雲棲大會DNS專場。我們等你!


相關文章