輕鬆應對雙十一零點的DNS流量洪峰
首次披露阿里巴巴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請求包,接收應答,提取解析結果返回給上層應用。
遞迴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非常高。
- 各種良莠不齊的應用程式碼產生的大量無效DNS請求
- 各個業務方的壓力測試帶來的突發DNS請求
- 低版本OS/glibc帶來的多餘的主機名正反解請求
- 海量伺服器帶來的DNS請求,積少成多,匯聚到DNS伺服器成為巨大的流量
- 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專場。我們等你!
相關文章
- 訊息佇列RocketMQ應對雙十一流量洪峰的“六大武器”佇列MQ
- 看CDN/DCDN/GA技術如何應對流量洪峰
- ALB Ingress 釋出!輕鬆應對雲原生應用流量管理
- 微服務治理之如何優雅應對突發流量洪峰微服務
- 併發效能提升4倍!雲帳房用 Serverless 輕鬆應對瞬時業務洪峰Server
- 虛擬節點輕鬆應對 LOL S11 百萬併發流量——騰競體育的彈性容器實踐
- 如何輕鬆應對偶發異常
- 如何把 ThinkPHP 5 的專案遷移到阿里雲函式計算來應對流量洪峰?PHP阿里函式
- 如何把thinkphp5的專案遷移到阿里雲函式計算來應對流量洪峰?PHP阿里函式
- ELB Ingress閘道器助力雲原生應用輕鬆管理流量
- 阿里雲 MSE 雲原生閘道器助力斯凱奇輕鬆應對雙 11 大促阿里
- JNPF讓你輕鬆點亮報表應用技能
- 面對流量洪峰,Kafka如何保證資料安全和系統的高吞吐量?Kafka
- OceanBase X 成都有惠 | 扛住資料流量洪峰,找對 CP 是關鍵!
- 注意這幾點,輕輕鬆鬆配置 Nginx + Tomcat 的叢集和負載均衡NginxTomcat負載
- DNS解析不生效原因及應對措施大盤點DNS
- DNS攻擊型別及應對措施大盤點DNS型別
- MongoDB系列--輕鬆應對面試中遇到的MongonDB索引(index)問題MongoDB面試索引Index
- 節省50%成本!京東雲自研計算架構京剛+雲海輕鬆應對11.11萬億級流量架構
- 如何排查DNS解析出錯?這四步輕鬆搞定DNS
- 從步履蹣跚到舉重若輕,阿里基礎架構如何扛住全球最猛的流量洪峰?阿里架構
- 使用“微服務+雲架構”輕鬆應對系統擴容!微服務架構
- JAVA架構-使用redis叢集輕鬆應對大併發Java架構Redis
- 什麼是DNS劫持?如何應對DNS劫持?DNS
- 輕鬆搭建基於 Serverless 的 ThinkPHP 應用ServerPHP
- 提升專案管理效率,輕鬆應對挑戰——OmniPlan Pro 4 for Mac專案管理Mac
- 輕鬆部署 Laravel 應用 | 《09. 手動部署 - 配置 Nginx 站點》LaravelNginx
- 使用 `useAppConfig` :輕鬆管理應用配置APP
- 輕鬆部署 Laravel 應用 | 《開篇》Laravel
- Mapbox 輕鬆規劃起始點軌跡
- 使用 CoreDNS 來應對 DNS 汙染DNS
- 微信流量如何獲取,簡單一招輕鬆搞定!
- 徹底搞懂Redis持久化機制,輕鬆應對工作面試Redis持久化面試
- 海量圖片儲存,杉巖分散式物件儲存輕鬆應對分散式物件
- 防護ddos無從下手?瞭解ddos原理輕鬆應對危機
- mysql 的這個痛點,用 elasticsearch 輕鬆解決MySqlElasticsearch
- 輕鬆應對百萬併發的Nginx是怎麼處理這些網路事件的?Nginx事件
- CentOS7 輕鬆部署 Laravel 應用CentOSLaravel
- 找對方法,輕鬆擊垮挖礦病毒