DNS在架構中的運用

2021-08-01 11:02:50 字數 1974 閱讀 7914

乙個http請求從客戶端到服務端,整個執行流程如下:

客戶端通過網域名稱test.com請求dns-server

dns-server返回網域名稱對應的外網ip(1.2

.3.4)

客戶端訪問外網ip(1.2

.3.4)向反向**nginx

反向**nginx配置了多個後端web-server服務內網ip(192.168

.0.1/192.168

.0.2)

請求最終落到某乙個web-server進行處理

其中,第乙個步驟網域名稱test.com到外網ip(1.2.3.4)的轉換,發生在整個服務端外部,服務端不可控。

典型的網際網路架構中,可以通過增加web-server來擴充web層的效能,但反向**nginx仍是整個系統的唯一入口,如果系統吞吐超過nginx的效能極限,難以擴容,此時就需要dns-server來配合水平擴充套件。

具體做法是:在dns-server對於同乙個網域名稱可以配置多個nginx的外網ip,每次dns解析請求,輪詢返回不同的ip,這樣就能實現nginx的水平擴充套件,這個方法叫「dns輪詢」。

「dns輪詢」可以將同乙個網域名稱的流量均勻分配到不同的nginx,那麼也可以利用它來做web-server的負載均衡:

架構中去掉nginx層

將多個web-server的內網ip直接改為外網ip

在dns-server將網域名稱對應的外網ip進行輪詢解析

和nginx相比,dns來實施負載均衡的優缺點優點:

利用第三方dns實施,服務端架構不用動

少了一層網路請求

不足:

dns只具備解析功能,不能保證對應外網ip的可用性(即使能夠做80口的探測,實時性肯定也是比nginx差很多的),而nginx做反向**時,與web-server之間有保活探測機制,當web-server掛掉時,能夠自動遷移流量

當web-server需要擴容時,通過dns擴容生效時間長,而nginx是服務端完全自己可控的部分,web-server擴容更實時更方便

由於上述兩個原因,架構上很少取消反向**層,而直接使用dns來實施負載均衡。

如「概述」中所述,http請求的第乙個步驟網域名稱到外網ip的轉換,發生在整個服務端外部,服務端不可控,那麼如果要實施「根據客戶端ip來分配最近的伺服器機房訪問」,就只能在dns-server上做了:

電信使用者想要訪問某乙個伺服器資源

瀏覽器向dns-server發起伺服器網域名稱解析請求

dns-server識別出訪問者是電信使用者

dns-server將電信機房的nginx外網ip返回給訪問者

訪問者就近訪問

根據使用者ip來返回最近的伺服器ip,稱為「智慧型dns」,cdn以及多機房多活中最常用。

dns的獨特的功能和作用:

dns輪詢,水平擴充套件反向**層

去掉反向**層,利用dns實施負載均衡

智慧型dns,根據使用者ip來就近訪問伺服器

DNS在架構設計中的巧用

苦學 2017 05 17 10 00 一 緣起 乙個http請求從客戶端到服務端,整個執行流程是怎麼樣的呢?乙個典型流程如上 1 客戶端通過網域名稱daojia.com請求dns server 2 dns server返回網域名稱對應的外網ip 1.2.3.4 3 客戶端訪問外網ip 1.2.3....

中運用 膠水在木雕中的運用技巧

hi,歡迎收看本期 木雕裡的那些事 我是你的解密人,谷藏峰 做木雕時,有時難免會碰到,關鍵部件斷裂的情況,自己辛辛苦苦做了那麼久,就因為這些小缺陷,整個報廢,未免有些可惜。那麼該怎麼辦呢?這個時候,就要用到它了 502膠水 這是我們生活中,粘鞋時會用到的一種速乾膠水。在各種五金雜貨店都能買到。它能在...

This在java中的運用

1 當有成員變數和區域性變數重名時。用this來表示成員變數。public class thisdemo public static void main string args 2 返回類自身的引用 public class thiszisheng private void print public...