除了功能變數名稱解析,DNS 在架構設計中的三大妙用!

2025.03.14

一般來說,DNS有什麼用?

如上圖所示,DNS一般用作功能變數名稱解析,將域名轉化為NG的外網IP,以便於NG將HTTP請求路由給內網的web-server集群。

在架構設計的過程中,DNS還有其他用途嗎?

至少還能幹這三件事。

其一:使用者就近訪問。

通過智慧DNS技術,可以很容易的實現,使用者對所需資源的就近訪問。

如上圖所示,不同使用者訪問同一個資源:

  • 電信使用者,DNS可以返回電信機房的IP;
  • 聯通使用者,DNS可以返回聯通機房的IP;
  • 教育網使用者,DNS可以返回教育網機房的IP;

如此一來,所用使用者的訪問速度都會加快。

智慧DNS技術是CDN以及多機房多活架構中必不可少的部分。

其二:反向代理的水平擴展。

在第3集《延時與輸送量》的視頻中曾經留了一個尾巴:

說Nginx一般是系統的入口,假如Nginx的輸送量是10W次每秒,google首頁的Nginx,要如何抗住100W次每秒的併發呢?

有小夥伴說LVS,有小夥伴說F5,都沒錯,但這兩種本質上都是scale up方案,性能總有極限,治標不治本。

scale out方案的正解方案是:DNS輪詢。

如上圖所示,在DNS側,對於同一個功能變數名稱配置多個nginx的外網ip,每次DNS解析功能變數名稱請求,輪詢返回不同的ip,這樣就能實現nginx的水準擴展,達到:1台NG抗10W吞吐,10台NG抗100W吞吐的目的。

其三:web-server的負載均衡。

在反向代理技術出現之前,可以藉助“DNS輪詢”的功能,將流量均勻分配到不同的web-server上去。 這個方案的好處是架構少了一層網路請求,壞處是“DNS輪詢”並不能保障後端web-server的可用性。

而反向代理除了能保證負載均衡,同時還兼具保活探測的能力,故在反向代理技術出現后,就不用DNS輪詢來做負載均衡了。

稍作總結,在架構設計過程中,DNS除了解析功能變數名稱,還可以:

  • 其一,智慧DNS,根據使用者ip來就近訪問伺服器;
  • 其二,DNS輪詢,水平擴展反向代理層;
  • 其三,利用DNS實施負載均衡;

知其然,知其所以然。

思路比結論更重要。