網絡協議 16 - DNS 協議:網絡世界的地址簿

【前五篇】系列文章傳送門:html

  1. 網絡協議 11 - Socket 編程(下):眼見爲實耳聽爲虛
  2. 網絡協議 12 - HTTP 協議:經常使用而不簡單
  3. 網絡協議 13 - HTTPS 協議:加密路上無盡頭
  4. 網絡協議 14 - 流媒體協議:要說愛你不容易
  5. 網絡協議 15 - DNS 協議:網絡世界的地址簿

    爲何在地址欄輸入域名,就能直接訪問到對應服務器?全局負載均衡和內部負載均衡又是什麼?這些都和 DNS 解析息息相關,讓咱們一塊兒來解密 DNS 解析。數據庫

    其實提及 DNS 解析,應該都知道它很像地址簿。就像咱們去一家新開的沃爾瑪超市,經過地址簿查出來沃爾瑪在哪條路多少號,而後再去找。編程

    在網絡世界中,也是這樣的。咱們能夠記住網站的名稱,可是很難記住網站的 IP 地址,所以須要一個「地址簿」,幫咱們將網站名稱轉換成 IP。這個「地址簿」就是 DNS 服務器緩存

DNS 服務器

    對於 DNS 服務器而言,全球每一個人上網,都須要訪問它。     而全球的網民數,據最新統計,已經有 40 億,每一個人都訪問它,可想而知 DNS 服務器會有很大的訪問流量壓力(高併發)。     並且,它還很是重要,一旦出了故障,整個互聯網都將癱瘓(高可用)。     此外,上網的人分佈在全世界各地,若是你們都去同一個地方的某一臺服務器,時延將會很是的(分佈式)。服務器

    所以,DNS 服務器必定要具有高可用、高併發、分佈式的特色。網絡

    基於此,DNS 服務器設計成樹狀的層次結構。以下圖:併發

  • 根 DNS 服務器:返回頂級域 DNS 服務器的 IP 地址;
  • 頂級域 DNS 服務器:返回權威 DNS 服務器的 IP 地址;
  • 權威 DNS 服務器:返回相應主機的 IP 地址。

DNS 解析流程

    上面說了 DNS 服務器面臨大流量訪問的壓力,所以,爲了提升 DNS 的解析性能,不少網站都會就近部署 DNS 緩存服務器。因此,咱們常見的 DNS 解析流程就變成了:負載均衡

  1. 客戶端發出 DNS 請求給本地域名服務器。咱們訪問博客園,客戶端會問本地域名服務器, www.cnblogs.com 的 IP 是什麼?(本地域名服務器,若是網絡是經過 DHCP 配置,本地 DNS 是由你的網絡服務商,如電信、聯通等自動分配,它一般就在網絡服務商的機房裏);
  2. 本地 DNS 收到來自客戶端的請求,查找「地址簿」,返回 IP 或請求根域名服務器。咱們能夠理解爲服務器上緩存了一張域名與 IP 對應的大表,若是能找到 www.cnblogs.com,就直接返回對應的 IP 地址。若是沒有找到,本地 DNS 會去問它的根域名服務器;
  3. 根 DNS 收到來自本地 DNS 的請求,返回 .com 對應的頂級域名服務器的地址。根域名服務器是最高層次的,全球共有 13 套,它不直接用於域名解析,而是指明怎樣去查找對應 IP。它發現請求的域名後綴是 .com,就會返回 .com 對應的頂級域名服務器的地址;
  4. 本地 DNS 服務器收到頂級 DNS 服務器地址,請求頂級 DNS 服務器查詢域名 IP
  5. 頂級 DNS 服務器返回權威 DNS 服務器地址。頂級域名服務器就是大名鼎鼎的,負責 .com、.net、.org 這些二級域名,好比 cnblogs.com,它會返回對應的權威 DNS 服務器地址;
  6. 本地 DNS 服務器收到權威 DNS 服務器地址,請求權威 DNS 服務器查詢域名 IP。而 cnblogs.com 的權威 DNS 服務器就是域名解析結果的原出處;
  7. 權威 DNS 服務器返回對應 IP。權威 DNS 服務器查詢「地址簿」,獲取到域名對應 IP 地址,返回給本地 DNS 服務器;
  8. 本地 DNS 服務器收到 IP,返回給客戶端
  9. 客戶端與目標創建鏈接

    至此,咱們完成了 DNS 的解析過程,整個過程以下圖:分佈式

負載均衡

    站在客戶端角度,上述過程是一次 DNS 遞歸查詢過程。由於本地 DNS 全權爲它代勞,它只要坐等結果就行了。在這個過程當中,DNS 除了能夠經過名稱映射爲 IP 地址外,它還能夠作另一件很重要的事 - 負載均衡高併發

    仍是拿咱們逛沃爾瑪超市爲例。它可能在一個城市裏會有多家店,咱們要逛沃爾瑪,能夠就近找一家,而不用都去同一家,這就是負載均衡。

DNS 作負載均衡也有花樣能夠玩。 1)DNS 作內部負載均衡     所謂的內部負載均衡,其實很好理解。就像咱們的應用訪問數據庫,在應用裏配置的數據庫地址。若是配置成 IP 地址,一旦數據庫換到了另一臺機器,咱們就要修改配置。若是咱們有不少臺應用同時連一個數據庫,一換 IP,就須要將這些應用的配置所有修改一遍,是否是很麻煩?因此,咱們能夠將數據地址配置成域名。在更換數據庫位置時,只要在 DNS 服務器裏,將域名映射爲新的 IP 地址就能夠了。

    在這個基礎上,咱們能夠更進一步 。例如,某個應用要訪問另一個應用,若是配置另一個應用的 IP 地址,那麼這個訪問就是一對一的。可是當被訪問的應用因流量過大撐不住的時候,咱們就須要部署多個應用。這時候,咱們就不能直接配置成 IP,而是要配置域名了。只要在域名解析的時候,配置好策略,此次返回一個 IP,下次返回第二個 IP,就實現了負載均衡。

2)DNS 作全局負載均衡     爲了保證咱們應用的高可用性,每每會將應用部署在多個機房,每一個地方都會有本身的 IP 地址。當用戶訪問某個域名的時候,這個 IP 地址能夠輪詢訪問多個數據中心。若是一個數據中心由於某種緣由掛了,只要將這個 IP 地址從 DNS 服務器中刪掉就能夠了,用戶不會訪問到宕機的服務器,保證了應用的可用性。

    另外,咱們確定但願用戶能訪問就近的數據中心。這樣客戶訪問速度就會快不少,體驗也會好不少,也就實現了全局負載均衡的概念。

負載均衡示例

    咱們經過 NDS 訪問數據中心對象存儲上的靜態資源爲例,來看一看整個過程。

    假設全國有多個數據中心,託管在多個運營商,每一個數據中心有三個可用區。對象存儲能夠經過跨可用區部署,實現高可用性。在每一個數據中心中,都至少部署兩個內部負載均衡器,內部負載均衡器後面對接多個對象存儲的前置服務器(Proxy-server)。那麼,請求過程以下圖:

  1. 當一個客戶端要訪問 object.yourcompany.com 的時候,須要將域名轉換爲 IP 地址進行訪問,因此它要請求本地 DNS 解析器;
  2. 本地 DNS 解析器先查看本地的緩存是否有這個記錄。若是有,就直接用,省略後續查詢步驟,提升相應時間;
  3. 若是本地無緩存,就須要請求本地的 DNS 服務器;
  4. 本地 DNS 服務器通常部署在數據中心或者你所在的運營商網絡中。本地 DNS 服務器也須要看本地是否有緩存,若是有,就直接返回;
  5. 本地沒有,經過第 五、六、7 步驟獲取到 IP 地址,緩存到本地 DNS 解析器中,而後在返回給客戶端。

    對於不須要作全局負載均衡的簡單應用來說,yourcompany.com 的權威 DNS 服務器能夠直接將 object.yourcompa.com 這個域名解析爲一個或者多個 IP 地址,而後客戶端能夠經過多個 IP 地址,進行簡單的輪詢,實現簡單的負載均衡。

    可是對於複製的應用,尤爲是跨地域跨運營商的大型應用,就須要更加複雜的全局負載均衡機制,於是須要專門的設備或者服務器來作這件事情,這就是全局負載均衡器(GSLB,Global Server Load Balance)

    在 yourcompany.com 的 DNS 服務器中,通常是經過配置 CNAME 的方式,給 object.yourcompany.com 起一個別名。例如 object.vip.yourcompany.com,而後告訴本地 DNS 服務器,讓它請求 GSLB 解析這個域名,GSLB 就能夠在解析這個域名的過程當中,經過本身的策略實現負載均衡。

上圖中畫了兩層的 GSLB,是由於分運營商和地域。咱們但願不一樣運營商的客戶,能夠訪問對應運營商機房中的資源,這樣不跨運營商訪問,有利於提升吞吐量,減小時延。兩層 GSLB 的過程以下:

  1. 第一層 GSLB,經過查看請求它的本地 DNS 服務器所在的運營商,就知道用戶所在的運營商。假設是移動,經過 CNAME 的方式,經過另外一個別名 object.yd.yourcompany.com,告訴本地 DNS 服務器去請求第二層的 GSLB;
  2. 第二層 GSLB,經過查看請求它的本地 DNS 服務器的地址,知道用戶所在的地理位置,而後將距離用戶位置比較近的一個 Region 的六個內部負載均衡的地址,返回給本地 DNS 服務器;
  3. 本地 DNS 服務器將結果返回給本地 DNS 解析器;
  4. 本地 DNS 解析器將結果緩存後,返回給客戶端;
  5. 客戶端開始訪問屬於相同運營商的,且距離比較近的 Region1 中的對象存儲。固然,客戶端獲得了六個 IP 地址,它能夠經過負載均衡的方式,隨機或者輪詢選擇一個可用區進行訪問。對象存儲通常會有三個備份,從而實現對存儲讀寫的負載均衡。

小結

  • DNS 是網絡世界的地址簿。能夠經過域名查地址,由於域名服務器是按照樹狀結構組織的,於是域名查找是使用遞歸查詢的方式,並經過緩存的方式加快效率;
  • 在域名和 IP 的映射中,給了應用基於域名作負載均衡的機會,能夠是簡單的負載均衡,也能夠是根據地址和運營商作的全局負載均衡。

參考:

  1. 維基百科-域名系統 詞條;
  2. 知乎-域名解析
  3. 劉超 - 趣談網絡協議系列課;

原文出處:https://www.cnblogs.com/BeiGuo-FengGuang/p/10176702.html

相關文章
相關標籤/搜索