DNS在架構中的使用

Hello-Brand發表於2024-07-31

1 介紹

DNS(Domain Name System,域名系統)是一種服務,它是域名和IP地址相互對映的一個分散式資料庫,能夠使人更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP地址數串。
簡單來說,DNS就是一個將我們輸入的網址(比如www.baidu.com )轉換成對應的IP地址(比如192.0.2.1)的系統。這個過程是自動且透明的,使用者在瀏覽器中輸入網址後,瀏覽器會向DNS伺服器發起查詢請求,DNS伺服器會根據域名解析出對應的IP地址,然後瀏覽器再根據這個IP地址去訪問目標伺服器。

2 實現原理

DNS系統的工作原理大致如下:

2.1 遞迴查詢

當客戶端(如瀏覽器)需要解析一個域名時,它會首先向本地DNS伺服器(如ISP提供的DNS伺服器)發起查詢請求。如果本地DNS伺服器快取中沒有該域名的記錄,它會向根DNS伺服器發起查詢。根DNS伺服器會返回頂級域(TLD,如.com、.net等)的DNS伺服器地址。然後,本地DNS伺服器會向這些頂級域DNS伺服器發起查詢,頂級域DNS伺服器再返回下一級DNS伺服器的地址,直至找到最終的IP地址。這個過程中,本地DNS伺服器會遞迴地查詢,直到找到結果或確定查詢失敗。

image

遞迴查詢是由DNS伺服器主動幫主機查詢的查詢模式。‌

2.2 迭代查詢

與遞迴查詢不同,迭代查詢中,本地DNS伺服器在收到客戶端的查詢請求後,會向根DNS伺服器發起查詢,但根DNS伺服器不會直接返回IP地址,而是返回下一級DNS伺服器的地址。本地DNS伺服器會再次向這個地址發起查詢,以此類推,直到找到最終的IP地址。在這個過程中,每個DNS伺服器只負責返回下一級DNS伺服器的地址,而不是直接返回IP地址。

迭代查詢則是客戶端自己逐步查詢,‌直到獲得結果或遍歷所有可能的查詢途徑。‌

2.3 強大的域名解析能力

DNS不僅支援A記錄(將域名對映到IPv4地址),還支援AAAA記錄(將域名對映到IPv6地址)、CNAME記錄(別名記錄,將域名對映到另一個域名)、MX記錄(郵件交換記錄,指定處理該域名郵件的郵件伺服器)等多種記錄型別,以滿足不同的需求。

3 在網際網路架構中的作用

我們先看一個Http請求,從客戶端開始呼叫,到服務端響應,它的整個LifeCycle,以及DNS起到的作用
image
流程步驟如下:

  1. Client訪問域名 www.taobao.com 請求到 DNS 伺服器
  2. DNS伺服器返回域名對應的外網IP地址:10.88.0.1,這是代理服務Nginx的地址
  3. Client繼續訪問外網IP 10.88.0.1 向Nginx進行連結
  4. Nginx配置了n個Service(多副本模式)的內網IP,如 192.168.0.100、192.168.0.101、192.168.0.102
  5. Nginx的負載均衡透過流量排程策略(如 RR)對IP List進行輪詢
  6. 請求最終落到某一個Service進行處理,獲得計算結果

這是DNS最基本的能力,那除了DNS的A記錄解析,在網際網路架構中,他還有哪些貢獻?

3.1 反向代理和動態擴充套件

反向代理是一種位於伺服器和客戶端之間的代理伺服器。客戶端將請求傳送給反向代理,然後由代理伺服器根據一定的規則將請求轉發給後端伺服器。後端伺服器將響應返回給代理伺服器,再由代理伺服器將響應轉發給客戶端。 反向代理對客戶端是透明的,客戶端無需知道實際伺服器的地址,只需將反向代理當作目標伺服器一樣傳送請求就可以了。
使用者在Client只需要記住www.taobao.com,不需要知道他後面負載了多少真實的服務,這個就為擴充套件提供了很多便利,所以原來的架構可以最佳化為:

image

對同一個域名配置多個Nginx Service 的IP,每當DNS解析請求,RR輪詢返回不同的Nginx IP地址,實現動態擴充套件的能力。

3.2 負載均衡

DNS輪詢是一種簡單的負載均衡方法,透過改變DNS解析結果中的IP地址順序,將使用者請求分散到不同的伺服器上。我們的上圖中,Nginx承擔了這一層職責,我們可以嘗試免去Nginx後看看效果怎麼樣!

image

看著是去掉了一層網路請求,但是這種也存在一些問題。

  1. 無法實現智慧的負載均衡

這種技能支援簡單的輪詢,無法支援更智慧的 Weighted Round RobinIP HashLeast Connections等負載策略

  1. 無法實現探活和故障轉移

使用Nginx做反向代理時,可以對Service進行存活探測,當服務掛掉的時候,進行流量遷移,實現故障轉移和止損的目標。

3.3 智慧路由和加速

智慧DNS: 智慧DNS可以根據使用者的地理位置、網路狀況等因素,將使用者請求解析到最適合的伺服器上,從而提高訪問速度和使用者體驗。
CDN(內容分發網路): CDN利用DNS技術將使用者的請求解析到距離使用者最近的快取節點上,從而加快內容的傳輸速度,減少網路延遲。

如下圖,雖然潮州在廣東,但明顯離廈門更近,所以流量分發到廈門機房:
image

image

4 總結

  • 動態擴充套件反向代理層
  • 支援簡易輪詢模式的負載均衡,但是無法探活 和 Fail Over
  • 智慧Dns路由和CDN加速

相關文章